(13,3) Fatal: синтаксическая ошибка, ";" ожидается, но "ЕЩЕ" найден - PullRequest
0 голосов
/ 03 мая 2020
Program prueba1;
uses Estructu;
Var Pila1:Pila; Fila1,Completa:Fila;
Begin
    Inicfila (Completa);
    readpila(Pila1);
    readfila(Fila1);
    While (not pilavacia(Pila1) and not filavacia(Fila1)) do
    begin
        if (tope(Pila1) > primero(Fila1)) then
        begin
            agregar(Completa, desapilar(Pila1))
        else
            if (tope(Pila1) < primero(Fila1)) then
            begin
                agregar(Completa, extraer(Fila1))
            else
                if (tope(Pila1) = primero(Fila1)) then
                begin
                    agregar(Completa, desapilar(Pila1));
                    agregar(Completa, extraer(Fila1))
                end
            end
        end
    end
    write('El resultado final de Completa es');
    Writefila(Completa);
End.

Целью программы было бы организовать в Completa все переменные из Pila1 и Fila1 в порядке от первого до последнего. Я не знаю, что я делаю неправильно, и буду признателен за помощь

1 Ответ

0 голосов
/ 03 мая 2020

Вы не используете if ... then ... else и begin ... end правильно.

Существует концепция блока , который начинается с begin и заканчивается end. Везде, где ожидается один оператор , вы можете вместо него поставить block . Это также относится к if <condition> then <statement> else <statement>;.

Итак, этот код действителен:

if something() then
  stuff
else
  stuff;

... как это:

if something() then
  begin
    stuff;
    moreStuff;
  end
else
  begin
    otherStuff;
    moreOtherStuff;
  end;

Однако, это (которое вы используете) не является:

if something() then
  begin
    stuff // I guess here you omitted the semicolon because you correctly remembered
          // that there shouldn't be a semicolon before `else`, but...
else // WRONG, this is in the middle of the block!
    otherStuff;
  end;

Чтобы понять почему, давайте исправим отступ, чтобы он соответствовал логической интерпретации этого кода:

if something() then
  begin
    stuff
    else // ????????
    otherStuff;
  end;

Вы получаете ошибку, так как begin ... else ... end не является допустимой конструкцией. Поскольку есть begin, а затем end перед else, ваш else находится в середине блока then, что не имеет смысла.

Убедитесь, что end ваш блок перед началом else части, а затем begin новый блок.

...