Страница 1 из 1

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

СообщениеДобавлено: 22.11.2010 13:02:07
Earl
всем привет, изучаю паскаль и решил начать с простого, например написать прогу которая решила бы квадратное уравнение. написал простенький код
Код: Выделить всё
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, и там все работало

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

СообщениеДобавлено: 22.11.2010 13:51:53
Иван Шихалев
А в чем проблема? Все ж правильно.

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

СообщениеДобавлено: 22.11.2010 14:08:27
Little_Roo
Earl писал(а):
Код: Выделить всё
   
X = -1.00000000000000E+000

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

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

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

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

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

ошибки бы не вызвала, однако при введении большинства чисел, правильный результат будет потерян. Поэтому тип Real в этом случае более уместен. А для того чтобы результат не выводился в виде числа с плавающей точкой, необходимо при операции вывода явно задать, сколько у Вас будет цифр всего и сколько в дробной части, как это продемонстрировал товарищ Little_Roo.

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

СообщениеДобавлено: 22.11.2010 16:06:48
Earl
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 знаю, но он выводит целое число. на будущее учту, я же все-таки еще учусь и многого не знаю/не понимаю

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

СообщениеДобавлено: 22.11.2010 17:39:34
Vadim
Earl писал(а):можете расписать что здесь что означает?


3 - количество выводимых цифр всего,
2 - количество цифр после запятой.

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

СообщениеДобавлено: 22.11.2010 18:16:23
Earl
спасибо за помощь!

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

СообщениеДобавлено: 30.11.2010 08:37:38
and
(-b)/2*a и (-b)/(2*a) - вещи немножко разные ;-)