Страница 1 из 1
Проблема с числами
Добавлено: 29.10.2011 13:40:57
AvoltT
Всем привет, недавно увлекся программированием на Free pascal. Составил программу нахождения корней квадратного уравнения, но вот в чем проблема. Иногда программа выдает значения x1,x2 правильно, иногда ошибается с одной переменной, а временами дает оба ответа неправильно. А и еще, ответ дается в таком виде
x1=2,45446845654968E+001
Что это значит?
Re: Проблема с числами
Добавлено: 29.10.2011 13:50:16
sign
Эх, блин, местный телепат отлучился....
А то б я ответил. С его помощью, разумеется.
Re: Проблема с числами
Добавлено: 29.10.2011 14:13:34
pda
AvoltT писал(а):Иногда программа выдает значения x1,x2 правильно, иногда ошибается с одной переменной, а временами дает оба ответа неправильно.
На правах Капитана Очевидность: у вас ошибка в программе.
AvoltT писал(а):А и еще, ответ дается в таком виде
x1=2,45446845654968E+001
Что это значит?
Это
экспоненциальная запись числа.
Re: Проблема с числами
Добавлено: 23.02.2012 15:38:26
anonimus
оффтопну немного. только начал учиться-решаю простенькие задачки и как то не так у меня получается.
вот текст задачки:
"Дана сторона квадрата a. Найти его площадь S = a2"
вот мой код:
Код: Выделить всё
var A:string; B,C:integer;
begin
repeat
write('a=');
readln(B);
C:=B*B;
writeln('S=',C);
readln(A);
until A='q'
end.
а вот результат работы программы:
а=20 S=400
a=200 S=-25536
в чем ошибка?
Re: Проблема с числами
Добавлено: 24.02.2012 03:16:53
Vadim
anonimus
Попробуйте в начале программы написать такое заклинание:
{$mode objfpc}
Re: Проблема с числами
Добавлено: 24.02.2012 05:23:52
SSerge
anonimus писал(а):a=200 S=-25536
в чем ошибка?
200*200=40000, в то время как int (в канонической форме) [-32767..32767]. У вас ошибка переполнения при операции умножения.
Если уж имеете дело с математикой, где возникают квадраты, кубы, корни квадратные и прочее, необходимо пользоваться типами чисел с плавающей точкой, в данном случае наиболее рационально double;
Код: Выделить всё
var a:double; C:double; s:string;
begin
repeat
write('a=');
readln(a);
c:=sqr(a);
writeln('c=',c:8:3);
readln(s);
until s='q'
end.
и сразу привыкайте ставить отступы согласно вложенности операторов, иначе потом будете путаться.
Re: Проблема с числами
Добавлено: 24.02.2012 09:21:21
anonimus
спасибо,учту. пока знаком только с integer,поэтому использовал его. интересовало именно-почему так выходит,а не как исправить.