Страница 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,поэтому использовал его. интересовало именно-почему так выходит,а не как исправить.