Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.03.2014, 15:36   #1
jihot
Начинающий кодер
Пользователь
 
Аватар для jihot
 
Регистрация: 26.01.2010
Сообщений: 72
По умолчанию Работа со стеком (+рекурсия) [Задача]

Здравствуйте!

Вроде простая задачка, на входе я имею строку
Код:
M(m(1,M(2,3)),M(8,7)).
М – максимум из двух значений, m – минимум;

реализовать через стек, его я сделал :
Код:
type                            
  tStack = ^rStack;              
  rStack = object               
    N:string;
    Pred : tStack;
    procedure Push(x: string);
    function Pop: string;
  end;
но пока ломаю голову - а как доставая посимвольно из стека, решить это?
была версия с рекурсией, но тоже это лишь мысли)
with love ^.^
jihot вне форума Ответить с цитированием
Старый 14.03.2014, 15:57   #2
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

стек это место для хранения операндов (1,2,3,8,7), но не для операций (m, M).
посмотрите обратная польская запись

M(m(1,M(2,3)),M(8,7))
1 2 3 M m 8 7 M M это будет запись тех же действий в обратной польской
операнды (числа) помещаем на стек, если встретили операцию выполняем предписанные действия
достать два значения, сравнить и положить одно искомое(мах/мин) на сек.

З.Ы. алгоритм перевода из инфиксной (обычной) записи m(1,2) в обратную польскую [ 1 2 m ] есть в вики
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 14.03.2014 в 16:00.
evg_m вне форума Ответить с цитированием
Старый 14.03.2014, 21:41   #3
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

А нафига тут стек? Нисходящий рекурсивный анализ и всё..
Poma][a вне форума Ответить с цитированием
Старый 15.03.2014, 19:27   #4
jihot
Начинающий кодер
Пользователь
 
Аватар для jihot
 
Регистрация: 26.01.2010
Сообщений: 72
Лампочка

Нашел алгоритм перевода, не знаю может есть и попроще..но работает хорошо с обычными операциями. но вот как дать понять что Есть 'M' и 'm' ?
Как посчитать выражение теперь понял, ОПЗ действительно удобная штука, но как бы реализовать её с такими неизвестными М\m
Вложения
Тип файла: txt OPZproc.txt (3.9 Кб, 124 просмотров)
with love ^.^
jihot вне форума Ответить с цитированием
Старый 15.03.2014, 20:02   #5
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

встретили символы операций 'M(' / 'm(' отправили в стек операций.
встретили операнды 1 4 8 отправили в стек операндов.
встретили символ "окончания операции" ')' выгружаем код(символ) операции из стека операций.
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
работа со стеком temperus Помощь студентам 1 20.11.2011 05:30
работа со стеком Sparky Паскаль, Turbo Pascal, PascalABC.NET 2 23.09.2010 11:08
работа со стеком xarvenx Общие вопросы C/C++ 1 25.06.2009 13:31
Задача со стеком host.pro Помощь студентам 1 12.03.2009 12:48