Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

For this assignment, you are to write a program, which will calculate the result

ID: 3786805 • Letter: F

Question

For this assignment, you are to write a program, which will calculate the results of Reverse Polish expressions that are provided by the user. You must use a linked list to maintain the stack for this program. You must handle the following situations (errors): Too many operators (+ -/*) Too many operands (doubles) Division by zero The program will take in a Polish expression that separates the operators and operands by a single space, and terminates the expression with an equals sign. The program will continue to take and evaluate expressions until the user enters a zero (0) on a line by itself followed by a new line. Your sample output should show the handling of all the error conditions as well as make use of all of the operators. Sample IO: Input Output 10 15 + = 25 10 15 - = -5 2.5 3.5 + = 6 (or 6.0) 10 0/= Error: Division by zero 10 20 */= Error: Too many operators 12 20 30/= Error: Too many operands -10 -30 - = 20 100 10 50 25/*--2/= -40

Explanation / Answer

#include #include /* for atof() */ #define MAXOP 100 /* max size of operand or operator */ #define NUMBER '0' /* signal that a number was found */ int getop(char []); void push(double); double pop(void); main() { 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 "); break; case ' ': printf(" %.8g ", pop()); break; default: printf("error: unknown command %s ", s); break; } } } #define MAXVAL 100 int sp = 0; double val[MAXVAL]; void push(double f) { if(sp 0) return val[--sp]; else { printf("error: stack empty "); return 0.0; } } #include int getch(void); void ungetch(int); int getop(char s[]) { int i,c; while((s[0] = c = getch()) == ' ' || c ==' ') ; s[1] = ''; i = 0; if(!isdigit(c) && c!='.' && c!='-') return c; if(c=='-') if(isdigit(c=getch()) || c == '.') s[++i]=c; else { if(c!=EOF) ungetch(c); return '-'; } if(isdigit(c)) while(isdigit(s[++i] =c =getch())) ; if(c=='.') while(isdigit(s[++i] = c=getch())) ; s[i] = ''; 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 "); else buf[bufp++] = c; }
Hire Me For All Your Tutoring Needs
Integrity-first tutoring: clear explanations, guidance, and feedback.
Drop an Email at
drjack9650@gmail.com
Chat Now And Get Quote