Вылетает программа - Pascal

Узнай цену своей работы

Формулировка задачи:

Есть готовая программа. У меня срабатывает с 4го раза. Ещё у одного человека тоже работает, у третьего во время запуска вылетает, у препода тоже вылетает. Суть в том, что из исходного стека надо получить обратный. У меня при первых трех запусках показывает только исходный стек. На четвертый запуск все работает как надо. Где тут может быть собака зарыта. Вот код

Решение задачи: «Вылетает программа»

textual
Листинг программы
type
  Stek = ^Zveno;
  Zveno = Record
    Adrcled: Stek;
    Element: integer;
  End;
 
Procedure Push(Var St: Stek; El:integer);
Var
  Q: Stek;
Begin
  New (Q);
  Q^.Element := El;
  Q^.Adrcled := St;
  St := Q
End;
 
function Pop(var St : Stek) : Integer;
var t : Stek;
begin
  t := St; St := St^.Adrcled;
  Pop := t^.Element; Dispose(t);
end;
 
Procedure Print(St: Stek);
Begin
  while St<>nil do
    begin
      write(St^.Element, ' ');
      St := St^.Adrcled;    
    end;
  WriteLn;
End;
 
Var
 St, NewSt: Stek;
 n, h:integer;
begin
 St := Nil;
 n := random(2, 15);
 for h:=1 to n do
   Push(St, random(-50, 50));
 writeln('Исходный стек:');
 Print(St);
 
 NewSt := nil;
 while St <> nil do
   Push(NewSt, Pop(St));
 writeln('Полученный стек:');
 Print(NewSt);
end.

Объяснение кода листинга программы

  1. Объявление типа данных Stek для ссылки на вершину стека
  2. Объявление типа данных Zveno для записи о вершине стека, содержащей ссылку на следующий элемент стека и значение элемента
  3. Создание процедуры Push для добавления элемента в стек
    • Создание новой вершины стека
    • Запись значения элемента в новую вершину стека
    • Запись ссылки на текущую вершину стека в поле Adrcled новой вершины стека
    • Обновление текущей вершины стека на новую вершину стека
  4. Создание функции Pop для удаления элемента из стека
    • Передача текущей вершины стека в функцию Pop
    • Обновление текущей вершины стека на предыдущую вершину стека
    • Возврат значения элемента, которое было только что удалено из стека
  5. Создание процедуры Print для печати содержимого стека
    • Цикл, который проходит через каждую вершину стека, пока стек не станет пустым
    • Печать значения элемента каждой вершины стека
    • Обновление текущей вершины стека на следующую вершину стека
  6. Объявление переменных St, NewSt, n и h для хранения состояния стека и его размера
  7. Инициализация переменной St как пустого стека
  8. Инициализация переменной n случайным числом от 2 до 15
  9. Цикл, который проходит от 1 до n, для добавления элементов в стек
    • Вызов процедуры Push для добавления элемента в стек
  10. Печать содержимого стека
  11. Инициализация переменной NewSt как пустого стека
  12. Цикл, который проходит через каждую вершину стека, пока стек не станет пустым
    • Вызов процедуры Push для добавления элемента в новый стек
  13. Печать содержимого нового стека
  14. Конец программы

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

11   голосов , оценка 3.818 из 5
Похожие ответы