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

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

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

Автор: krofik 5.11.2010 18:58

эх я новичок и почти не чего не знаю, помогите плс. здесь логическая ошибка, но какая!?

program kvadratnoe;
var
a,b,c,x1,x2,d:real;
begin
write('Введите первый коеффициент а: ');
read(a);
write('Введите второй коеффициент b: ');
read(b);
write('Введите свободеый член c: ');
read©;
d:=sqr(a)-4*a*c;
if d>0 then
begin
x1:=(-b+sqrt(d))/a;
x2:=(-b-sqrt(d))/a;
writeln('Дискриминант больше нуля');
writeln('x1= ',x1);
writeln('x2= ',x2);
end
else
begin
if d=0 then
begin
writeln('Дискриминант равен нулю');
x1:=(-b+sqrt(d))/2;
writeln('x= ',x1);
end
else
begin
writeln('Дискриминант меньше нуля, уравнение корней не имеет.');
end;
end;
end.

Автор: Sum42 5.11.2010 19:05

поправил


program kvadratnoe;
var
a,b,c,x1,x2,d:real;
begin
write('Введите первый коеффициент а: ');
read(a);
write('Введите второй коеффициент b: ');
read(b);
write('Введите свободеый член c: ');
read©;
d:=b*b-4*a*c;
if d>0 then
begin
x1:=(-b+sqrt(d))/2a;
x2:=(-b-sqrt(d))/2a;
writeln('Дискриминант больше нуля');
writeln('x1= ',x1);
writeln('x2= ',x2);
end
else
begin
if d=0 then
begin
writeln('Дискриминант равен нулю');
x1:=(-b)/2a;
writeln('x= ',x1);
end
else
begin
writeln('Дискриминант меньше нуля, уравнение корней не имеет.');
end;
end;
end.


не так пишешь формулу дискриминанта, и корней квадратного уравнения
--------------------------------
да и задание не мешает писать)

Автор: TarasBer 5.11.2010 19:14

Sum42, только вместо 2a надо писать (2*a), а то компилятор не поймёт.
krofik, ты бы внимательно посмотрел, правильно ли переписал формулу из учебника.

Автор: Sum42 5.11.2010 19:47

Цитата
Sum42, только вместо 2a надо писать (2*a), а то компилятор не поймёт.

да, конечно, извиняюсь smile.gif

Автор: krofik 5.11.2010 20:13


спасибо больше я бы сам не додумался в книгу за формулой заглянуть)
это у меня такая домашка по инфе перепала. так что ещё увидимся
всем спасибо!

Автор: krofik 8.11.2010 0:10


program kvadratnoe;
var
a,b,c,x1,x2,d:real;
begin
write('Введите первый коеффициент а: ');
read(a);
write('Введите второй коеффициент b: ');
read(b);
write('Введите свободеый член c: ');
read©;
d:=sqr(b)-4*a*c;
if d>0 then
begin
x1:=(-b+sqrt(d))/2*a;
x2:=(-b-sqrt(d))/2*a;
writeln('Дискриминант больше нуля');
writeln('x1= ',x1);
writeln('x2= ',x2);
end
else
begin
if d=0 then
begin
writeln('Дискриминант равен нулю');
x1:=(-b)/2*a;
writeln('x= ',x1);
end
else
begin
writeln('Дискриминант меньше нуля, уравнение корней не имеет.');
end;
end;
end.


вот так короче окончательный вариант.
одноклассники, можете списывать.

Автор: TarasBer 8.11.2010 0:40

Ну введи a=2, b=0, c=-2.


Автор: krofik 8.11.2010 20:08

Цитата(TarasBer @ 7.11.2010 19:40) *

Ну введи a=2, b=0, c=-2.

x1=4
х2=-4
а чо!? зачем?

Автор: Freedom 8.11.2010 20:20

Цитата(krofik @ 8.11.2010 17:08) *

x1=4
х2=-4
а чо!? зачем?


ну так не правильно же, должно быть Х1=1 и Х2=-1. Ищите ошибку

Автор: krofik 8.11.2010 20:28

Цитата(Freedom @ 8.11.2010 15:20) *

ну так не правильно же, должно быть Х1=1 и Х2=-1. Ищите ошибку

хз ща времени нет потом посмотрю, но как по и=мне то все верно, хотя... короче потом гляну.

Автор: krofik 9.11.2010 0:11

Цитата(TarasBer @ 7.11.2010 19:40) *

Ну введи a=2, b=0, c=-2.

все ошибка была найдена в строке x:=(-b+sqrt(d))/(2*a); не хватало вторых скобок для 2*а.
окончательный вариант ещё чуть более укороченный

program kvadratnoe;
var
a,b,c,x1,x2,d:real;
begin
write('Введите первый коеффициент а: ');
read(a);
write('Введите второй коеффициент b: ');
read(b);
write('Введите свободеый член c: ');
read©;
d:=sqr(b)-4*a*c;
writeln('Дискриминант=',d);
if d>0 then
begin
x1:=(-b+sqrt(d))/(2*a);
x2:=(-b-sqrt(d))/(2*a);
writeln('Дискриминант больше нуля');
writeln('x1= ',x1);
writeln('x2= ',x2);
end
else
begin
if d=0 then
begin
writeln('Дискриминант равен нулю');
x1:=(-b)/2*a;
writeln('x= ',x1);
end
else writeln('Дискриминант меньше нуля, уравнение корней не имеет.');
end;
end.

Автор: Freedom 9.11.2010 0:33

А если ввести a=2 b=4 c=2 тогда у вас ответ выходит х=-4, хотя должно быть х=-1. Нужно повнимательнее быть, ошибка у вас в моменте когда вы рассматриваете дискриминант=0

Автор: krofik 9.11.2010 0:47

Цитата(Freedom @ 8.11.2010 19:33) *

А если ввести a=2 b=4 c=2 тогда у вас ответ выходит х=-4, хотя должно быть х=-1. Нужно повнимательнее быть, ошибка у вас в моменте когда вы рассматриваете дискриминант=0

хух сколько же можно делать в одной программе столько одинаковых ошибок. вот такперь так в строке x1:=(-b)/(2*a); на 2*а ставим скобки и все снова работает.
окончательно:

program kvadratnoe;
var
a,b,c,x1,x2,d:real;
begin
write('Введите первый коеффициент а: ');
read(a);
write('Введите второй коеффициент b: ');
read(b);
write('Введите свободеый член c: ');
read©;
d:=sqr(b)-4*a*c;
writeln('Дискриминант=',d);
if d>0 then
begin
x1:=(-b+sqrt(d))/(2*a);
x2:=(-b-sqrt(d))/(2*a);
writeln('Дискриминант больше нуля');
writeln('x1= ',x1);
writeln('x2= ',x2);
end
else
begin
if d=0 then
begin
writeln('Дискриминант равен нулю');
x1:=(-b)/(2*a);
writeln('x= ',x1);
end
else writeln('Дискриминант меньше нуля, уравнение корней не имеет.');
end;
end.