Ahojte, mám problém s kódom na prepis výrazu z infixového tvaru do postfixového. Spraví mi to pre jeden riadok ale keď mám viacriadkový vstup tak už vypíše hlúposti. Za každú radu ďakujem.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct zasobnik
{
int data[10000]; //pole pre pismenka a operatori ktore budem davat do zasobnika
int vrch; //vrch zasobnika
}zasobnik;
char vrch(zasobnik *s);
int priorita(char);
int je_prazdny(zasobnik *s);
char vyber(zasobnik *s);
void vloz(zasobnik *s, char x);
int je_plny(zasobnik *s);
void inicializacia(zasobnik *s);
int main()
{
zasobnik s;
char x;
int c;
inicializacia(&s); //inicializacia vrchu zasobnika
while ((c = getchar()) > 0)
{
if (c >= 'A' && c <= 'Z') //ak je to pismeno tak ho vypise
printf("%c", c);
else
if (c == '(') //ak je to lava zatvorka tak vlozi do zasobnika
vloz(&s, '(');
else
{
if (c == ')') //ak je to prava zatvorka tak..
while ((x = vyber(&s)) != '(') //..sa vybera zo zasobnika kym nenarazi na pravu zatvortku
printf("%c", x);
else //ak je to operator
{
while (priorita(c) <= priorita(vrch(&s)) && je_prazdny(&s) != 1) //porovna sa priorita operatoru
{
x = vyber(&s);
printf("%c", x);
}
vloz(&s, c); //vlozenie operatoru
}
}
}
while(je_prazdny(&s) != 1) //vyprazdnenie zasobnika
{
x = vyber(&s);
printf("%c", x);
}
getchar();
getchar();
return 0;
}
int priorita(char x)
{
int von;
if (x == '(')
von = 0;
if (x == '+' || x == '-') //mensia priorita vrati 1
von = 1;
if (x == '*' || x == '/' ) //vacsia priorita vrati 2
von = 2;
return von;
}
void inicializacia(zasobnik *s)
{
s->vrch = -1;
}
int je_prazdny(zasobnik *s)
{
if (s->vrch == -1) //na zaciatku bol inicializovany na -1
return(1);
else
return(0);
}
void vloz(zasobnik *s, char x)
{
s->vrch = s->vrch + 1; //posuniem vrch a
s->data[s->vrch] = x; //zapisem znak
}
char vyber(zasobnik *s)
{
int x;
x = s->data[s->vrch]; //do x aktualny znak z vrchu zasobnika
s->vrch = s->vrch - 1; //posuniem vrch o
return(x);
}
char vrch(zasobnik * s)
{
return(s->data[s->vrch]); //vrati znak ktory je na vrchu zasobnika
}