Проблема с числами

Форум для изучающих FPC и их учителей.

Модератор: Модераторы

Проблема с числами

Сообщение AvoltT » 29.10.2011 13:40:57

Всем привет, недавно увлекся программированием на Free pascal. Составил программу нахождения корней квадратного уравнения, но вот в чем проблема. Иногда программа выдает значения x1,x2 правильно, иногда ошибается с одной переменной, а временами дает оба ответа неправильно. А и еще, ответ дается в таком виде
x1=2,45446845654968E+001
Что это значит?
AvoltT
незнакомец
 
Сообщения: 1
Зарегистрирован: 29.10.2011 13:35:51

Re: Проблема с числами

Сообщение sign » 29.10.2011 13:50:16

Эх, блин, местный телепат отлучился....
А то б я ответил. С его помощью, разумеется.
sign
энтузиаст
 
Сообщения: 1131
Зарегистрирован: 30.08.2009 09:20:53

Re: Проблема с числами

Сообщение pda » 29.10.2011 14:13:34

AvoltT писал(а):Иногда программа выдает значения x1,x2 правильно, иногда ошибается с одной переменной, а временами дает оба ответа неправильно.

На правах Капитана Очевидность: у вас ошибка в программе.

AvoltT писал(а):А и еще, ответ дается в таком виде
x1=2,45446845654968E+001
Что это значит?

Это экспоненциальная запись числа.
Аватара пользователя
pda
постоялец
 
Сообщения: 303
Зарегистрирован: 27.05.2005 19:59:53

Re: Проблема с числами

Сообщение anonimus » 23.02.2012 15:38:26

оффтопну немного. только начал учиться-решаю простенькие задачки и как то не так у меня получается.
вот текст задачки:
"Дана сторона квадрата 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
незнакомец
 
Сообщения: 5
Зарегистрирован: 23.02.2012 12:47:20

Re: Проблема с числами

Сообщение Vadim » 24.02.2012 03:16:53

anonimus
Попробуйте в начале программы написать такое заклинание:
{$mode objfpc}
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: Проблема с числами

Сообщение SSerge » 24.02.2012 05:23:52

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.



и сразу привыкайте ставить отступы согласно вложенности операторов, иначе потом будете путаться.
SSerge
энтузиаст
 
Сообщения: 971
Зарегистрирован: 12.01.2012 05:34:14
Откуда: Барнаул

Re: Проблема с числами

Сообщение anonimus » 24.02.2012 09:21:21

спасибо,учту. пока знаком только с integer,поэтому использовал его. интересовало именно-почему так выходит,а не как исправить.
anonimus
незнакомец
 
Сообщения: 5
Зарегистрирован: 23.02.2012 12:47:20


Вернуться в Обучение Free Pascal

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 5

Рейтинг@Mail.ru