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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 13.03.2016, 14:50   #11
E1337
Пользователь
 
Регистрация: 24.01.2016
Сообщений: 20
По умолчанию

Цитата:
Сообщение от CMY_3 Посмотреть сообщение
https://ru.wikipedia.org/wiki/%D0%9E...B8%D1%81%D1%8C
и учти код только для + -
А всё, разобрался, спасибо!
E1337 вне форума Ответить с цитированием
Старый 19.03.2016, 13:00   #12
E1337
Пользователь
 
Регистрация: 24.01.2016
Сообщений: 20
По умолчанию

UP, требуется сделать по алгоритму: использовать один стек, в нём должны извлекаться первые 2 элемента и первый знак, эти 2 элемента складываются или находится разность в зависимости от знака и получившийся элемент записывается обратно в стек, он извлекается и извлекается следующий элемент и следующий первый знак, они опять складываются или находится разность между элементами и снова полученное значение записывается в стек и.т.д.
E1337 вне форума Ответить с цитированием
Старый 19.03.2016, 13:32   #13
CMY_3
Пользователь
 
Регистрация: 24.02.2016
Сообщений: 38
По умолчанию

Цитата:
сделать по алгоритму: использовать один стек
описанный вами алгоритм и реализован
Цитата:
использовать один стек, в нём должны извлекаться первые 2 элемента и первый знак
не знаю как в одном стёке хранить и числа и знаки операций, если только считывать знаки из оставшейся строки, тогда это даже упрощает задачу
CMY_3 вне форума Ответить с цитированием
Старый 19.03.2016, 21:30   #14
E1337
Пользователь
 
Регистрация: 24.01.2016
Сообщений: 20
По умолчанию

Цитата:
Сообщение от CMY_3 Посмотреть сообщение
описанный вами алгоритм и реализован

не знаю как в одном стёке хранить и числа и знаки операций, если только считывать знаки из оставшейся строки, тогда это даже упрощает задачу
Если есть возможность измените код, благодарю. И описать пару строк, что они выполняют.
E1337 вне форума Ответить с цитированием
Старый 20.03.2016, 08:01   #15
CMY_3
Пользователь
 
Регистрация: 24.02.2016
Сообщений: 38
По умолчанию

Цитата:
Если есть возможность измените код
изменения минимальны, отпадает необходимость инициализации и заполнения второго стёка
Код:
  i:=1;
  while i<=length(s) do begin
     Pop(st_nm,a);              //вынимаем 1-ое
     Pop(st_nm,b);              //и 2-ые числа из стёка
     if s[i]='+' then a := a + b        //первый символ "+" - суммируем числа из стёка
     else if s[i]='-' then a := b - a;  //первый символ "-" - разность 2-го и 1-го чисел
     AddSt(St_nm,a);            //результат заносим в стёк
     inc(i);                                  //переходим к следующему символу строки знаков
  end;
Числа во входящей строке через пробел, знаки без пробелов, т.к. в них нужды нет.
Вроде всё.
CMY_3 вне форума Ответить с цитированием
Старый 20.03.2016, 21:35   #16
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

вообще непонятно, почему возникла идея о помещении знаков операции в стек.
Постфиксная запись тем и хороша, что если встретили число - помещаем его в стек, если встретили знак операции, вытаскиваем нужное число операндов из стека, выполняем над ними текущее действие и заносим результат в стек. всё, больше ничего не надо.
При этом корректно отрабатываются все операции (не только плюс/минус, но и умножение и деление).

код для вычисления выражения в постфиксной форме использовался мной в теме
Арифметические действия с цифрами числа
см. например, код тут или тут
Serge_Bliznykov вне форума Ответить с цитированием
Старый 09.04.2016, 19:21   #17
E1337
Пользователь
 
Регистрация: 24.01.2016
Сообщений: 20
По умолчанию Динамические структуры. Стеки.

Требуется вычислить арифметическое выражение, хранящегося в постфиксной записи. В выражение входят целые числа и знаки + , - .
Требуется использовать алгоритм: В строке находится выражение 5 4 8 - + если это число, тогда записывается в стек, если знак то из стека вынимаем 2 последних числа и делаем с ним сложение или вычитание в зависимости от знака, что получилось записываем обратно в стек, идем дальше, стоит знак , снова достаем 2 числа и делаем вычисление, записываем обратно в стек, если стока пуста, тогда выводим всё, что находится в стеке, если это одно число тогда выводим его на экран, иначе если там 2 и более, выводим на экран эти 2 и более чисел и пишем, что выражение было записано не верно.
E1337 вне форума Ответить с цитированием
Старый 10.04.2016, 07:02   #18
CMY_3
Пользователь
 
Регистрация: 24.02.2016
Сообщений: 38
По умолчанию

http://www.programmersforum.ru/showt...=290213&page=2
это же ваша тема, зачем их плодить с одним и тем же вопросом?
Код:
  i := 1;
  while st_nm<>nil do begin
    Pop(st_nm,a);
    if (st_nm=nil) and (i=1) then writeln('Результат ',a)
    else write(a:7);
    inc(i);
  end;
  if i>2 then writeln(#13#10,'ошибка ввода.');
CMY_3 вне форума Ответить с цитированием
Старый 10.04.2016, 10:55   #19
E1337
Пользователь
 
Регистрация: 24.01.2016
Сообщений: 20
По умолчанию

Можете написать полный код? Дополните код комментариями к строкам, буду очень-очень благодарен!
E1337 вне форума Ответить с цитированием
Старый 10.04.2016, 15:51   #20
E1337
Пользователь
 
Регистрация: 24.01.2016
Сообщений: 20
По умолчанию

Можно полный код пожалуйста?
Цитата:
Сообщение от CMY_3 Посмотреть сообщение
http://www.programmersforum.ru/showt...=290213&page=2
это же ваша тема, зачем их плодить с одним и тем же вопросом?
Код:
  i := 1;
  while st_nm<>nil do begin
    Pop(st_nm,a);
    if (st_nm=nil) and (i=1) then writeln('Результат ',a)
    else write(a:7);
    inc(i);
  end;
  if i>2 then writeln(#13#10,'ошибка ввода.');
E1337 вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Динамические структуры. стеки в Си Julia220 Помощь студентам 0 24.11.2013 03:43
динамические структуры данных, стеки, очереди, списки. rinoolik Паскаль, Turbo Pascal, PascalABC.NET 1 24.12.2012 17:42
Динамические структуры. Стеки Juicy_Stilet Общие вопросы C/C++ 1 21.11.2012 17:40
Динамические структуры данных. Стеки. Очереди. Двоичные деревья. Paulo Помощь студентам 0 30.04.2009 06:12