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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 11.02.2012, 13:04   #1
Sylar9
Форумчанин
 
Регистрация: 22.10.2011
Сообщений: 252
Вопрос Преобразовать выражение в постфиксную форму

Преобразовать выражение, составленное из цифр и знаков арифметических операций (+,-,*,/) в постфиксную форму. В постфиксной форме сначала записываются операнды, а затем знак операции.
Обычная запись
3+4
(5-4)*2
2*(3+4)*5

Постфиксная запись
3 4 +
5 4 – 2 *
2 3 4 + * 5 *

Вот алгоритм, но все равно не могу понять как это сделать
- читаешь выражение как строку посимвольно.
- находя знак, выводишь его после чисел (создаешь соответствующую функцию).
- находя скобки, ищешь внутри знак и убрав скобки, выводишь знак после чисел (предыдущая функция).
Sylar9 вне форума Ответить с цитированием
Старый 11.02.2012, 16:09   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

1) алгоритм у Вас не очень корректный - это, скорее для человека подойдёт больше, чем для программы.

2) данная задача является классической в программировании. Поэтому Вы поиском легко найдёте как теоретический материал (в т.ч. нормальные алгоритмы), так и готовый программный код.

p.s. я вам конкретным примером кода не помогу, т.к. C/C++ я не знаю, а пример кода на Pascal/Delphi Вам вряд ли поможет, да и поискать за Вас ленюсь - думаю, что поиском Вы сами прекрасно воспользуетесь
Serge_Bliznykov вне форума Ответить с цитированием
Старый 12.02.2012, 17:53   #3
nehta
Новичок
Джуниор
 
Регистрация: 12.02.2012
Сообщений: 4
По умолчанию

вот код на плюсах если чё.Недавно сам писал.
Код:
#include<iostream>
using namespace std;

int prior(char x)
{
	if ((x='*')||(x='/')) return 2;
	if ((x='+')||(x='-')) return 1;
	if ((x='(')||(x=')')) return 0;
}

class stack
{
	int top;
	char body[100];
public :
	stack(){top=0;}
	bool empty(){return top==0;}
	char get_top_element(){return body[top];}
	int top_prior(){return prior(body[top]);}
	void push(char x)
	{
		top++;
		body[top]=x;
	}
	char pop()
	{
		top--;
		return body[top+1];
	}
	
};




int main()
{
	char note[100],pnote[100];
	int i,p=0;
	stack s;
	cin >> note;

	for(i=0;i<strlen(note);i++)
	{
		if (note[i]=='(') s.push(note[i]);
		else if ((note[i]=='+')||(note[i]=='-')||(note[i]=='/')||(note[i]=='*'))
		{
			while((!s.empty())&&(s.top_prior()>prior(note[i])))
			{
				p++;
				pnote[p]=s.pop();
			}
			s.push(note[i]);
		}
		else if(note[i]==')')
		{
			while((!s.empty())&&(s.get_top_element()!='('))
			{
				p++;
				pnote[p]=s.pop();
			}
			s.pop();
		}
		else
		{
			p++;
			pnote[p]=note[i];
		}
	}
	while(!s.empty())
	{
		p++;
		pnote[p]=s.pop();
	}
	for(i=1;i<=p;i++)
		cout << pnote[i];
	cout << endl;
	return 0;
}

________
Код нужно оформлять по правилам:
тегом [CODE]..[/СODE] (это кнопочка с решёточкой #)
Не забывайте об этом!
Модератор.

Последний раз редактировалось Serge_Bliznykov; 12.02.2012 в 19:39.
nehta вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Преобразование арифметического выражения из инфиксной в постфиксную форму записи Nelson1992 Паскаль, Turbo Pascal, PascalABC.NET 2 29.05.2021 18:04
Преобразовать формулы в выражение на языке VBA Wika Помощь студентам 0 27.09.2010 21:16
Перевод в постфиксную форму записи. tgig Помощь студентам 1 08.06.2010 12:01
Выражение в постфиксную форму перевод Toni Milano Помощь студентам 2 01.12.2009 10:57