Hej, moim zadaniem jest stworzyć stos z użyciem wskaźników, który będzie przekształcał wyrażenie z postaci infiksowej na ONP. Założenia: brak spacji, liczby jednocyfrowe.
Kod jest, poszczególne funkcje działają, mam jednak jakiś błąd w pętli for, który powoduje błąd. Przejrzałam już kod wiele razy i nie dostrzegam, co jest źle. Czy mogę prosić o pomoc? Gdzie tu jest błąd, który powoduje, że program nie działa?
Po wpisaniu danych program zwraca 'Process returned -1073741819 (0xC0000005)'.
#include <iostream>
#include <string>
using namespace std;
//Stos typu char
struct wezel{
wezel* nastepny;
char wartosc;
};
struct stos{
wezel* wierzch;
unsigned int rozmiar;
};
void inicjalizujStos(stos *s){
s->wierzch = NULL;
s->rozmiar = 0;
}
bool czyPusty(stos *s){
return s->rozmiar == 0;
}
void push(stos *s, char x){
wezel* nowy = new wezel;
nowy->nastepny = s->wierzch;
nowy->wartosc = x;
s->wierzch = nowy;
s->rozmiar++;
}
char pop(stos *s){
if(czyPusty(s))
return INT_MIN;
char x = s->wierzch->wartosc;
wezel* temp = s->wierzch;
s->wierzch = s->wierzch->nastepny;
delete temp;
s->rozmiar--;
return x;
}
char top(stos *s){
return s->wierzch->wartosc;
}
void zniszczStos(stos *s){
while(!czyPusty(s))
pop(s);
inicjalizujStos(s);
}
//funkcje pomocnicze
bool czy_dzialanie(char x){
if(x == '+' || x == '-' || x == '*' || x == '/'){
return true;
}
else{
return false;
}
}
int priorytet(char x){
if(x == '*' || x == '/'){
return 2;
}
if(x == '+' || x == '-'){
return 1;
}
}
int main(){
stos *Znaki = new stos;
inicjalizujStos(Znaki);
string wyrazenie;
string onp = "";
cout << "Podaj wyrazenie w notacji infiksowej: ";
cin >> wyrazenie;
for(int i = 0; i < wyrazenie.length(); i++){
if(wyrazenie[i] >= '0' && wyrazenie[i] <= '9'){
onp = onp + wyrazenie[i];
}
else if(wyrazenie[i] == '('){
push(Znaki,wyrazenie[i]);
}
else if(wyrazenie[i] == ')'){
while(top(Znaki) != '('){
onp = onp + pop(Znaki);
}
pop(Znaki);
}
else if(czy_dzialanie(wyrazenie[i])){
while(czy_dzialanie(top(Znaki)) && (priorytet(top(Znaki)) >= priorytet(wyrazenie[i]))){
onp = onp + pop(Znaki);
}
push(Znaki,wyrazenie[i]);
}
}
while(!czyPusty(Znaki)){
onp = onp + pop(Znaki);
}
cout << onp;
return 0;
}