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

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

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

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

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

Сообщение 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, и там все работало
Последний раз редактировалось Earl 22.11.2010 17:16:48, всего редактировалось 1 раз.
Аватара пользователя
Иван Шихалев
энтузиаст
Сообщения: 1138
Зарегистрирован: 15.05.2006 11:26:13
Откуда: Екатеринбург
Контактная информация:

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

Сообщение Иван Шихалев »

А в чем проблема? Все ж правильно.
Аватара пользователя
Little_Roo
энтузиаст
Сообщения: 639
Зарегистрирован: 27.02.2009 18:56:36
Откуда: Санкт-Петербург

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

Сообщение Little_Roo »

Earl писал(а):

Код: Выделить всё

    
X = -1.00000000000000E+000

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

Используйте форматный вывод. Например
writeln(x:3:2)
Vadim
долгожитель
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

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

Сообщение Vadim »

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

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

Код: Выделить всё

x:=(-b) div 2*a

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

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

Сообщение 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 знаю, но он выводит целое число. на будущее учту, я же все-таки еще учусь и многого не знаю/не понимаю
Vadim
долгожитель
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

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

Сообщение Vadim »

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


3 - количество выводимых цифр всего,
2 - количество цифр после запятой.
Earl
незнакомец
Сообщения: 3
Зарегистрирован: 22.11.2010 11:53:18

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

Сообщение Earl »

спасибо за помощь!
Аватара пользователя
and
постоялец
Сообщения: 124
Зарегистрирован: 16.09.2009 17:11:01
Откуда: г. Гомель, Беларусь
Контактная информация:

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

Сообщение and »

(-b)/2*a и (-b)/(2*a) - вещи немножко разные ;-)
Ответить