Другие языки программирования и технологии

Проблема с прогой на паскале.

вот код
program dfbfb;
var a, b, c, e, x, x1, x2, D: real;
begin
writeln ('Введите коэффициенты');
readln(a, b, c);
e:=0;
if a=0 then writeln ('ERROR!!!') else
begin
e:=a*x*x+b*x+c;
D:=b*b-4*a*c;
if D<0 then writeln ('Нет корней! ');
if D=0 then x1:= -b/2*a;
if D>0 then x1:= (-b+sqr(D))/2*a;
x2:= (-b-sqr(D))/2*a;
writeln ('X1=', x1);
writeln ('X2=', x2);
end;
end.

ввожу коэффициенты 2 -5 3
выводит ответ х1=6 х2=4

решил уравнение вручную - х1= 1,5 х2=1

Что неправильно в программе?
Чёрно Белый
Чёрно Белый
1 543
Sqr заменить на Sqrt
Павел Слепов
Павел Слепов
65 396
Лучший ответ
Чёрно Белый заменил. ответ почему-то такой же((
program dfbfb;
var a, b, c, e, x, x1, x2, D: real;
begin
writeln ('Введите коэффициенты');
readln(a, b, c);
e:=0;
if a=0 then writeln ('ERROR!!!') else
begin
e:=a*x*x+b*x+c; <-- От куда здесь взялось начальное значение x? Оно ни где не задаётся! Дальше даже и не смотрел.
EK
Erasyl Kaibarov
82 153
e:=a*x*x+b*x+c; Зачем?
-b/2*a; - а надо -b/(2*a); или -b/2/a, и дальше тоже
if D>0 then x1:= (-b+sqr(D))/2*a;
x2:= (-b-sqr(D))/2*a; x2 будет вычислено в любом случае, забыл begin .. end. Ну и sqr, и знаменатель.. .

Правильно:

D:=b*b-4*a*c;
if D<0 then writeln ('Нет действительных корней! ')
else if D=0 then begin
x1:= -b/(2*a);
writeln('X=',x1);
end
else begin x1:= (-b+sqrt(D))/(2*a);
x2:= (-b-sqrt(D))/(2*a);
writeln ('X1=', x1);
writeln ('X2=', x2);
end;
Начни со своего мозга, не способного даже сдуть для анализа готовую программу.
Виктор Третьяков Обычно такие ответы пишут люди, которые знают не на много большего задающего вопрос, а самомнение - больше некуда. Ну не умеет человек программировать, чего барзеть то, пед...рила ты недоделаная?
sqr - это возведение в квадрат, поставь sqrt (корень) .
А зачем тебе некое "e"? Оно все-равно не используется, да и подправить прогу надо, например при D=0 присвой x2 значение x1. Да и учесть надо, что корни могут из дискриминанта не выделятся.
Чёрно Белый program dfbfb;
var a, b, c, e, x, x1, x2, D: real;
begin
writeln ('Ââåäèòå êîýôôèöèåíòû');
readln(a, b, c);
e:=0;
if a=0 then writeln ('ERROR!!!') else
begin
e:=a*x*x+b*x+c;
D:=b*b-4*a*c;
if D0 then x1:= (-b+sqrt(D))/2*a;
x2:= (-b-sqrt(D))/2*a;
writeln ('X1=', x1);
writeln ('X2=', x2);
end;
end.

вот. исправил, а корни все равно те же...

P.S. вы предлагаете вместо е ввести константу?
согласен с ra, помоему sqrt корень квадратный, а не sqr
AK
Akjaik Kumarov
1 900
1. Sqr замени на Sqrt
2. В месте, где проверяется условие "Положительности" Дискриминанта, действие нужно объединить в begin end; Это нужно для того, чтоб программа не искала x2 когда дискриминант неположителен.
3. Когда D < 0 напиши так: begin writeln('нет корней'); exit; end; Чтобы не выводил x1=0; x2=0; в конце.
4. В конце запиши writeln('x1=',x1); if D>0 then writeln('x2=',x2); Так он будет выводить 2 корня только тогда, когда у тебя их 2.
5. b*2 возьми в скобки