Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ Решение квадратных уравнений

Автор: Вацура 5.12.2006 4:00

Доброго времени суток.
Как написать прогу, которая решает квадратные уравнения?
Я делал так:


uses crt;
var a,b,c,d,x1,x2:real;
begin
clrscr;
write('Введите а');
readln(a);
write('Введите b');
readln(b);
write('Введите c');
readln(c );
d:=sqr(b)-4*a*c;
x1:=(-b-sqrt(d))/2*a;
x1:=(-b+sqrt(d))/2*a;
if d<0 then write('Корней нет') else write(x1,x2);
readln;
end.

И когда d=0 или d>0, то всё нормально,
но если d<0 тогда Паскаль выдёт
207 ошибку(Invalid floating point operation).
Это связано с тем, что из отрицательного числа корень не извлекаеться?
Что нужно сделать, чтобы прга заработала?

Автор: Bokul 5.12.2006 4:11

Цитата
Это связано с тем, что из отрицательного числа корень не извлекаеться?

Конечно.
Цитата
Что нужно сделать, чтобы прга заработала?

Добавить проверку:

uses crt;
var a,b,c,d,x1,x2:real;
begin
clrscr;
write('Введите а');
readln(a);
write('Введите b');
readln(b);
write('Введите c');
readln(c );
d:=sqr(b)-4*a*c;
if d>=0 then{<---сдесь}
begin
x1:=(-b-sqrt(d))/2*a;
x1:=(-b+sqrt(d))/2*a;
end;
if d<0 then write('?????? ???') else write(x1,x2);
readln;
end.


Автор: Вацура 5.12.2006 11:59

Спасиб, всё получилось. smile.gif
Но вот ещё в чем загвоздка, как мне поставить счетчик?
Чтобы прога не вырубалась после первого решения, а можно
было бы задать столько, сколько нужно решений, после чего
прога заканчивалась?

Автор: AnTiDoD 5.12.2006 21:12

Введи цикл, либо for (если уже известно будет сколько раз будет повторяться) или repeat.

Автор: Bokul 6.12.2006 4:27


uses crt;
var a,b,c,d,x1,x2:real;
begin
repeat
clrscr;
writeln('Введите а');
readln(a);
writeln('Введите b');
readln(b);
writeln('Введите c');
readln(c );
d:=sqr(b)-4*a*c;
if d>=0 then{<---сдесь}
begin
x1:=(-b-sqrt(d))/2*a;
x1:=(-b+sqrt(d))/2*a;
end;
if d<0 then
write('Корней нет')
else
write(x1,x2);
writeln('Press Esc to exit');
until readkey=#27;
end.




Автор: Вацура 6.12.2006 11:53

Спасибо. Разобразался. good.gif

Автор: Гость 28.02.2007 16:08

И чего? Эта программа нормально считала корни? ;)
Косяк, который походу так ни кто и не заметил:

x1:=(-b-sqrt(d))/2*a;
x1:=(-b+sqrt(d))/2*a;


Вот поэтому вопрос:
А как вы получаете значение второго корня? ;)

Короче исправленный вариант:
x1:=(-b-sqrt(d))/2*a;
x2:=(-b+sqrt(d))/2*a;


P.S. posted by DJ Gate.

 ! 
А косяк этот никому напрочь не нужен, чтобы его замечать!!! Автор задал вопрос по другому поводу - об RTE 207, что касаемо всего остального - знаешь, если на все обращать внимание - с ума сойти можно... Автор получил нужный ответ - получил. Все, тема закрыта!