Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

нахождение времени, потраченного на прохождение путником половины пути - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Выделение памяти http://www.cyberforum.ru/cpp-beginners/thread256986.html
Вот кусок кода, класс и функция добавления в список Класс занимает 64 бита, я добавляю 10 элементов в список - 640 бит Потом отнимаю posl-perv то есть указатели на начало и конец и ожидаю что...
C++ Описать процедуру в С Описать процедуру AddRightDigit(D, K), добавляющую к целому положительному числу K справа цифру D (D — входной параметр целого типа, лежащий в диапазоне 0-9, K — параметр целого типа, являющийся... http://www.cyberforum.ru/cpp-beginners/thread256980.html
Visual Studio 2010 кто что думает C++
Давайте обговорим 10ю студию. Мое мнение - она недоработаная, например, стоит что-то поменять в хэдере и она вылетает, интелисенс материться когда прога работает, при чем, какой-то он тупой... Кто...
C++ Л/р "Использование строк"
Написать программу, которая считывает английский текст из файла и выводит его на экран, заменив каждую первую букву слов, начинающихся с гласной бук¬вы, на прописную. код #include "stdafx.h"...
C++ Время скидок http://www.cyberforum.ru/cpp-beginners/thread256968.html
Помогите пожалуйста решить на си: Написать программу вычисления стоимости покупки с учетом скидки. Скидка в 10% предоставляется, если сумма покупки больше 1000 руб. Ниже приведен рекомендуемый вид...
C++ При построчном чтении файла eof наступает раньше срока Здравствуйте, товарищи! Столкнулся с такой проблемой: при построчном потоковом чтении файла (при помощи getline) бит eof устанавливается раньше, чем положено (считывается меньше половины... подробнее

Показать сообщение отдельно
Dexter
285 / 145 / 16
Регистрация: 13.10.2009
Сообщений: 164
15.03.2011, 10:35
3:0 6.0 2:0 6.0 1:0 6.0 выдает 2:59 вместо 3
При компиляции обычно выдается предложение типа такого:
warning C4244: =: преобразование "float" в "int", возможна потеря данных
Вот именно из-за этого оно и происходит, когда вы считаете t0, то преобразовываете float в int.
float - это дробное число, которое основывается на значении с плавающей точкой.
Например в этом случае если t0 сделать типа float, то оно будет равно, что-то типа 179.9999999999
и при преобразовании в инт - усекается остаток, потому и получим 179 вместо 180.
Чтобы такого небыло, можно округлить с помощью функции round.

C
1
2
3
4
5
6
if (s0>0 && s0<=s1)                                                                                                     
  t0 = round(s0/v1);
if (s0>s1 && s0<=s1+s2)
  t0 = round(s1/v1 + (s0-s1)/v2);
if (s0>=s1+s2 && s0<s1+s2+s3)
  t0 = round(s1/v1 + s2/v2 + (s0-s1-s2)/v3);
Ответ тогда будет как-раз 3

P.S. Если вдруг не будет функции round в библиотеке math.h, то ее можно объявить как:
C
1
2
3
4
int round(float x)
{
    return floor (x + 0.5);
}
floor и ceil у меня там есть, а вот раунда нету)
1
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru