Не могу найти ошибки в программе - 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; // точка
Объяснение кода листинга программы
- В коде определена константа
n = 10
, которая представляет собой количество входных данных. - Определена процедура
push
, которая добавляет элемент в стек. Если размер стека меньше или равенHigh(S.data)
, то увеличивается размер стека на 10. Затем элементx
помещается в стек, а переменнаяS.size
увеличивается на 1. - Определена функция
Pop
, которая извлекает элемент из стека. ПеременнаяS.size
уменьшается на 1, а возвращаемое значение - это элемент в позицииS.size
в стеке. - В коде определено типовое описание
TStack
, которое представляет собой структуру стека с двумя полями:data
(массив символов) иsize
(количество элементов в стеке). - В коде определены следующие переменные:
s
(объект типаTStack
), который представляет собой стек.str
(строка), которая используется для чтения входных данных.i
(целое число), которое используется в цикле для итерации по входным данным.pr
(целое число), которое используется для отслеживания количества прочитанных символов во входной строке.sum
(целое число), которое используется для хранения суммы двух последних вычисленных значений.
- В цикле
for i:=1 to n
происходит чтение входных данных. Каждый символ считывается в переменнуюStr[i]
. - В цикле
for i:=1 to pr
происходит обработка каждого символа из входной строки. Если символ не равен '*', '/', '-' или '+', он добавляется в стек с помощью процедурыpush
. - В коде присутствуют строки, которые должны быть добавлены в стек, но они не определены (
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);
). - В конце кода вычисляется сумма двух последних вычисленных значений и выводится на экран.
- В коде присутствуют обращения к
i
, которые недопустимы после цикла. - В коде присутствуют недопустимые операции (
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);
).
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д