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

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

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

 
 Ответить  Открыть новую тему 
> Интересно, стек
сообщение
Сообщение #1


Новичок
*

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

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


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


Профи
****

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

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


Какой-то странный вопрос... понятие стека в данном случае имеет до *опы значений.
Как связан стек и полиз? Может имеешь в виду сопроцессорный стек?

Вообще-то вопрос довольно таки однозначен, но хотелось бы услышать более конкретную формулировку, либо весь контекст (навряд ли ты его сам придумал).
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Новичок
*

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

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


Вот это алгоритм,который мне дала наша преподша:
Цитата
Вычисление значения выражения, представленного в обратной польской записи
Правило вычисления выражения в обратной польской  записи состоит в следующем. Обратная польская запись просматривается слева направо. Если рассматриваемый элемент - операнд, то рассматривается следующий элемент. Если рассматриваемый элемент - знак операции, то выполняется эта операция над операндами, записанными левее знака операции. Результат операции записывается вместо первого (самого левого) операнда, участвовавшего в операции. Остальные элементы ( операнды и знак операции), участвовавшие в операции, вычеркиваются из записи.

Я его просмотрел, немного понял как работает польская запись.
В своей проге я реализовал список как двусвязный( при создании списка,и вычислении пол зап)!
А она засрала мне весь курсовик! Сказала, что везде должен быть стек!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Ищущий истину
******

Группа: Пользователи
Сообщений: 4 825
Пол: Мужской
Реальное имя: Олег

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


Цитата
Сказала, что везде должен быть стек!

Чушь по моему.
Вообще если работает правильно, то значит задача решена!
И вообще разница между стеком и списками только "идеологическая".


--------------------
Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Новичок
*

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

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


Уж не знаю какая там идеодогическая разница,но удовлетворительно за это в зачетку она поставила!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Ищущий истину
******

Группа: Пользователи
Сообщений: 4 825
Пол: Мужской
Реальное имя: Олег

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


А идеологическая разница вот в чем:
в паскале все динамические структуры данных описываются одинаково. Разница только в способе добавления и извлечения элементов. А какой тип использовать в конкретной задаче не важно, если не указанно явно в задании. ИМХО ваша преподша просто решила запороть тебе курсовую или ты недоговариваешь условие.
Цитата
Подразумевает ли это предложение использование стека однозначно?

Однозначный ответ - НЕТ!


--------------------
Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Новичок
*

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

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


Вообще условие задачи
Цитата
Написать подпрограмму для вычисления значение выражения, представленного в обратной польской записи.

Вот все что написано в задании!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Профи
****

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

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


Я не зря задал первый вопрос: "Как связан стек и полиз".
Ты, вероятно, не там инфу копал...

Насчет полиза я уже говорил, надо было поиском пользоваться.

Цитата
Ты, вероятно имеешь в виду ПОЛИЗ (представление математических выражений с использованием обратной польской записи)?
Почитай про программирование сопроцессора, во-всяком я встретил это впервые именно там, хотя возможно есть оно и в уч. вышки.
Применимо к программированию FPU - рассмотрим на примере преобразования выражения: a+b*c-d/(a+B). Дерево нарисовать у меня наверное не получится, но в итоге она трансформируется в так называемую постфиксную запись: abc*+dab+/-.
Алгоритм вычисления имеет следующий вид:
1. Выбрать очередной символ.
2. Если это операнд поместить его в стек, затем (1).
3. Если это знак - выполнить ее над одним или 2я операндами, рез-ат поместить в вершину стека.
4. Если символы еще есть - (1).

Вкратце - такая вот ботва.


Покажи код.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


Новичок
*

Группа: Пользователи
Сообщений: 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

 





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