/*--- CS 111 - Week 11 Lecture 1 - 2024-11-05 by: Sharon Tuttle last modified: 2024-11-06 ---*/ #include <cstdlib> #include <iostream> #include <string> #include <cmath> using namespace std; // imagine a world where letter grades are just // a single letter -- and there are only 4 letter // grades: // A - Excellent // B - Very Good // C - Acceptable // T - Try Again // // and I decide I want a function that gives the // grade description given a letter grade /*=== signature: describe_grade: char -> string purpose: expects a letter grade, and returns the desired description for that grade, as follows: A or a - Excellent B or b - Very Good C or c - Acceptable T or t - Try Again BUT if given an unrecognized grade, it returns "Unrecognized Grade" tests: describe_grade('A') == "Excellent" describe_grade('B') == "Very Good" describe_grade('C') == "Acceptable" describe_grade('T') == "Try Again" describe_grade('a') == "Excellent" describe_grade('b') == "Very Good" describe_grade('c') == "Acceptable" describe_grade('t') == "Try Again" describe_grade('F') == "Unrecognized Grade" ===*/ string describe_grade(char grade) { /*=== 1st version: using an if-else-if pattern if ((grade == 'A') || (grade == 'a')) { return "Excellent"; } else if ((grade == 'B') || (grade == 'b')) { return "Very Good"; } else if ((grade == 'C') || (grade == 'c')) { return "Acceptable"; } else if ((grade == 'T') || (grade == 't')) { return "Try Again"; } else { return "Unrecognized Grade"; } ===*/ // now using a local variable and a switch statement // (comment out the break statements below to see // how that leads to incorrect results!) string desired_descr = ""; switch (grade) { case 'A': case 'a': desired_descr = "Excellent"; break; case 'B': case 'b': desired_descr = "Very Good"; break; case 'C': case 'c': desired_descr = "Acceptable"; break; case 'T': case 't': desired_descr = "Try Again"; break; default: desired_descr = "Unrecognized Grade"; } return desired_descr; } /*--- test the functions above ---*/ int main() { cout << boolalpha; cout << "*** Testing: describe_grade ***" << endl; cout << (describe_grade('A') == "Excellent") << endl; cout << (describe_grade('B') == "Very Good") << endl; cout << (describe_grade('C') == "Acceptable") << endl; cout << (describe_grade('T') == "Try Again") << endl; cout << (describe_grade('a') == "Excellent") << endl; cout << (describe_grade('b') == "Very Good") << endl; cout << (describe_grade('c') == "Acceptable") << endl; cout << (describe_grade('t') == "Try Again") << endl; cout << (describe_grade('F') == "Unrecognized Grade") << endl; // now using a local variable assigned using // interactive input to let user specify // a grade to describe! char desired_grade; cout << endl; cout << "What grade do you want described? (A,B,C,T are OK)" << endl; cin >> desired_grade; cout << "That grade's description is: " << describe_grade(desired_grade) << endl; return EXIT_SUCCESS; }