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);
}
/*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);
}