CONTROL STRUCTURES (MULTI-WAY SELECTION) MULTI-WAY SELECTION EXTENDED IF-ELSE Used to select exactly one task out of multiple tasks (or possibly none) Unlike a series of “ifs” evaluation stops once one relational expression evaluates as true (others are skipped) Always does on less evaluation than a series of “ifs” Well planned implementation provides for efficiency – most common choice is listed first MULTIPLE SELECTION EXTENDED IF-ELSE - SIMPLE if ( relational expression(s) ) statement; else if ( relational expression(s) ) statement; else if ( relational expression(s) ) statement; else statement; MULTI-WAY SELECTION EXTENED IF-ELSE - COMPOUND if ( relational expression(s) ) { statement; statement(s); } else if ( relational expression(s) ) { statement; statement(s); } else if ( relational expression(s) ) { statement; statement(s); } MULTI-WAY SELECTION RULES 1. First statement(s) will be executed if and only if the evaluation of the relational expression(s) is/are true. 2. Second statement(s) will be executed if and only if the evaluation of the first relational expression(s) is/are false and if and only if the evaluation of the second relational expression(s) is/are true. 3. Same progression as 1 and 2 for all levels that exist. Note: This process does not have to end with two, three or four selections, but can continue for as many selections as needed. MULTIPLE SELECTION EXAMPLES: if (numStudents< 6) salary = hours * CLUSTER_RATE; else if (numStudents < 12) salary = hours * LIMITED_RATE; else salary = hours * FULL_RATE MULTIPLE SELECTION EXAMPLES: if (temperature <= 10) cout << “Go Bowling” << endl; else if (temperature <= 32) cout << “Go Skiing” << endl; else if (temperature <= 70) cout << “Play Football” << endl; else if (temperature <= 85) { cout << “Play Tennis” << endl; cout << “Wear white!” << endl; } else cout << “Go Swimming” << endl; if (temperature > 85) cout << “Go Swimming” << endl; else if (temperature > 70) { cout << “Play Tennis” << endl; cout << “Wear white!” << endl; } else if (temperature > 32) cout << “Play Football” << end; else if (temperature > 10) cout << “Go Skiing” << endl; else cout << “Go Bowling” << endl; MULTI-WAY SELECTION NESTED IF-ELSE Situations where action is dependent upon two or more different conditions Examples: if (gender == ‘M’) if (age < MAX_AGE) cout << “Male and under 67.” << endl; else cout << “Male and 67 or over.” << endl; else if (age < MAX_AGE) cout << “Female and under 67.” << endl; else cout << “Female and 67 or over.” << endl; if (savings >= DOLLAR_LIMIT) if (vacation >= VACATION_LIMIT) cout << “Trip to Hawaii” << endl; else cout << “Vacation at local ski resort.” << endl; else cout << “Go camping in mountains.” << endl; MULTI-WAY SELECTION SWITCH Alternate form of multi-way selection Decision can only be made on integral or enumerated data types (bool, char, int) Does not work with strings or floating point numbers Only works when testing for specific values Does not work with ranges MULTI-WAY SELECTION SWITCH - SIMPLE switch (selector) { case choice1: case choice2: case choice3: “ case choice(n): } statement; break; statement; break; statement; break; “ statement; MULTI-WAY SELECTION SWITCH – WITH DEFAULT switch (selector) { case choice1: case choice2: “ case choice(n): default: } statement; break; statement; break; “ statement; break; statement; statement(s); MULTIPLE SELECTION SWITCH – COMPOUND switch (selector) { case choice1: case choice2: “ case choice(n): default: } statement; statement(s); break; statement; statemant(s); break; “ statement; statement(s); break; statement; statement(s); MULTIPLE SELECTION RULES 1. Selector may only be an integral data type (int, char, bool, or enumerated). 2. Corresponding statement(s) is/are executed if choice is equal to the selector. 3. After corresponding statement(s) are executed if break is not present additional case statements are executed until a break is found or end of structure is found. 4. If no choice is equal to the selector, the switch is exited unless a default is available. MULTIPLE SELECTION EXAMPLES: switch(category) { case 1: cout << “Category One” << endl; break; case 2: cout << “Category Two” << endl; break; : : case n: cout << “Category n” << endl; break; } MULTI-WAY SELECTION EXAMPLE: int num1, num2, answer; char choice; cout << "Enter two numbers, separated by a space: "; cin >> num1 >> num2; cout << endl << endl; cout << "Perform which operation on the Numbers?" << endl; cout << " a - Add" << endl; cout << " s - Subtract" << endl; cout << " m - Mulitply" << endl; cout << " d - Divide" << endl; cout << "Enter your choice from above: " << endl; cin >> choice; choice = tolower (choice); switch (choice) { case 'a‘: answer = num1 + num2; cout << "The sum is " << answer << endl; break; case 's‘: answer = num1 - num2; cout << "The difference is " << answer << endl; break; case 'm‘: answer = num1 * num2; cout << "The product is " << answer << endl; break; case 'd‘: answer = num1 / num2; cout << "The quotient is " << answer << endl; break; default : cout << "Invalid choice entered!" << endl; } // end switch MULTI-WAY SELECTION EXAMPLE: char answer; cout << "Would you like to continue [Y] or [N]?" << endl; cin >> answer; switch (answer) { case 'Y': case 'y‘: case 'N': case 'n‘: default : cout << "You chose yes" << endl; cout << "Way to go." << endl; break; cout << "You chose no" << endl; cout << "Not very positive." << endl; break; cout << "You were suppose to choose Y or N." << endl; cout << "What happened?" << endl; } // end switch