Помощь - Поиск - Пользователи - Календарь
Полная версия: Решение квадратных уравнений
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Вацура
Доброго времени суток.
Как написать прогу, которая решает квадратные уравнения?
Я делал так:

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
Цитата
Это связано с тем, что из отрицательного числа корень не извлекаеться?

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

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

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.

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

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.



Вацура
Спасибо. Разобразался. good.gif
Гость
И чего? Эта программа нормально считала корни? ;)
Косяк, который походу так ни кто и не заметил:
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, что касаемо всего остального - знаешь, если на все обращать внимание - с ума сойти можно... Автор получил нужный ответ - получил. Все, тема закрыта!

Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.