Alexanderietz
@Alexanderietz

Какая тут синтаксическая ошибка в программе на PascalABC?

program Laboratory3;
// Общий член ряда имеет вид ((-1)^n) * (2 * n + 1) * x^(2 * n))/(2 * n)!
var
  x, e, s: real;
  i: integer;
  // x - аргумент функционального ряда
  // e - точность, с которой надо посчитать сумму функционального ряда
  // i - счетчик
  // s - сумма функционального ряда на шаге i
  
function factorial(n: real): real;
begin
  if(n = 0) then 
    factorial := 1.0
  else
    factorial := n * factorial(n - 1);
end;

function degree(x: real; n: integer): real;
begin
  var p: real;
  var j: integer;
  p := 1.0;
  if(n = 0) then
    degree := 0.0
  else
    for j := 0 to n do
      p := p * x;
  degree := p;
end;

begin
  write('Введите аргумент x: '); readln(x);
  write('Введите точность e, с которой вычислится сумма функционального ряда: '); readln(e);
  
  while(e <= 0) do begin
    write('Введите положительную точность e'); readln(e);
  end;
  
  s := 0.0;
  i := 0;
  try
    if(x = 0.0) then
      s := 1.0;
      writeln('Сумма функционального ряда s = 1.0 с точностью e = ', e);
      writeln('Число членов в вычисляемом функциональном ряде i = ', i + 1)
    else
      while(Abs(Cos(x) - x * Sin(x) - s) > e) do 
        begin
          s := s + degree(-1.0, i) * (((2.0 * i) + 1.0) * (degree(x, i) * degree(x, i))/(factorial(2 * i)));
          i := i + 1;
        end;
    writeln('Сумма функционального ряда s = ', s, ' с точностью e = ', e);
    writeln('Число членов в вычисляемом функциональном ряде i = ', i); 
  except
    on System.StackOverflowException do
    writeln('Стек переполнен');
  end;
end.

Выдает "Встречено 'else', а ожидалось ';' " на 47 строчке, то есть в строке, где else перед while. Что не так?
  • Вопрос задан
  • 53 просмотра
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы