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

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

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

 
 Ответить  Открыть новую тему 
> квадратное уравнение с некомплексными корнями: не, всё тактривиальнокаккажецанапервыйвзгляд
сообщение
Сообщение #1


Гость






Здорово чуваки!
Вобщем такой трабл. Инфа в инсте. Прогу на Паскале надо написать. Корни квадратного уравнения (некомплексные). И вроде всё элементарно:
uses crt;
var
i:integer;
a,b,c,d,x1,x2,p1,p2,t,y,u:real;
r:real;
begin
clrscr;
write('a= ');
read(a);
write('b= ');
read(b);
write('c= ');
read©;
If (a=0) then
begin
If (b=0) then
begin
If (c=0) then
writeln('infinitnoye mnojestvo')
else
writeln('korney net');
end
else begin
x1:=-c/b;
writeln('koren ',x1:4:4);
p1:=a*x1*x1+b*x1 + c;
writeln('proverca: ax1^2+bx1+c= ',p1);
end;
end
else
begin
d:=(sqr(b)-4*a*c);
t:=sqrt(D);
If (d<0) then
writeln('real korney net')
else
begin
writeln;
writeln;
x1:=(- b - t ) / (2*a);
x2:=(- b + t ) / (2*a);
writeln('koren1= ',x1);
writeln('koren2= ',x2);
p1:=a*x1*x1 + b*x1 + c;
writeln('proverca1: ax1^2+bx1+c= ',p1);
p2:=a*x2*x2 + b*x2 + c;
writeln('proverca2: ax2^2+bx2+c= ',p2);
end;
end;
readln;
readln;
end.


<прога одногрупников>
Но препод при*лся. Вводит в качестве b число порядка (10^4)-10^6; вместо с - порядка (10^-4)-(10^-6); ну и а порядка 10^1. В результате конечно при подстановке получившихся корней в исходное уравнение конечно же выражение становится неравным нулю. Ну так вот он заставляет нас посчитать погрешность.

М
Тегами пользуйся ...



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


Гость






koSTIK, вообще-то сравнивать 2 числа вещественного типа через "=" не принято... Вот эта программа уже не будет вылетать при вводе таких значений, какие ты привел (твоя - вылетала):

{$n+}
uses crt;
const
eps = 10E-9;

var
i:integer;
a,b,c,d,x1,x2,p1,p2,t,y,u:double;
r:real;
begin
clrscr;
write('a= '); readln( a );
write('b= '); readln( b );
write('c= '); readln( c );

if abs(a) < eps then begin
if abs(b) < eps then begin
if abs© < eps then
writeln('infinitnoye mnojestvo')
else
writeln('korney net');
end
else begin
x1:=-c/b;
writeln('koren ',x1:4:4);
p1:=a*x1*x1+b*x1 + c;
writeln('proverca: ax1^2+bx1+c= ',p1);
end;
end
else begin
d:=(sqr(b)-4*a*c);
t:=sqrt(D);
If (d<0) then writeln('real korney net')
else begin
writeln;
writeln;
x1:=(- b - t ) / (2*a);
x2:=(- b + t ) / (2*a);
writeln('koren1= ',x1);
writeln('koren2= ',x2);
p1:=a*x1*x1 + b*x1 + c;
writeln('proverca1: ax1^2+bx1+c= ',p1);
p2:=a*x2*x2 + b*x2 + c;
writeln('proverca2: ax2^2+bx2+c= ',p2);
end;
end;
readln;
readln;
end.


P.S.
Цитата
он заставляет нас посчитать погрешность

Погрешность чего?
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Гость






Цитата
koSTIK, вообще-то сравнивать 2 числа вещественного типа через "=" не принято...

Не очень-то вас понимаю. Ткните пальцем, пожалуйста.
Цитата
Вот эта программа уже не будет вылетать при вводе таких значений, какие ты привел (твоя - вылетала):

Опять вас не очень-то понимаю. Ну вводим a=12 b=19000 c=0.00056.
При подстановке в исходное уравнение должен получится ноль, однако 1 корень даёт 1.29...E-0009 (в предыдущей проге 5.55...E-0006) второй -1.41...E-0010 (соответственно -6.24...E-0006). Так что хрен редьки не слаще (по крайней мере для меня).
Цитата
Погрешность чего?

Вот этого
Цитата
Ну вводим a=12 b=19000 c=0.00056.
При подстановке в исходное уравнение должен получится ноль, однако 1 корень даёт 1.29...E-0009 (в предыдущей проге 5.55...E-0006) второй -1.41...E-0010 (соответственно -6.24...E-0006).

Я вообще-то не очень понимаю чё он от нас хочет. Но может подскажете как его грузануть по грамотному?
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Гость






Цитата(koSTIK @ 1.12.2005 10:21)
Не очень-то вас понимаю. Ткните пальцем, пожалуйста.

Пожалуйста:
Цитата(koSTIK @ 30.11.2005 12:43)
var
...
a,b,c,d,x1,x2,p1,p2,t,y,u:real;
...
If (a=0) then ... { вещественное A? Сравниваем через "="? Некорректно... }
If (b=0) then ... { аналогично }
If (c=0) then ...


Цитата(koSTIK @ 1.12.2005 10:21)
При подстановке в исходное уравнение должен получится ноль, однако 1 корень даёт 1.29...E-0009 (в предыдущей проге 5.55...E-0006) второй -1.41...E-0010 (соответственно -6.24...E-0006).

smile.gif Ну, это смотря как результат вывести... Вот так будет однозначно 0:
      p1:=a*x1*x1 + b*x1 + c;
writeln('proverca1: ax1^2+bx1+c= ',p1:10:7);
p2:=a*x2*x2 + b*x2 + c;
writeln('proverca2: ax2^2+bx2+c= ',p2:10:7);

Кстати, а что такое вещественное число, равное "0"? Это, извините, не перечислимые (целые) типы, когда можно точно сказать: "Если все биты этой переменной типа Integer равны 0, то это - НОЛЬ"... Здесь все по другому. Вещественный ноль - это число, не превосходящее по модулю так называемый "машинный Эпсилон", то есть какую-то определенную величину (и если использовать Extended вместо Double, эта самая величина будет еще меньше...)
 К началу страницы 
+ Ответить 

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

 





- Текстовая версия 5.09.2025 13:08
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name