Хочу спросить знающих людей.
Вот отрывок из алгоритма :"Обратная польская запись просматривается слева направо."
Подразумевает ли это предложение использование стека однозначно?
Интересно, стек |
1. Заголовок или название темы должно быть информативным !
2. Все тексты фрагментов программ должны помещаться в теги [code] ... [/code] или [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ" и используйте ПОИСК !
4. НЕ используйте форум для личного общения!
5. Самое главное - это раздел теоретический, т.е. никаких задач и программ (за исключением небольших фрагментов) - для этого есть отдельный раздел!
Интересно, стек |
Demm |
Сообщение
#1
|
Новичок Группа: Пользователи Сообщений: 33 Пол: Мужской Репутация: 0 |
Хочу спросить знающих людей.
Вот отрывок из алгоритма :"Обратная польская запись просматривается слева направо." Подразумевает ли это предложение использование стека однозначно? |
Demm |
Сообщение
#2
|
Новичок Группа: Пользователи Сообщений: 33 Пол: Мужской Репутация: 0 |
Я и не говорю,что стек с этим связан.
Вот у меня было задание Цитата Написать подпрограмму для вычисления значение выражения, представленного в обратной польской записи. Я написал,а она меня послала куда подальше! Код function count_result (op1,op2:real;o:string):real; var c:char; r:real; begin if length(o)<>1 then t:=false; c:=o[1]; t:=true; case c of '+':r:=op2+op1; '-':r:=op2-op1; '/':r:=op2/op1; '*':r:=op2*op1; else t:=false; end; count_result:=r; end; procedure calc; var tek,oper1,oper2:pitem;{адрес текущей записи и ее операндов} op1,op2:real;{операнды в числовом выражении} op:set of char; n:integer; r:real;{результат операции} c:char; begin tek:=first; op:=['+','-','/','*']; while (tek<>nil) do begin c:=tek^.info[1]; if (c in op) then begin oper1:=tek^.pred; oper2:=oper1^.pred; if (oper1=nil)or(oper2=nil) then t:=false; val(oper1^.info,op1,n); if n<>0 then t:=false; val(oper2^.info,op2,n); if n<>0 then t:=false; r:=count_result(op1,op2,tek^.info); if t<>false then begin str(r:8:2,oper2^.info); oper2^.next:=tek^.next; dispose(oper1); if oper1<>nil then oper1^.pred:=oper2; dispose(tek); tek:=oper1; end; end else tek:=tek^.next; end; if (first^.next<>nil) or (first^.pred<>nil) then begin writeln('выражение ошибочно'); end; end; Я искал ,но что-то ничего не нашел на этом форуме!(я правда не искал как "полиз") Сообщение отредактировано: Demm - |
Текстовая версия | 20.05.2024 5:43 |