Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Object Pascal: кроссплатформенные технологии > Ошибка в расчётах


Автор: Riki2 10.12.2009, 20:25
Помогите разобраться в чём ошибка программы.
Необходимо произвести расчёты на основе вводимых данных
Если вводить через переменные
sum:=(razmer*stavka*srok)/(day*100); 
и через обычный расчёт 
summ:=(50000*14*91)/(365*100);
Результаты выходят разные. Пробовал по разному написать формулу,в итоге ничего не получилось. Обращаюсь за помощью к вам.
Очень прошу помочь. Мне к завтрашнему надо доделать этот курсовой издать.

Автор: ФедосеевПавел 10.12.2009, 23:45
В TurboPascal размер integer - 2 байта, т.е. диапазон значений примерно от (-32000) до (+32000).
Попробуй в программе ввести i=50000 и посмотри на результат.
Код

var
  i     : Integer;
BEGIN
  ReadLn(i);
  WriteLn(i);
END.

При использовании переменных вычисления происходят в типе integer и происходит переполнение уже после присвоения переменной значения 50000, не говоря уже о последующем умножении.
А когда константы подставлены напрямую, то происходит неявное преобразование результата к типу LongInt.
Замени тип переменных на Real (razmer, stavka).
И замени
Код

sum:=(razmer*stavka*srok)/(day*100);
на
sum:=(razmer*stavka*srok)/day/100;

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)