Не могу найти ошибки в программе - Pascal (248445)

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

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

Программа должна находить с помощью стека значение арифметического выражения, записанного в постфиксной форме. Процедура Push добавляет новый элемент на вершину стека. Функция Pop возвращает верхний элемент стека и убирает его из стека.Но в 33 строке выдает следующую ошибку:'Встречено else, а ожидался оператор ', в 22 и 26 выдает:'Параметр цикла for должен описываться в заголовке цикла'

Решение задачи: «Не могу найти ошибки в программе»

textual
Листинг программы
const n=10;
procedure push(var S:Tstack;x:integer);
begin
  if S.size>High(S.data) then
    SetLenght(s.data, Length(S.data)+10);
  S.data[S.size]:=x;
  S.size:=S.size+1;
end;
function Pop(var S:Tstack):integer;
begin
  S.size:=S.size-1;
  Pop:=S.data[S.size]
end;
type
  TStack=record
    data:array of char;
    size:integer
  end;
var
  s:TStack;
  str:string;
  i,pr,sum:integer;
begin
  for i:=1 to n do begin
    read(Str[i] );  // зачем читать по одному символу? зачем составной оператор?
  end;
  pr:=pos(str,'');  // попытка искать пустую строку
  for i:=1 to pr do begin
    str[i]:=copy(str,1,pr);  // попытка символу присвоить строку
    if (str[i]<>'*')and(str[i]<>'/')and(str[i]<>'-')and(str[i]<>'+')then
      push(s,str[i]);
    delete(str,1,pr);
    pr:=pos(str,'');  // попытка искать пустую строку
  end; // цикл кончился здесь, ниже обращения к i недопустимы
  else  // else без if
  if str[i]='*' then
    s[s.Size-2]=Pop(S)*Pop(S-1);  // это сравнение
  delete(str,1,pr);
  if str[i]='+' then
    s[s.Size-2]=Pop(S)+Pop(S-1)  // это сравнение, нет ";"
  delete(str,1,pr);
  if str[i]='-'then
    s[s.Size-2]=Pop(S)-Pop(S-1); // это сравнение
  delete(str,1,pr);
  if str[i] then
    s[s.Size-2]=Pop(S)/Pop(S-1); // это сравнение
  delete(str,1,pr);
end;  // последний парный end
 
sum:=s[s.Size-2];
writeln('Сумма равна', sum);
end;  // точка

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

  1. В коде определена константа n = 10, которая представляет собой количество входных данных.
  2. Определена процедура push, которая добавляет элемент в стек. Если размер стека меньше или равен High(S.data), то увеличивается размер стека на 10. Затем элемент x помещается в стек, а переменная S.size увеличивается на 1.
  3. Определена функция Pop, которая извлекает элемент из стека. Переменная S.size уменьшается на 1, а возвращаемое значение - это элемент в позиции S.size в стеке.
  4. В коде определено типовое описание TStack, которое представляет собой структуру стека с двумя полями: data (массив символов) и size (количество элементов в стеке).
  5. В коде определены следующие переменные:
    • s (объект типа TStack), который представляет собой стек.
    • str (строка), которая используется для чтения входных данных.
    • i (целое число), которое используется в цикле для итерации по входным данным.
    • pr (целое число), которое используется для отслеживания количества прочитанных символов во входной строке.
    • sum (целое число), которое используется для хранения суммы двух последних вычисленных значений.
  6. В цикле for i:=1 to n происходит чтение входных данных. Каждый символ считывается в переменную Str[i].
  7. В цикле for i:=1 to pr происходит обработка каждого символа из входной строки. Если символ не равен '*', '/', '-' или '+', он добавляется в стек с помощью процедуры push.
  8. В коде присутствуют строки, которые должны быть добавлены в стек, но они не определены (str[i]:=copy(str,1,pr);, s[s.Size-2]=Pop(S)*Pop(S-1);, s[s.Size-2]=Pop(S)+Pop(S-1);, s[s.Size-2]=Pop(S)-Pop(S-1);, s[s.Size-2]=Pop(S)/Pop(S-1);).
  9. В конце кода вычисляется сумма двух последних вычисленных значений и выводится на экран.
  10. В коде присутствуют обращения к i, которые недопустимы после цикла.
  11. В коде присутствуют недопустимые операции (s[s.Size-2]=Pop(S)*Pop(S-1);, s[s.Size-2]=Pop(S)+Pop(S-1), s[s.Size-2]=Pop(S)-Pop(S-1);, s[s.Size-2]=Pop(S)/Pop(S-1);).

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


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

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

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