Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Клуб программистов > Свободное общение
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.01.2012, 07:44   #201
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

Цитата:
Сообщение от netrino Посмотреть сообщение
А зачем его округлять до вывода? Округление ведь, в данном случае, делается, как я понял, исключительно для читабельности, посему нет необходимости менять саму f, достаточно вывести её в нужном формате.
Если задача стоит "округлить данные" - значит нужно округлять сами данные, а не подтасовывать вывод.

Нужно решать поставленную задачу, а не пытаться сделать сердитый чит.
_Bers вне форума Ответить с цитированием
Старый 14.01.2012, 07:54   #202
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Цитата:
Сообщение от _Bers Посмотреть сообщение
Если задача стоит "округлить данные" - значит нужно округлять сами данные, а не подтасовывать вывод.

Нужно решать поставленную задачу, а не пытаться сделать сердитый чит.
Вы же понимаете, что способ округления данных - это совершенно незначительная деталь реализации? Важен результат, а он виден лишь при выводе на экран. И это не чит, а напротив - правильный способ вывода данных в определённом формате. А если уж придираться к реализация, то она у Вас неверна, так как происходит обрезание лишних знаков после запятой, но не округление.
Код:
 sum = ((float)((int) (sum *=100)))/100.0f; //обрезание 

 sum = ((int)(sum * 100 + 0.5)) / 100.0; // округление
netrino вне форума Ответить с цитированием
Старый 14.01.2012, 08:09   #203
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

Цитата:
Сообщение от netrino Посмотреть сообщение
Вы же понимаете, что способ округления данных - это совершенно незначительная деталь реализации?
Вы не поняли.
Если в задаче сказано: "мне нужно высветить результат так, что бы после запятой было только две цифры" - это одно.

Но если в задаче сказано "округлить данные" - значит речь о модификации самих данных.

Капитан сказала: нужно округлить данные.
Это означает обработку самих данных. То есть нужно изменить сами данные. А не то, как они высвечиваться будут.

Не важно как именно это будет сделано.
Важно, что бы данные были округлены. Ну то есть модифицированы

В вашем случае, вы просто подтасовали вывод. То есть, вы сделали видимость, якобы данные были округлены. На самом деле, они остались без изменения.

Таким образом, после вашей операции "округления" данные, как были не округленными, так ими и остались. Итого - вы не выполнили задачу.
Вы не модифицировали данные.


Цитата:
Сообщение от netrino Посмотреть сообщение
Важен результат, а он виден лишь при выводе на экран. И это не чит, а напротив - правильный способ вывода данных в определённом формате.
Важно - выполнить задачу. Причем, выполнить её в рамках заявленных требований. Если в задаче сказанно "округлить данные". Значит нужно округлять данные, а не подтасовывать вывод.

"Если вы будете решать задачу, пренебрегая требованиями к этой задаче, то вы рискуете решить совсем другую задачу"(ц)Макконнел.

Цитата:
Сообщение от netrino Посмотреть сообщение
А если уж придираться к реализация, то она у Вас неверна, так как происходит обрезание лишних знаков после запятой, но не округление.
Код:
 sum = ((float)((int) (sum *=100)))/100.0f; //обрезание 

 sum = ((int)(sum * 100 + 0.5)) / 100.0; // округление
Я знаю, что у меня идет обрезание. Я ж даже в комментарии указал, что это именно обрезание. Формулу округления я не знал (кстати, спасибо за сабж), а ковырятся со стандартными функциями было лень.

Я решил, пусть Капитан сама как нибудь с этим делом вразумеет)

Она ведь ещё спросит: А почему, после округления/обрезания, вывод все равно корявый?
_Bers вне форума Ответить с цитированием
Старый 14.01.2012, 08:14   #204
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Цитата:
Сообщение от _Bers Посмотреть сообщение
Вы не поняли.
Если в задаче сказано: "мне нужно высветить результат так, что бы после запятой было только две цифры" - это одно.

Но если в задаче сказано "округлить данные" - значит речь о модификации самих данных.
Вы путаете понятия. Данные не есть переменная, но лишь то, что в ней содержится. Когда они будут изменены и будут ли эти изменения сохранены обратно в переменную, не играет никакой роли в контексте данной задачи, скажу более, не имеет смысла сохранять изменённые данные обратно в носитель (переменную).
То есть данные модифицируются при выводе на экран, но модификации эти не сохраняются обратно (но ведь об этом ничего и не говорится в задаче, верно?)
netrino вне форума Ответить с цитированием
Старый 14.01.2012, 08:20   #205
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

