Помощь - Поиск - Пользователи - Календарь
Полная версия: Нахождение корней
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
SlimShady
Составить программу вычисления корней квадратного уравнения вида a x 2 + b x + c = 0

Последовательность действий:
1. Описать переменные a, b, c, d, x1,x2 как REAL.
2. Задать с клавиатуры коэффициенты a, b, c.
3. Вычислить значение дискриминанта d = b 2 – 4 a c
4. Вывести значение дискриминанта на экран
5. Проверить значение дискриминанта:
• Если дискриминант меньше нуля, то нет решения
• Если дискриминант больше или равен нулю, то вычислить
значения x1 и x2

как вычислить значение x1 и x2????????
volvo
По формулам:
Цитата
X1 = (-b + sqrt(D)) / (2*A)
X2 = (-b - sqrt(D)) / (2*A)
SlimShady

Program yravnenie;
uses crt;
var a,b,c,d,X1,X2:integer;
Begin
ClrScr;
WriteLn('Введите первое число');
readLn(a);
WriteLn('Введите второе число');
readLn(В);
WriteLn('Введите третье число');
readLn(С);
d:=(b*2)-(4*a*c);
writeln('Итого ',d,'');
if d<0 then writeln('Нет решений')
Else
begin X1 = (-b + sqrt(D)) / (2*A)
X2 = (-b - sqrt(D)) / (2*A)
Writeln('Первый корень -',X1,' Второй корень ',X2,'');
end;
readln;
repeat until keypressed;
end.



Где ошибка???
Пишет:
Error 26: Type mismatch.
klem4
ошибки в синтаксисе.

var
  a,b,c,d{,x1,x2}:extended;

Begin
  write('a=');readln(a);
  write('b=');readln(b);
  write('c=');readln( c );

  d:=sqr(b)-4*a*c;

  if d<0 then
   writeln('Reshenii net')
    else
     if d=0 then
      writeln('x=',-b/(2*a):2 :3)
       else
        begin
           writeln('x1=',(-b+sqrt(d))/(2*a):2 :3);{x1:=(-b+sqrt(d))/(2*a)}
           writeln('x2=',(-b-sqrt(d))/(2*a):2 :3);{x2:=(-b-sqrt(d))/(2*a)}
        end;
   readln;
end.
Romtek
X1, X2 - действительные числа! (Real)

Цитата
Последовательность действий:
1. Описать переменные a, b, c, d, x1,x2 как REAL.
smile.gif
Romtek
Program yravnenie;
uses crt;
var a,b,c,d,X1,X2:integer;
Begin
ClrScr;
WriteLn('Введите первое число');
readLn(a);
WriteLn('Введите второе число');
readLn(В);
WriteLn('Введите третье число');
readLn(С);
d:=(b*2)-(4*a*c); { <-- b*2 <> b^2 !! }
writeln('Итого ',d,'');
if d<0 then writeln('Нет решений')
Else
begin X1 = (-b + sqrt(D)) / (2*A) { не соответствует синтаксису Паскаля. Проверь что нужно добавить }
X2 = (-b - sqrt(D)) / (2*A) { а где оператор окончания блока ?? Ты думал, что можно просто вставить, и оно заработает ?! }
Writeln('Первый корень -',X1,' Второй корень ',X2,'');
end;
readln;
repeat until keypressed; { Это не нужно писать, если ты прежде ожидаешь ввода }
end.
volvo
SlimShady, плюс к этому (чтобы избежать неприятностей с "делением на 0") проверяй, не равняется ли A нулю...
SlimShady

Program yravnenie;
uses crt;
var a,b,c,d,X1,X2:real;
Begin
ClrScr;
WriteLn('Введите первое число');
readLn(a);
WriteLn('Введите второе число');
readLn(В);
WriteLn('Введите третье число');
readLn(С);
d:=sqr(В)-4*a*c;
if d<0 then
writeln('Решения нет')
else
if d=0 then
writeln('Дискриминант равен ',-b/(2*a):2 :3)
else
begin
writeln('Первый корень уравнения равен ',(-b+sqrt(d))/(2*a):2 :3);
writeln('Второй корень уравнения равен ',(-b-sqrt(d))/(2*a):2 :3);
end;
readln;
end.



Сделал так.....вроде работает....
Как сделать так что-бы даже если дискриминант равен нулю, подсчитывался результат.....
volvo
SlimShady, ошибочка у тебя:
if d=0 then
writeln('Дискриминант равен ',-b/(2*a):2 :3) { <--- Не дискриминант, а уже корень. Дискриминант у тебя равен 0... }
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.