Всем привет, недавно увлекся программированием на Free pascal. Составил программу нахождения корней квадратного уравнения, но вот в чем проблема. Иногда программа выдает значения x1,x2 правильно, иногда ошибается с одной переменной, а временами дает оба ответа неправильно. А и еще, ответ дается в таком виде
x1=2,45446845654968E+001
Что это значит?
Проблема с числами
Модератор: Модераторы
Эх, блин, местный телепат отлучился....
А то б я ответил. С его помощью, разумеется.
А то б я ответил. С его помощью, разумеется.
AvoltT писал(а):Иногда программа выдает значения x1,x2 правильно, иногда ошибается с одной переменной, а временами дает оба ответа неправильно.
На правах Капитана Очевидность: у вас ошибка в программе.
AvoltT писал(а):А и еще, ответ дается в таком виде
x1=2,45446845654968E+001
Что это значит?
Это экспоненциальная запись числа.
оффтопну немного. только начал учиться-решаю простенькие задачки и как то не так у меня получается.
вот текст задачки:
"Дана сторона квадрата a. Найти его площадь S = a2"
вот мой код:
а вот результат работы программы:
а=20 S=400
a=200 S=-25536
в чем ошибка?
вот текст задачки:
"Дана сторона квадрата 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
в чем ошибка?
anonimus
Попробуйте в начале программы написать такое заклинание:
{$mode objfpc}
Попробуйте в начале программы написать такое заклинание:
{$mode objfpc}
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.
и сразу привыкайте ставить отступы согласно вложенности операторов, иначе потом будете путаться.
спасибо,учту. пока знаком только с integer,поэтому использовал его. интересовало именно-почему так выходит,а не как исправить.