Цитата:
Сообщение от netrino Посмотреть сообщение
Вы путаете понятия. Данные не есть переменная, но лишь то, что в ней содержится. Когда они будут изменены и будут ли эти изменения сохранены обратно в переменную, не играет никакой роли в контексте данной задачи, скажу более, не имеет смысла сохранять изменённые данные обратно в носитель (переменную).
То есть данные модифицируются при выводе на экран, но модификации эти не сохраняются обратно (но ведь об этом ничего и не говорится в задаче, верно?)
Задача:
"как сделать что-бы sum округлялось до двух знаков после запятой(только попроще что-нибудь)?"(ц)Кэп

Что именно вы модифицировали? По задаче нужно было модифицировать значение переменной sum

После операции округления, sum должна содержать округленное значение.

Почему, после вашего "округления", значение sum не изменилось?
_Bers вне форума Ответить с цитированием
Старый 14.01.2012, 08:32   #206
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Цитата:
Сообщение от _Bers Посмотреть сообщение
Задача:
"как сделать что-бы sum округлялось до двух знаков после запятой(только попроще что-нибудь)?"(ц)Кэп

Что именно вы модифицировали? По задаче нужно было модифицировать значение переменной sum

После операции округления, sum должна содержать округленное значение.

Почему, после вашего "округления", значение sum не изменилось?
Не воспринимайте всё слишком буквально. Согласитесь, модифицировать переменную sum не имеет никакого смысла, и уж ничуть не проще, чем использовать форматированный вывод. Важно, что данные округлились и представлены в верной форме клиенту.
netrino вне форума Ответить с цитированием
Старый 14.01.2012, 09:24   #207
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

Цитата:
Сообщение от netrino Посмотреть сообщение
Не воспринимайте всё слишком буквально. Согласитесь, модифицировать переменную sum не имеет никакого смысла, и уж ничуть не проще, чем использовать форматированный вывод. Важно, что данные округлились и представлены в верной форме клиенту.
Вы сейчас высказали фундаментальную вещь. Я с вами полностью согласен.

Просто вы восприняли фразу Капитана, как "пожелание заказчика", а я - как "конкретное техническое задание"

Последний раз редактировалось _Bers; 14.01.2012 в 09:45.
_Bers вне форума Ответить с цитированием
Старый 14.01.2012, 23:28   #208
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Цитата:
Сообщение от _Bers Посмотреть сообщение
Вы сейчас высказали фундаментальную вещь. Я с вами полностью согласен.

Просто вы восприняли фразу Капитана, как "пожелание заказчика", а я - как "конкретное техническое задание"
Хм, боюсь, в данном случае, Вы не совсем верно меня поняли. Впрочем, это моя вина, следовало уточнить, что под "клиентом" я имею ввиду не ITTI, но пользователя программы, клиентом назвал, потому что это, теоретически, может быть не человек. Слишком обобщил, пожалуй. О чём я говорю, так это о том, что условия на программу, как правило, накладываются на её интерфейс (я имею ввиду некий протокол взаимодействия, а не UI), но не на реализацию, которая скрыта от клиента (пользователя) и может быть любой, удовлетворяющей интерфейсу. То бишь я воспринял слова ITTI как "конкретное техническое задание", но не в смысле описания реализации, а в смысле ожидаемого вывода.

Но, впрочем, ладно, наверное спорить тут больше не о чём. Возможно Вы и правы, и я неверно понял, чего же желает ITTI на самом деле.

Последний раз редактировалось netrino; 14.01.2012 в 23:32.
netrino вне форума Ответить с цитированием
Старый 18.01.2012, 19:38   #209
ITTI
Пользователь
 
Регистрация: 19.12.2011
Сообщений: 65
По умолчанию

Цитата:
Сообщение от _Bers Посмотреть сообщение
Она ведь ещё спросит: А почему, после округления/обрезания, вывод все равно корявый?
как? я не спросила? странно.
sinx=z - как мне узнать чему равен угол х?
ITTI вне форума Ответить с цитированием
Старый 18.01.2012, 19:49   #210
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

Цитата:
Сообщение от ITTI Посмотреть сообщение
как? я не спросила? странно.
sinx=z - как мне узнать чему равен угол х?
http://www.cplusplus.com/reference/clibrary/cmath/asin/
_Bers вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
PopupMenu со мной не дружит Жигилий_Ульяна Компоненты Delphi 5 25.12.2008 11:04
проблемы с select или со мной... smoke888 JavaScript, Ajax 2 23.09.2008 19:02