02/06/10 19:42
fatshady
Ciao, volevo chiedervi una mano per interpretare questo codice, il nostro prof ce l'ha fornito e dobbiamo fare una relazione. A scuola non studiamo C, il prof ce l'ha spiegato ma ho capito molto poco... riuscireste a dirmi cosa fanno le varie funzioni? dovrei portarla per venerdi ma mi son ricordato solo ora che dovevo farla. Se riuscite a darmi una mano ve ne sarei grato se non fate in tempo per venerdi scriverò quello che ho capito da solo
ecco il codice : #include<stdio.h> #include<stdlib.h> #define MAXOP 100 #define NUMBER '0' int getop(char []); void push(double); double pop(void); /* reverse polish calculator */ int main(void) { int type; double op2; char s[MAXOP]; while((type = getop(s)) != EOF) { switch(type) { case NUMBER: push(atof(s)); break; case '+': push(pop()+pop()); break; case '*': push(pop()*pop()); break; case '-': op2 = pop(); push(pop()-op2); break; case '/': op2 = pop(); if(op2 != 0.0) push(pop()/op2); else printf("error:zero divisor\n"); case '\n': printf("\t%.8g\n",pop()); break; default: printf("error: unknown command %s\n",s); break; } } return 0; } #define MAXVAL 100 int sp = 0; double val[MAXVAL]; void push(double f) { if(sp < MAXVAL) val[sp++]=f; else printf("error:stack full, cant push %g\n",f); } double pop(void) { if(sp>0) return val[--sp]; else { printf("error: stack empty\n"); return 0.0; } } #include<ctype.h> int getch(void); void ungetch(int); int getop(char s[]) { int i,c; while((s[0] = c = getch()) == ' ' || c =='\t') ; s[1] = 'Ciao, volevo chiedervi una mano per interpretare questo codice, il nostro prof ce l'ha fornito e dobbiamo fare una relazione. A scuola non studiamo C, il prof ce l'ha spiegato ma ho capito molto poco... riuscireste a dirmi cosa fanno le varie funzioni? dovrei portarla per venerdi ma mi son ricordato solo ora che dovevo farla. Se riuscite a darmi una mano ve ne sarei grato se non fate in tempo per venerdi scriverò quello che ho capito da solo
ecco il codice : #include<stdio.h> #include<stdlib.h> #define MAXOP 100 #define NUMBER '0' int getop(char []); void push(double); double pop(void); /* reverse polish calculator */ int main(void) { int type; double op2; char s[MAXOP]; while((type = getop(s)) != EOF) { switch(type) { case NUMBER: push(atof(s)); break; case '+': push(pop()+pop()); break; case '*': push(pop()*pop()); break; case '-': op2 = pop(); push(pop()-op2); break; case '/': op2 = pop(); if(op2 != 0.0) push(pop()/op2); else printf("error:zero divisor\n"); case '\n': printf("\t%.8g\n",pop()); break; default: printf("error: unknown command %s\n",s); break; } } return 0; } #define MAXVAL 100 int sp = 0; double val[MAXVAL]; void push(double f) { if(sp < MAXVAL) val[sp++]=f; else printf("error:stack full, cant push %g\n",f); } double pop(void) { if(sp>0) return val[--sp]; else { printf("error: stack empty\n"); return 0.0; } } #include<ctype.h> int getch(void); void ungetch(int); int getop(char s[]) { int i,c; while((s[0] = c = getch()) == ' ' || c =='\t') ; s[1] = '{parsed_message}'; if(!isdigit(c) && c!='.') return c; i = 0; if(isdigit(c)) while(isdigit(s[++i] =c =getch())) ; if(c=='.') while(isdigit(s[++i] = c=getch())) ; s[i] = '{parsed_message}'; if(c!=EOF) ungetch(c); return NUMBER; } #define BUFSIZE 100 char buf[BUFSIZE]; int bufp = 0; int getch(void) { return (bufp > 0) ? buf[--bufp] : getchar(); } void ungetch(int c) { if(bufp >= BUFSIZE) printf("ungetch: too many characters\n"); else buf[bufp++] = c; }'; if(!isdigit(c) && c!='.') return c; i = 0; if(isdigit(c)) while(isdigit(s[++i] =c =getch())) ; if(c=='.') while(isdigit(s[++i] = c=getch())) ; s[i] = 'Ciao, volevo chiedervi una mano per interpretare questo codice, il nostro prof ce l'ha fornito e dobbiamo fare una relazione. A scuola non studiamo C, il prof ce l'ha spiegato ma ho capito molto poco... riuscireste a dirmi cosa fanno le varie funzioni? dovrei portarla per venerdi ma mi son ricordato solo ora che dovevo farla. Se riuscite a darmi una mano ve ne sarei grato se non fate in tempo per venerdi scriverò quello che ho capito da solo
ecco il codice : #include<stdio.h> #include<stdlib.h> #define MAXOP 100 #define NUMBER '0' int getop(char []); void push(double); double pop(void); /* reverse polish calculator */ int main(void) { int type; double op2; char s[MAXOP]; while((type = getop(s)) != EOF) { switch(type) { case NUMBER: push(atof(s)); break; case '+': push(pop()+pop()); break; case '*': push(pop()*pop()); break; case '-': op2 = pop(); push(pop()-op2); break; case '/': op2 = pop(); if(op2 != 0.0) push(pop()/op2); else printf("error:zero divisor\n"); case '\n': printf("\t%.8g\n",pop()); break; default: printf("error: unknown command %s\n",s); break; } } return 0; } #define MAXVAL 100 int sp = 0; double val[MAXVAL]; void push(double f) { if(sp < MAXVAL) val[sp++]=f; else printf("error:stack full, cant push %g\n",f); } double pop(void) { if(sp>0) return val[--sp]; else { printf("error: stack empty\n"); return 0.0; } } #include<ctype.h> int getch(void); void ungetch(int); int getop(char s[]) { int i,c; while((s[0] = c = getch()) == ' ' || c =='\t') ; s[1] = '{parsed_message}'; if(!isdigit(c) && c!='.') return c; i = 0; if(isdigit(c)) while(isdigit(s[++i] =c =getch())) ; if(c=='.') while(isdigit(s[++i] = c=getch())) ; s[i] = '{parsed_message}'; if(c!=EOF) ungetch(c); return NUMBER; } #define BUFSIZE 100 char buf[BUFSIZE]; int bufp = 0; int getch(void) { return (bufp > 0) ? buf[--bufp] : getchar(); } void ungetch(int c) { if(bufp >= BUFSIZE) printf("ungetch: too many characters\n"); else buf[bufp++] = c; }'; if(c!=EOF) ungetch(c); return NUMBER; } #define BUFSIZE 100 char buf[BUFSIZE]; int bufp = 0; int getch(void) { return (bufp > 0) ? buf[--bufp] : getchar(); } void ungetch(int c) { if(bufp >= BUFSIZE) printf("ungetch: too many characters\n"); else buf[bufp++] = c; }
aaa