PDA

View Full Version : [C] Esercizio con stack


lucas87
02-04-2007, 08:15
Salve, ho cercato di implementare il seguente esercizio

/*Scrivere una funzione per calcolare il valore di un’espressione aritmetica
espressa come stringa in forma postfissa contenente
i simboli 0, 1, …, 9, +, *.*/

Dovrebbe essere corretto ma mi da una miriade di errori, cerco qualcuno che mi aiuti a farlo andare.

grazie in anticipo.




#include<stdio.h>
#include<stdlib.h>

#define FULL 100
#define EMPTY 0

typedef char data;



typedef struct elem{
data d;
struct elem *next;
};

typedef struct elem elem;

typedef struct stack{
int cnt;
elem *top;
};

typedef struct stack stack;

void inizializza(stack *stk);
void push(data d,stack *stk);
data pop(stack *stk);
int valuta_postfissa(char *ptr_p,stack *stk);



int main(void){
char p[]={2+3};
stack s;
inizializza(&s);
printf("Il risultato dell'operazione %s e' il seguente %d",p,valuta_postfissa(p,&s));
system("PAUSE");
}


void inizializza(stack *stk){
stk->cnt=0;
stk->top=NULL;
}

void push(data d,stack *stk){
elem *p;
p=malloc(sizeof(elem));
p->d=d;
p->next=stk->top;
stk->top=p;
stk->cnt++;
}

int valuta_postfissa(char *ptr_p,stack *stk)
{

char c;

while (c = *ptr_p++) {
/* operando */
if ((c != ‘+’)&&(c != ‘*’)) {
push(c-’0’,&stk);
}
/* operatore */
else {
int op1, op2;
op2 = pop(&stk);
op1 = pop(&stk);
switch (c) {
case ‘+’: push(op1+op2,&stk);
break;
case ‘*’: push(op1*op2,&stk );
break;
}
}
}

return pop(&stk);
}

cionci
02-04-2007, 09:43
Questo č errato:

char p[]={2+3};

deve essere:

char p[]="2+3";

lucas87
02-04-2007, 10:30
Mi dice sempre che non č palindorma

lucas87
02-04-2007, 10:32
NOn palindroma, non va

cionci
02-04-2007, 10:34
Hai sbagliato thread...questo č quello sulle operazioni...

lucas87
02-04-2007, 10:37
Eh si me ne sono accorto