Паскаль
Ребят, делал домашнее задание с формулировкой "напишите процедуру подсчёта суммы вещественных чисел a, b, c, d".
Я написал, но выводится какое-то огромное число. Искал решения в сети и там при выведении суммы есть строчка:
writeln('Сумма чисел равна ',rez:0:2);
Что означает это 0:2 ?
bearcab:
А это с плавающей точкой! То есть выводит в виде 1,1*10^1
rez:0:2
Первая цифра - количество знаков выводимой цифры, если ноль, то без ограничений.
Вторая - количество знаков после запятой
Первая цифра - количество знаков выводимой цифры, если ноль, то без ограничений.
Вторая - количество знаков после запятой
Лучше взять другой формат чисел. Например, double. Он, наверное, Вас больше устроит)
Точнее лучше будет понятен для школьников)
О, да, действительно, тогда все сходится) Выходит, что он тогда оставляет бесконечное кол-во знаков после запятой
Это тоже вещественный тип?
Да. Но не с плавающей точкой и мантиссой. Поэтому тип double предпочтительнее. Но он "кушает" память. Но для Вас это несущественно)
Спасибо большое с:
double - двойная точность
Пожалуйста
Ответы
Ответ дал:
0
В зависимости от версии компилятора языка Паскаль, вещественные числа по умолчанию выводятся в различном виде. Например, Турбо (Borland) Паскаль выводит их в "научном" представлении, т.е. в виде мантиссы, содержащей один разряд до запятой и десятичного порядка. PascalABC.Net, если может, выводит такие числа в виде привычной десятичной дроби.
В приведенном ниже примере значение 4.03099999999977E+0001 читается следующим образом:
.
Для того, чтобы получать вывод в "привычном" виде, можно использовать форматирование. Для этого, в операторе вывода после значения переменной указывается конструкция вида 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
В приведенном ниже примере значение 4.03099999999977E+0001 читается следующим образом:
Для того, чтобы получать вывод в "привычном" виде, можно использовать форматирование. Для этого, в операторе вывода после значения переменной указывается конструкция вида 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
Вас заинтересует
2 года назад
2 года назад
7 лет назад