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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 14.09.2013, 12:05   #1
lenka91
Пользователь
 
Регистрация: 02.06.2013
Сообщений: 17
По умолчанию Выражение в постфиксной форме записи(СИ/С++)

Помогите пожалуйста написать программу, вычисляющую арифметическое выражение, представленное в постфиксной форме записи.
В программе нужно использовать стек.
lenka91 вне форума Ответить с цитированием
Старый 14.09.2013, 13:02   #2
Bugrimov
C/C++, Java
Участник клуба
 
Аватар для Bugrimov
 
Регистрация: 28.03.2012
Сообщений: 1,679
По умолчанию

Конкретнее + наработки, если есть...
"Keep it simple" - придерживайтесь простоты!
Уильям Оккам - "Не следует множить сущее без необходимости"
Сложность - враг простоты и удобства!
Bugrimov вне форума Ответить с цитированием
Старый 14.09.2013, 15:37   #3
lenka91
Пользователь
 
Регистрация: 02.06.2013
Сообщений: 17
По умолчанию

Саму программу рекомендуется выполнить в виде программного комплекса, состоящего из двух частей В первой части программы нужно выполнить решение задачи, а действия, связанные с реализацией динамической структуры стек, следует вынести во вторую часть программы, оформленную в виде макромодуля Unit.

в постфиксной форме записи пример
4*(6-3)+(8-6)/2
будет записан как
4 6 3 - * 8 6 - 2 / +

запись поступает в стек поэлементно и каждое поступившее число просто заталкивается в стек, а каждая операция снимает со стека два числа,выполняет с ними сое действие и кладет в стек результат. Всё можно записать таблицей:

входной символ -- содержимое стека
4 -- 4
6 -- 4 6
3 -- 4 6 3
- -- 4 3
* -- 12
8 -- 12 8
6 -- 12 8 6
- -- 12 2
2 -- 12 2 2
/ -- 12 1
+ -- 13

Других наработок пока нет, только начала составление алгоритма
lenka91 вне форума Ответить с цитированием
Старый 14.09.2013, 15:41   #4
lenka91
Пользователь
 
Регистрация: 02.06.2013
Сообщений: 17
По умолчанию

Вроде задачка не сложная, просто со стеками раньше никогда не работала

Последний раз редактировалось lenka91; 14.09.2013 в 15:44.
lenka91 вне форума Ответить с цитированием
Старый 15.09.2013, 16:17   #5
pitlis
 
Регистрация: 15.09.2013
Сообщений: 7
По умолчанию

В книге Кернигана и Ритчи "Язык Си" похожая задача разбирается. Глава 4.3.
pitlis вне форума Ответить с цитированием
Старый 15.09.2013, 16:50   #6
rrrFer
Санитар
Старожил
 
Аватар для rrrFer
 
Регистрация: 04.10.2008
Сообщений: 2,577
По умолчанию

Цитата:
запись поступает в стек поэлементно и каждое поступившее число просто заталкивается в стек, а каждая операция снимает со стека два числа,выполняет с ними сое действие и кладет в стек результат
план верный, чем там дальше о таблице я не понял.

Собственно, какого рода помощь вам нужна?
Цитата:
В книге Кернигана и Ритчи "Язык Си" похожая задача разбирается. Глава 4.3.
Эта задача решена не только у ритчи, а везде.
rrrFer вне форума Ответить с цитированием
Старый 18.09.2013, 21:28   #7
lenka91
Пользователь
 
Регистрация: 02.06.2013
Сообщений: 17
По умолчанию

всем спасибо, разобралась
lenka91 вне форума Ответить с цитированием
Старый 19.09.2013, 08:32   #8
rrrFer
Санитар
Старожил
 
Аватар для rrrFer
 
Регистрация: 04.10.2008
Сообщений: 2,577
По умолчанию

Цитата:
всем спасибо, разобралась
дак выкладывай код, МБ кому-нибудь поможет.
rrrFer вне форума Ответить с цитированием
Старый 05.12.2013, 19:29   #9
lenka91
Пользователь
 
Регистрация: 02.06.2013
Сообщений: 17
По умолчанию

если кому поможет, вот рабочий код

Код:
#include "stdafx.h"
#include <fstream>
using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
   char ch;
float A[100], B[]={5, 3, 4, 2, 1};
int state=0, i=0, j=0, exp=0;
int t=0;
ifstream in ("exp.in");
while (!in.eof())
{
  switch (state)
{	case 0:
{	in»ch;
if (ch=='*')
{	state=1;
break;
}
if (ch=='/')
{	state=2;
break;
}
if (ch=='+')
{	state=3;
break;
}
if (ch=='-')
{	state=4;
break;
}
A[i]=B[i];
i++;
break;
}
case 1:
{	A[t+1]*=A[t];
t++;
state=0;
break;
}
case 2:
{	A[t+1]=A[t]/A[t+1];
t++;
state=0;
break;
}
case 3:
{	A[t+1]+=A[t];
t++;
   state=0;
   break;
}
case 4:
{	A[t+1]=A[t]-A[t+1];
t++;
state=0;
break;	
}	}	}
in.close();
ofstream out ("exp.out");
out«A[t];
out.close();
return 0;
}
lenka91 вне форума Ответить с цитированием
Старый 05.12.2013, 19:56   #10
rrrFer
Санитар
Старожил
 
Аватар для rrrFer
 
Регистрация: 04.10.2008
Сообщений: 2,577
По умолчанию

мм, 3 месяца почти на этот код ушло? )
rrrFer вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Непонятки в форме записи Shad0wF1rst Общие вопросы C/C++ 3 11.09.2013 10:37
Вопрос про вывод переменной в префиксной и постфиксной форме. C++ fly0f Помощь студентам 1 04.04.2012 20:37
Turbo Pascal - вычислить значение выражения в постфиксной форме doktor_zlo Помощь студентам 4 11.11.2011 14:28
Удалить записи в форме Swatch Microsoft Office Access 2 22.02.2010 16:57
дерево выражения, записанного в постфиксной форме Delphi Римма1990 Помощь студентам 0 20.04.2009 20:49