IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

 
 Ответить  Открыть новую тему 
> Решение квадратных уравнений, В чем ошибка?
Вацура
сообщение 5.12.2006 0:00
Сообщение #1


Пионер
**

Группа: Пользователи
Сообщений: 69
Пол: Мужской
Реальное имя: Игорь

Репутация: -  0  +


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

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).
Это связано с тем, что из отрицательного числа корень не извлекаеться?
Что нужно сделать, чтобы прга заработала?

Сообщение отредактировано: lapp - 6.12.2006 4:08
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Bokul
сообщение 5.12.2006 0:11
Сообщение #2


Гуру
*****

Группа: Пользователи
Сообщений: 1 117
Пол: Мужской
Реальное имя: Богдан

Репутация: -  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.



--------------------
Лао-Цзы :
Знать много и не выставлять себя знающим есть нравственная высота. Знать мало и выставлять себя знающим есть болезнь. Только понимая эту болезнь, мы можем избавиться от нее.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Вацура
сообщение 5.12.2006 7:59
Сообщение #3


Пионер
**

Группа: Пользователи
Сообщений: 69
Пол: Мужской
Реальное имя: Игорь

Репутация: -  0  +


Спасиб, всё получилось. smile.gif
Но вот ещё в чем загвоздка, как мне поставить счетчик?
Чтобы прога не вырубалась после первого решения, а можно
было бы задать столько, сколько нужно решений, после чего
прога заканчивалась?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
AnTiDoD
сообщение 5.12.2006 17:12
Сообщение #4


Новичок
*

Группа: Пользователи
Сообщений: 33
Пол: Мужской
Реальное имя: Алексей

Репутация: -  0  +


Введи цикл, либо for (если уже известно будет сколько раз будет повторяться) или repeat.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Bokul
сообщение 6.12.2006 0:27
Сообщение #5


Гуру
*****

Группа: Пользователи
Сообщений: 1 117
Пол: Мужской
Реальное имя: Богдан

Репутация: -  11  +



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.





--------------------
Лао-Цзы :
Знать много и не выставлять себя знающим есть нравственная высота. Знать мало и выставлять себя знающим есть болезнь. Только понимая эту болезнь, мы можем избавиться от нее.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Вацура
сообщение 6.12.2006 7:53
Сообщение #6


Пионер
**

Группа: Пользователи
Сообщений: 69
Пол: Мужской
Реальное имя: Игорь

Репутация: -  0  +


Спасибо. Разобразался. good.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Гость
сообщение 28.02.2007 12:08
Сообщение #7


Гость






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



Сообщение отредактировано: volvo - 28.02.2007 12:20
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 20.07.2025 14:45
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"