Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > C/C++: Для новичков > Float в int // С |
Автор: Androidxx 4.3.2018, 21:50 | ||
Всем привет и доброго времени суток! И заранее извините за грамматику! Проблема вроде распростроненная и гуглил я по ней достаточно долго, но так ничерта и не понял. Начну с начала! Давно хотел начать учить программирование и тут на днях товарищ вдруг сообщает давай вместе учить Си. Ломатся я не стал и дело пошло. Вчера весь день ганяли теорию с разбором практических заданий, сегодня решили погонять только задания и тут началось. С горем по полам я добрался до 6-го задания в онлаин задачнке и тут сломался. Задание звучит так! Даны несколько пар чисел. В каждой паре нужно разделить первое на второе и вернуть результат округлённый до ближайшего целого. В случаях когда дробная часть равна точно 0.5 договоримся округлять вверх (т.е. прибавляя 0.5). Заметьте что для отрицательных чисел "вверх" означает "в сторону нуля". Во всех дальнейших задачах упоминающих округление нужно использовать именно такой алгоритм (если не сказано иное). Входные данные - в первой строке указано количество тестов. В остальных строках сами тесты (пары чисел, которые нужно делить). Ответ должен содержать результаты округления для каждого теста, разделенные пробелами. Для простоты использую пример из задачника, на самом деле чиста совсем другие, тестов там было 15, а числа в них примерно такие -7873287 3840767. Пример: входные данные: 3 12 8 11 -3 400 5 ответ: 2 -4 80 Написал я программу которая вроде даже что-то считает но вот незадача ответ не сходится. Собственно программа:
Писалось все в Cи без ++ ![]() А вот как это выглядит в консоли если задать числа из примера: Enter data here: 12 8 b2 = 2.000000 Intermediate data is:1 ╣1 Enter data here: 11 -3 b2 = -4.000000 Intermediate data is:-3 ╣2 Enter data here: 400 5 b2 = 80.000000 Intermediate data is:80 ╣3 a=4 output data=1 -3 80 и получается что мой ответ: 1 -3 80 а правельный 2 -4 80. И как бы вот оно b2 = 2.000000 на следующем шаге -4.000000 и т.д. но при переводе в int получается 1 в место 2 и -3 в место -4. Я бы просто сделал +1 но такое получается не всегда например 80.000000 нормально переводится и получается 80. Ну и напрашивается вопрос почему так происходит и как с этим боротся!? ПОМОГИТЕ! ![]() Спасибо за внимание! |
Автор: Androidxx 5.3.2018, 08:13 | ||||||
Еще раз здравствуйте! В общем я разобрался ![]() ![]()
rint(b2) делался только для строки вывода и не сохронялся в переменную. правельный выриант:
И рас уш я тут может подскажите как правельно вводить и выводить данные в подобных случаях... потому что готовое задание в моем конкретном случае выглядит так:
очень много переменных мне кажется так не должно быть. спасибо! |
Автор: Romikgy 5.3.2018, 15:18 | ||
|
Автор: Androidxx 5.3.2018, 19:52 |
Примного благодарен! ![]() |