Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Ожидался оператор PASCAL

Likan Ученик (200), закрыт 11 лет назад
program kvadratn;
var A,B,C,x1,x2,D:integer;
begin;
Writeln('Дано уравнение вида Ax^2+Bx+C=0');
Writeln('Задайте коэффициент A');
Readln(A);
Writeln('Задайте коэффициент B');
Readln(B);
Writeln('Задайте коэффициент C');
Readln(C);
D:=B*B-4*A*C;
Write('Дискриминант равен: ');
Writeln(D);
x1:=((-B+sqrt(D))/2*A);
x2:=((-B-sqrt(D))/2*A);
Writeln('Корни: ');
if (D>=0) then writeln(x1); Writeln(x2);
else writeln('Корней нет');
end.

Написал вот такую программку которая должна вычислять корни квадратного уравнения.
Но при запуске её, выдаёт ошибку и пишет что ожидался оператор и подчёркивает строчку "else writeln('корней нет')
пожалуйста подскажите в чём проблема
Лучший ответ
Миоко Таканава Гений (51590) 11 лет назад
Ошибок море.
После begin и перед else точка с занятой недопустима.
Недопустимо присвоение целочисленным переменным чисел с плавающей запятой, а извлечение квадратного корня возвращает действительное значение.
Неверно написаны формулы вычисления корней x1 и x2.
Если дискриминант меньше нуля, то всё равно будет выполняться извлечение корня из этого отрицательного значения, что вызовет runtime ошибку.

Исправленная программа:

program kvadratn;
var A,B,C,x1,x2,D:real;
begin
  Writeln('Дано уравнение вида Ax^2+Bx+C=0');
  Writeln('Задайте коэффициент A');
  Readln(A);
  Writeln('Задайте коэффициент B');
  Readln(B);
  Writeln('Задайте коэффициент C');
  Readln(C);
  D:=B*B-4*A*C;
  Write('Дискриминант равен: ');
  Writeln(D);
  if D < 0 then writeln('Действительных корней нет')
  else
  begin
    x1:=(-B+sqrt(D))/2/A;
    x2:=(-B-sqrt(D))/2/A;
    Writeln('Корни: ');
    writeln(x1);
    if D > 0 then Writeln(x2);
  end;
end.
Остальные ответы
Виталий Емельянов Мыслитель (6238) 11 лет назад
во ...во так ...

if D=0 then writeln(x1)
else if D>0
begin
Writeln(x1) ;
Writeln(x2) ;
end
else writeln('Корней нет');

так правильнее будет ...зачем тебе при D=0 выводить оба значения (они ведь одинаковые)
Вася Пупкин Гуру (4535) 11 лет назад
if (D>=0) then
begin
writeln(x1); Writeln(x2);
end;
else writeln('Корней нет');
Митя a Знаток (499) 11 лет назад
1000лет и один день не программировал на паскале!
Посмотри третью строку снизу: после тhen два writeln, это допускается? Попробуй сделать один writeln или если тебе очень надо, составной оператор.
Похожие вопросы