algorytm.org

Implementacja w C/C++

Praca
Interesuje Cię praca przy weryfikacji oprogramowania do samolotów?
Sprawdź to!
Baza Wiedzy
wersja offline serwisu przeznaczona na urządzenia z systemem Android
Darowizny
darowiznaWspomóż rozwój serwisu
Nagłówki RSS
Artykuły
Implementacje
Komentarze
Forum
Bookmarki






Sonda
Implementacji w jakim języku programowania poszukujesz?

Odwrotna Notacja Polska - Implementacja w C/C++
Ocena użytkownikóww: *****  / 31
SłabyŚwietny
Nadesłany przez Marian, 23 lutego 2011 17:17
Kod przedstawiony poniżej przedstawia główną część rozwiązania problemu.
Pobierz pełne rozwiązanie.

Jeżeli nie odpowiada Ci sposób formatowania kodu przez autora skorzystaj z pretty printer'a i dostosuj go automatycznie do siebie.

onp_1_c.cpp:
// Odwrotna notacja polska
// www.algorytm.org

#include <iostream>
#include <string>
using namespace std; 

int main()
{
	char stos[20];
	int wierzcholek_stosu = 0;
	string wyrazenie;
	cout << "Podaj wyrazenie: ";
	getline(cin, wyrazenie);
	int dlugosc = wyrazenie.length();
	for (int i = 0; i < dlugosc; i++)
	{
		switch (wyrazenie[i])
		{
			case '(':
				stos[wierzcholek_stosu] = wyrazenie[i];
				wierzcholek_stosu++;
				break;
			case ')':
				for ( ; stos[wierzcholek_stosu-1] != '('; wierzcholek_stosu--)
					cout << " " << stos[wierzcholek_stosu-1];
				break;
			case '+':
			case '-':
				while (wierzcholek_stosu > 0 && stos[wierzcholek_stosu-1] != '(')
				{
					cout << stos[wierzcholek_stosu-1] << " ";
					wierzcholek_stosu--;
				}
				stos[wierzcholek_stosu] = wyrazenie[i];
				wierzcholek_stosu++;
				break;
			case '*':
			case '/':
			case '%':
				while (wierzcholek_stosu > 0 && (stos[wierzcholek_stosu-1] == '*' || stos[wierzcholek_stosu-1] == '/' || stos[wierzcholek_stosu-1] == '%'))
				{
					cout << stos[wierzcholek_stosu-1] << " ";
					wierzcholek_stosu--;
				}
				stos[wierzcholek_stosu] = wyrazenie[i];
				wierzcholek_stosu++;
				break;
			default:
				cout << wyrazenie[i];
				break;
		}
	}
	wierzcholek_stosu--;
	while (wierzcholek_stosu > 0)
	{
		wierzcholek_stosu--;
		cout << " " << stos[wierzcholek_stosu];
	}
	cout << endl;
	return 0;
}
Komentarze
photo
0 # filozof 2011-04-03 21:12
gamoniu czego to zjada ostatni znak?
Odpowiedz | Odpowiedz z cytatem | Cytować
photo
-1 # Julas 2011-04-30 07:13
Algorytm NIE działa jak powinien

wyświetla nawiasy których nie powinien
dla wyrażenia ((2+7)/3+(14-3)*4)/2 ma zamienione niektóre znaki ale pomógł w zrozumieniu problemu;) Pozdrawiam
Odpowiedz | Odpowiedz z cytatem | Cytować
photo
+1 # chylin 2015-11-12 17:07
Można było trochę czyściej zapisać ale ok wiadomo o co chodzi. Piszesz w C++ i nie używasz klas ? mogłeś zaimplementować stos ale i tak jest ok
Odpowiedz | Odpowiedz z cytatem | Cytować
Dodaj komentarz