IPB
ЛогинПароль:

> Правила раздела!

1. Заголовок или название темы должно быть информативным !
2. Все тексты фрагментов программ должны помещаться в теги [code] ... [/code] или [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ" и используйте ПОИСК !
4. НЕ используйте форум для личного общения!
5. Самое главное - это раздел теоретический, т.е. никаких задач и программ (за исключением небольших фрагментов) - для этого есть отдельный раздел!

> Интересно, стек
сообщение
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 33
Пол: Мужской

Репутация: -  0  +


Хочу спросить знающих людей.
Вот отрывок из алгоритма :"Обратная польская запись просматривается слева направо."
Подразумевает ли это предложение использование стека однозначно?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
сообщение
Сообщение #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 -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 20.05.2024 5:43
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name