/******************************************************************** Engineering 3891 Advanced Structured Programming Assignment: 5 Date Due: October 20th/2000 Name: Daryl Martin Student #: 9713520 Username: darylm *********************************************************************/ #include "assign5.h" int size = 0; myComplex stack[STACKSIZE]; /****************************************************************** * push -- Put's one number on the stack. Returns true if sucessful * and false if not * * Parameters: * myComplex x - The value to be pushed onto the stack * * Modifies: none * * Returns: True or false Date: 10/20/00 *******************************************************************/ bool push(myComplex x) { if(size >= STACKSIZE) return false; stack[size++] = x; return true; } /****************************************************************** * pop -- Pop a number from the stack and pass it back to the * referenced variable. True if sucessful, false if not * * * Modifies: none * * Returns: True or false Date: 10/20/00 *******************************************************************/ bool pop(myComplex& x) { if(size == 0) { return false; } if(size != 0) { x = stack[--size]; return true; } } /****************************************************************** * oper -- Carries out the operation. ie. Multiplication, Divison * * Parameters: * char op - The operation that the want's done * * Modifies: none * * Returns: True or false Date: 10/20/00 *******************************************************************/ bool oper(char op) { myComplex leftSide, rightSide; myComplex final; if (size < 2 ) return false; pop(rightSide); pop(leftSide); switch (op) { case '+': final.re = (leftSide.re + rightSide.re); final.im = (leftSide.im + rightSide.im); break; case '-': final.re = (leftSide.re - rightSide.re); final.im = (leftSide.im - rightSide.im); break; case '*': final.re = (leftSide.re * rightSide.re) - (leftSide.im * rightSide.im); final.im = (leftSide.re * rightSide.im) + (leftSide.im * rightSide.re); break; case '/': if ((rightSide.re == 0) && (rightSide.im == 0)) { push(leftSide); push(rightSide); return false; } final.re = ((leftSide.re * rightSide.re + leftSide.im * rightSide.im)/(rightSide.re * rightSide.re + rightSide.im * rightSide.im)); final.im = ((rightSide.re * leftSide.im - rightSide.im * leftSide.re)/(rightSide.re * rightSide.re + rightSide.im * rightSide.im)); break; default: push(leftSide); push(rightSide); return false; break; } push(final); return true; }