Witam, mam problem z zadaniem. Odbiega ono od tego co robiliśmy na zajęciach, także z góry przepraszam za amatorszczyznę, ale do rzeczy. Ma to być kalkulator liczący równania zapisane linijkami w pliku tekstowym. Najpierw wczytaną linię chcę przetransformować do ONP. Niestety wszystkie materiały tego typu znalezione w sieci robione są na "<vector>'ach" jest mi to zupełnie obce i nie wiem jak w to włożyć palce. Dlatego reprezentację stosu i kolejki mam zamiar zrobić na tablicach. Póki co udało mi się stworzyć coś takiego (co oczywiście nie działa, inaczej by mnie tu nie było :)).
Algorytm tworzyłem na podstawie przykładu z wikipedii w podrozdziale: "Algorytm konwersji z notacji infiksowej do ONP"
Nie czekam na gotowe rozwiązanie, proszę o pomoc w nakierowaniu na poprawne napisanie algorytmu ilczącego.
Poniżej kod mojej nieudolnej transformacji na ONP.
http://pastebin.pl/view/1bae2915
#include <iostream>
#include <fstream>
#include <conio.h>
#include <algorithm>
#include <string>
(...)
string napis; // pobrana linia (równanie) z tekstu
// STOS - reprezentacja zmiennych
string stos;
int rozmiar=0;
// KOLEJKA - reprezentacja zmiennych
string kolejka;
int ile=0;
int glowa=0;
int ostatni_wolny=0;
(...)
int dlugosc=napis.length();
for(int i=1 ; i<(dlugosc-1); i++)
// pierwszy i ostatni znak linii jest zarezerwowany w wymaganiach jako oznaczenie lini
{
if ((napis[i]>= '0' && napis[i]<= '9'))
// sprawdzamy czy pierwszy element jest liczba
{
napis[i]=kolejka[ostatni_wolny];
ostatni_wolny+=1;
ile+=1;
if (!(napis[i+1]>= '0' && napis[i+1]<= '9'))
// sprawdzamy czy kolejny element nie jest liczba i dodajemy spacje w celu rozdzielenia liczb
{
kolejka += " ";
ile++;
}
}
else if ((napis[i]=='*') || (napis[i]=='^') || (napis[i]=='/') || (napis[i]=='-') || (napis[i]=='+') || (napis[i]=='('))
{
rozmiar=rozmiar+1;
napis[i]=stos[rozmiar];
stos += " ";
}
else if(napis[i]==')')
{
stos[rozmiar]=kolejka[ostatni_wolny];
// dodanie do kolejki znaku zdjetego ze stosu
rozmiar=rozmiar-1;
// zdjęcie ze stosu ostatniego znaku
ostatni_wolny+=1;
ile+=1;
rozmiar=rozmiar-1; // zdjęcie ze stosu "("
}
else cout << "err" << endl;
}
for (int j=0; j<=ile; j++)
{
cout << "stan kolejki: " << kolejka[j] <<endl;
}
}
else cout << "w równaniu błędne znaki" << endl;
Pozdrawiam iksnimolS