// // NAME // asgn3.cpp // // DESCRIPTION // This file contains the functions in the Main module. // This module contains the top-level functions of the program. // // // Include files. // #include <iostream.h> #include "bool.h" // You may comment this line out. #include "expr.h" #include "parse.h" // // Function prototypes. // static void displayMenu(); static int chooseExpr(); static void doEnter(expr * exprs[]); static void doDisplay(expr * exprs[]); static void doEvaluate(expr * exprs[]); static void doClear(expr * exprs[]); static void doJoin(expr * exprs[]); // // NAME // main // // DESCRIPTION // This function is the top-level function of the program. // // PARAMETERS // (none) // // RETURNS // 0 // int main() { char choice; bool done = false; expr * exprs[2]; exprs[0] = new constant(0.0); exprs[1] = new constant(0.0); while (!done) { displayMenu(); cin >> choice; switch (choice) { case '1': doEnter(exprs); break; case '2': doDisplay(exprs); break; case '3': doEvaluate(exprs); break; case '4': doClear(exprs); break; case '5': doJoin(exprs); break; case '6': done = true; break; } } delete exprs[0]; delete exprs[1]; return 0; } // // NAME // displayMenu // // DESCRIPTION // This function displays the menu to the standard output. // // PARAMETERS // (none) // // RETURNS // (none) // static void displayMenu() { cout << endl << "1. Enter expression" << endl << "2. Display expression" << endl << "3. Evaluate expression" << endl << "4. Clear expression" << endl << "5. Join expressions" << endl << "6. Quit" << endl << endl << "> "; } // // NAME // chooseExpr // // DESCRIPTION // This function prompts the user to choose an expression, then // returns value entered. // // PARAMETERS // (none) // // RETURNS // value entered // static int chooseExpr() { int choice; cout << endl; cout << "Which expression (1 or 2): "; cin >> choice; return choice-1; } // // NAME // doEnter // // DESCRIPTION // This function reads in an expression from the user. // // PARAMETERS // exprs (in/out) - array of expressions. // // RETURNS // (none) // static void doEnter(expr * exprs[]) { char str[100]; int index; cout << endl << "Enter an expression: "; cin.getline(str, 100); cin.getline(str, 100); index = chooseExpr(); delete exprs[index]; exprs[index] = parse(str); } // // NAME // doDisplay // // DESCRIPTION // This function displays an expression // // PARAMETERS // exprs (in/out) - array of expressions. // // RETURNS // (none) // static void doDisplay(expr * exprs[]) { (exprs[chooseExpr()]->display(cout << endl)) << endl; } // // NAME // doEvaluate // // DESCRIPTION // This function evaluates an expression // // PARAMETERS // exprs (in/out) - array of expressions. // // RETURNS // (none) // static void doEvaluate(expr * exprs[]) { int index; index = chooseExpr(); cout << endl; cout << exprs[index]->evaluate() << endl; } // // NAME // doClear // // DESCRIPTION // This function resets an expression to zero. // // PARAMETERS // exprs (in/out) - array of expressions. // // RETURNS // (none) // static void doClear(expr * exprs[]) { int index; index = chooseExpr(); delete exprs[index]; exprs[index] = new constant(0.0); return; } // // NAME // doJoin // // DESCRIPTION // This function joins two expressions // // PARAMETERS // exprs (in/out) - array of expressions. // // RETURNS // (none) // static void doJoin(expr * exprs[]) { char choice; composite::operation oper; cout << endl << "Which operation?" << endl << " 1. Addition" << endl << " 2. Subtraction" << endl << " 3. Multiplication" << endl << " 4. Division" << endl << endl << "> "; cin >> choice; switch (choice) { case '1': oper = composite::Addition; break; case '2': oper = composite::Subtraction; break; case '3': oper = composite::Multiplication; break; case '4': oper = composite::Division; break; default: oper = composite::Addition; break; } exprs[0] = new composite(oper, exprs[0], exprs[1]->clone()); return; } // // End of file. //