простенькая прога считающая квадратные уравнения[решено]

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

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

простенькая прога считающая квадратные уравнения[решено]

Сообщение Earl » 22.11.2010 13:02:07

всем привет, изучаю паскаль и решил начать с простого, например написать прогу которая решила бы квадратное уравнение. написал простенький код
Код: Выделить всё
program uravnenie;
{$mode objfpc}{$H+}
uses
  Classes, SysUtils
  { you can add units after this };
var a,b,c,d,x,x1,x2:integer;
{$IFDEF WINDOWS}{$R uravnenie.rc}{$ENDIF}
begin
     writeln('Введите a');
     readln(a);
     writeln('Введите b');
     readln(b);
     writeln('Введите с');
     readln(c);
     d:=sqr(b)-4*a*c;
     if d<0 then
                writeln('Неверное уравнение')
            else if d=0 then
                   begin
                        x:=(-b)/2*a;
                        writeln('X = ',x)
                   end
                   else
                begin
                x1:=(-b+sqr(d))/2*a;
                x2:=(-b-sqr(d))/2*a;
                writeln('x1 = ', x1);
                writeln('x2 = ', x2);
                end;
end. 

при сборке жалуется на ошибку в x:=(-b)/2*a; меняю тип переменных x,x1,x2 на real, прога собирается, но ответ я получаю довольно странный
Код: Выделить всё
earl@earl-pc:~$ ./ur1
Введите a
1
Введите b
2
Введите с
1
X = -1.00000000000000E+000

раньше писал только в школе в проге PasABC, и там все работало
Последний раз редактировалось Earl 22.11.2010 18:16:48, всего редактировалось 1 раз.
Earl
незнакомец
 
Сообщения: 3
Зарегистрирован: 22.11.2010 12:53:18

Re: простенькая прога считающая квадратные уравнения

Сообщение Иван Шихалев » 22.11.2010 13:51:53

А в чем проблема? Все ж правильно.
Аватара пользователя
Иван Шихалев
энтузиаст
 
Сообщения: 1138
Зарегистрирован: 15.05.2006 11:26:13
Откуда: Екатеринбург

Re: простенькая прога считающая квадратные уравнения

Сообщение Little_Roo » 22.11.2010 14:08:27

Earl писал(а):
Код: Выделить всё
   
X = -1.00000000000000E+000

раньше писал только в школе в проге PasABC, и там все работало

Используйте форматный вывод. Например
writeln(x:3:2)
Аватара пользователя
Little_Roo
энтузиаст
 
Сообщения: 639
Зарегистрирован: 27.02.2009 19:56:36
Откуда: Санкт-Петербург

Re: простенькая прога считающая квадратные уравнения

Сообщение Vadim » 22.11.2010 15:56:15

Earl
Earl писал(а):при сборке жалуется на ошибку в x:=(-b)/2*a

Было бы неплохо, если бы Вы сразу и текст ошибки приводили. ;)
Проблема в том, что деление косой чертой (/)не даёт нам целого результата, а у Вас типы переменных именно целые. Для деления целых чисел существует специальный оператор - div, т.е. такая строка:
Код: Выделить всё
x:=(-b) div 2*a

ошибки бы не вызвала, однако при введении большинства чисел, правильный результат будет потерян. Поэтому тип Real в этом случае более уместен. А для того чтобы результат не выводился в виде числа с плавающей точкой, необходимо при операции вывода явно задать, сколько у Вас будет цифр всего и сколько в дробной части, как это продемонстрировал товарищ Little_Roo.
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: простенькая прога считающая квадратные уравнения

Сообщение Earl » 22.11.2010 16:06:48

Little_Roo писал(а):
Earl писал(а):
Код: Выделить всё
   
X = -1.00000000000000E+000

раньше писал только в школе в проге PasABC, и там все работало

Используйте форматный вывод. Например
writeln(x:3:2)

можете расписать что здесь что означает?
Vadim писал(а):Было бы неплохо, если бы Вы сразу и текст ошибки приводили. ;)

uravnenie.pas(23,32) Error: Incompatible types: got "Extended" expected "LongInt"
uravnenie.pas(28,35) Error: Incompatible types: got "Extended" expected "LongInt"
uravnenie.pas(29,35) Error: Incompatible types: got "Extended" expected "LongInt"
Vadim писал(а):Для деления целых чисел существует специальный оператор - div

про div знаю, но он выводит целое число. на будущее учту, я же все-таки еще учусь и многого не знаю/не понимаю
Earl
незнакомец
 
Сообщения: 3
Зарегистрирован: 22.11.2010 12:53:18

Re: простенькая прога считающая квадратные уравнения

Сообщение Vadim » 22.11.2010 17:39:34

Earl писал(а):можете расписать что здесь что означает?


3 - количество выводимых цифр всего,
2 - количество цифр после запятой.
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: простенькая прога считающая квадратные уравнения

Сообщение Earl » 22.11.2010 18:16:23

спасибо за помощь!
Earl
незнакомец
 
Сообщения: 3
Зарегистрирован: 22.11.2010 12:53:18

Re: простенькая прога считающая квадратные уравнения[решено]

Сообщение and » 30.11.2010 08:37:38

(-b)/2*a и (-b)/(2*a) - вещи немножко разные ;-)
Аватара пользователя
and
постоялец
 
Сообщения: 124
Зарегистрирован: 16.09.2009 17:11:01
Откуда: г. Гомель, Беларусь


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

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

Сейчас этот форум просматривают: Google [Bot] и гости: 3

Рейтинг@Mail.ru