Паскаль Ребят, делал домашнее задание с формулировкой "напишите процедуру подсчёта суммы...

0 голосов
42 просмотров

Паскаль
Ребят, делал домашнее задание с формулировкой "напишите процедуру подсчёта суммы вещественных чисел a, b, c, d".
Я написал, но выводится какое-то огромное число. Искал решения в сети и там при выведении суммы есть строчка:

writeln('Сумма чисел равна ',rez:0:2);

Что означает это 0:2 ?


Информатика (961 баллов) | 42 просмотров
0

А это с плавающей точкой! То есть выводит в виде 1,1*10^1

0

Лучше взять другой формат чисел. Например, double. Он, наверное, Вас больше устроит)

0

Точнее лучше будет понятен для школьников)

0

О, да, действительно, тогда все сходится) Выходит, что он тогда оставляет бесконечное кол-во знаков после запятой

0

Это тоже вещественный тип?

0

Да. Но не с плавающей точкой и мантиссой. Поэтому тип double предпочтительнее. Но он "кушает" память. Но для Вас это несущественно)

0

Спасибо большое с:

0

double - двойная точность

0

Пожалуйста

Дан 1 ответ
0 голосов
Правильный ответ
В зависимости от версии компилятора языка Паскаль, вещественные числа по умолчанию выводятся в различном виде. Например, Турбо (Borland) Паскаль выводит их в "научном" представлении, т.е. в виде мантиссы, содержащей один разряд до запятой и десятичного порядка. PascalABC.Net, если может, выводит такие числа в виде привычной десятичной дроби.
В приведенном ниже примере значение 4.03099999999977E+0001 читается следующим образом: 4.030999...977\cdot10^1\approx40,31.
Для того, чтобы получать вывод в "привычном" виде, можно использовать форматирование. Для этого, в операторе вывода после значения переменной указывается конструкция вида m:n, где m- общее количество позиций, отводимое под запись числа (если 0 - то количество позиций определяется автоматически так, чтобы число поместилось), а n- количество позиций, отводимое под дробную часть.
Такая запись может применяться как для общего описателя типа вещественных чисел real, так и для конкретного (например, double - чисел "двойной точности", т.е. восьмибайтных). В примере хорошо видно, как использование двойной точности отражается на выводе результата в "научном" формате .

Пример на Турбо Паскаль
{$G+,N+}
uses Crt;

procedure Sum1(a,b,c,d:real;var r:real);
begin
  r:=a+b+c+d
end;

procedure Sum2(a,b,c,d:double;var r:double);
begin
  r:=a+b+c+d
end;

var
  e,f,g,h,res1:real;
  p,q,r,s,res2:double;
begin
  ClrScr;
  Write('e f g h= '); Read(e,f,g,h);
  Sum1(e,f,g,h,res1);
  Writeln('res1= ',res1,' = ',res1:0:2);
  Write('p q r s= '); Read(p,q,r,s);
  Sum2(p,q,r,s,res2);
  Writeln('res2= ',res2,' = ',res2:0:2);
  ReadKey
end.

Тестовое решение:
e f g h= 12.74 24.17 -5.6 9
res1=  4.03099999999977E+0001 = 40.31
p q r s= 12.74 24.17 -5.6 9
res2=  4.03100000000000E+0001 = 40.31



(142k баллов)