PDA

View Full Version : [C] Notazione Polacca Semplice Esercizio


xbubbax
03-04-2008, 15:18
Qualcuno mi aiuta a capire dove sbaglio in questo esercizio sulla notazione polacca?

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

int Notazione_Polacca(char s[])
{
pilaPtr P=NULL;
int i=0;
char c;
int op1=0;
int op2=0;
int risultato=0;

while(c=s[i])
{
i=i+1;
if(c!='+' && c!='-')
{
if(c!='*' && c!='/')
{
P=Push(P,c-'0');
}
}else
{
op1=Pop(P);
op2=Pop(P);
switch(c)
{
case'+':P=Push(P,op1+op2);break;
case'-':P=Push(P,op1-op2);break;
case'/':P=Push(P,op1/op2);break;
case'*':P=Push(P,op1*op2);break;
}}}
risultato=Pop(P);
return risultato;}



int main(void){

pilaPtr P=NULL;
char s[10]={'2','1','5','1','-','*','+','2','-'};

printf("%d\n", Notazione_Polacca(s));

system("PAUSE");}

71104
03-04-2008, 17:05
[OT] ahiahiahi, pessima formattazione, cazziatone in arrivo... :asd:

xbubbax
03-04-2008, 17:09
pessima formattazione?????????????????

ma se ho perso 10 minuti solo per indentare perchè la mia solita indentazione non era buona...

ma come c... si indenta?

wizard1993
03-04-2008, 17:16
sicuramente con la clausola while che invece di confrontare assegna bene non deve funzionare.
le indentature si fatto con il tasto tab

71104
03-04-2008, 17:20
pessima formattazione?????????????????

ma se ho perso 10 minuti solo per indentare perchè la mia solita indentazione non era buona...

ma come c... si indenta? tanto per cominciare ogni parentesi graffa chiusa va messa allo stesso livello di indentazione della corrispondente aperta:

{
...
{
...
{
...
}
...
}
...
}

questo rende molto più chiaro l'inizio e la fine di ciascuno scope, nonché tutto ciò che esso contiene. altri errori che hai commesso nella formattazione per ora non so dirteli perché in quel codice io di scope non ne capisco neanche uno :p

fek
03-04-2008, 17:22
Qualcuno mi aiuta a capire dove sbaglio in questo esercizio sulla notazione polacca?

Sbagli a usare la notazione polacca, sbagli la formattazione e sbagli a usare il C.

71104
03-04-2008, 17:24
con l'aiuto del formattatore automatico di Visual C++ 2008 ho ottenuto questo, non ancora perfetto ma già mille volte più leggibile:

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

int Notazione_Polacca(char s[])
{
pilaPtr P=NULL;
int i=0;
char c;
int op1=0;
int op2=0;
int risultato=0;

while(c=s[i])
{
i=i+1;
if(c!='+' && c!='-')
{
if(c!='*' && c!='/')
{
P=Push(P,c-'0');
}
}
else
{
op1=Pop(P);
op2=Pop(P);
switch(c)
{
case'+':
P=Push(P,op1+op2);
break;
case'-':
P=Push(P,op1-op2);
break;
case'/':
P=Push(P,op1/op2);
break;
case'*':
P=Push(P,op1*op2);
break;
}
}
}
risultato=Pop(P);
return risultato;
}



int main(void)
{

pilaPtr P=NULL;
char s[10]={'2','1','5','1','-','*','+','2','-'};

printf("%d\n", Notazione_Polacca(s));

system("PAUSE");
}

71104
03-04-2008, 17:25
Sbagli a usare la notazione polacca, sbagli la formattazione e sbagli a usare il C. eddai su, se gli hanno detto di fare quell'esercizio mica può dare retta a te o peggio ancora a Cesare che gli dice di rifarlo in Python perché così diventerà un buon programmatore molto più velocemente :asd:

fek
03-04-2008, 17:46
eddai su, se gli hanno detto di fare quell'esercizio mica può dare retta a te o peggio ancora a Cesare che gli dice di rifarlo in Python perché così diventerà un buon programmatore molto più velocemente :asd:

Sbaglia a frequentare il corso dove gli hanno dato quell'esercizio allora :D

71104
03-04-2008, 19:00
Sbaglia a frequentare il corso dove gli hanno dato quell'esercizio allora :D :rotfl:

fek
03-04-2008, 19:46
perchè queste cose non le dicevi ai tuoi professori quando facevi l'università e facevi esami di C (presumo)....:D ?

Gli dicevo di molto peggio :D