Engineering 3891 Assignment 5 Source Code

 

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