580 likes | 811 Views
Control Structures Logical Expressions Introduction to the if Dependent Control Statement if Statements with Compound Alternatives Decision Steps in Algorithms Checking the Correctness of an Algorithm Nested if Statements and Multiple Alternative Decisions The switch Control Statement
E N D
Control Structures Logical Expressions Introduction to the if Dependent Control Statement if Statements with Compound Alternatives Decision Steps in Algorithms Checking the Correctness of an Algorithm Nested if Statements and Multiple Alternative Decisions The switch Control Statement Common Programming Errors Selection Structures: if and switch Statements
Selection Statements Selection statements are statements that allow alternatives to straight sequential processing Ex: if(mark==70) grade=“B-”; In particular: if statements (do this only if a condition is true) if-else statements (do either this or that) Logical expressions (evaluate to true or false) Boolean operators (not: ! and: && or: ||)
Motivation int main() { float A,B,C,delta, root1, root2; cout << "Enter your Quad. Eq.: enter 3 real values for a,b,c."<<endl; cin>> A >> B >> C; if(A != 0.0) { delta = B*B - 4*A*C ; if(delta < 0) { cout << "Your A,B,C result in complex roots."<< endl; } else { root1 = -B/(2*A) + sqrt(delta)/(2*A); root2 = -B/(2*A) - sqrt(delta)/(2*A); cout << "root1 is: " << root1 << endl; cout << "root2 is: " << root2 << endl; } // end of if(delta ..) } // end of if(A != 0 else { cout << "A is ZERO. Re-Run."<< endl; } return 0; }
4.1 Control Structures Programs must often anticipate a variety of situations. Consider an Automated Teller Machine: Requests: ATMs must serve valid bank customers. ATMs must also reject invalid PINs. The program (code that controls an ATM must permit these different requests. Software developers must implement code that anticipates all possible transactions.
Boolean Variables Data type: bool Predefined (with C++ compiler) bool leapYear; leapYear = true; // Non zero return value leapYear = false; // Zero return value
Boolean Expressions Examples (Write T for True, or F for False): int n1 = 55; int n2 = 75; n1 < n2 // _____ n1 > n2 // _____ (n1 + 35) > n2 // _____ (n1-n2) < 0.1 // _____ n1 == n2 // _____
Logical Expressions Logical expressions often use these relational operators:
Logical Operators Logical operator (&& means AND) used in an if...else statement: ( (tryIt >= 0)&&(tryIt <= 100) ) Logical operator (| | means OR) used in an if...else statement: ( (tryIt >= 0)| |(tryIt <= 100) )
Using && Assume tryIt = 90; Is tryIt within the range of 0 and 100 ? ( (tryIt >= 0) && (tryIt <= 100) ) ( ( 90 >= 0) && ( 90 <= 100) ) ( 1 && 1 ) 1
Using && Assume tryIt = 99; Is tryIt outside the range of 0 and 100 ? ( (tryIt < 0) ¦¦ (tryIt > 100) ) ( ( 99 < 0) ¦¦ ( 99 > 100) ) ( 0 ¦¦ 0 ) 0
Truth Tables for Boolean Operators Truth tables for logical operators !, ¦¦, && 1 is a symbol for true 0 is a symbol for false
Precedence of Operators Precedence: most operators are evaluated (grouped) in a left-to-right order: a / b / c / d is equivalent to (((a/b)/c)/d) Assignment operators group in a right-to-left order so the expression x = y = z = 0.0 is equivalent to (x=(y=(z=0.0)))
Boolean Assignment bool same; // declaration same = true; //assignment Form: variable = expression; Example: same = (x = = y);
4.3 Introduction to the if Dependent Control Statement The if is the first statement that alters strict sequential control. General form if (logical-expression) true-part; logical-expression: any expression that evaluates to nonzero (true) or zero (false). In C++, almost everything is true or false.
if Control Statementswith Two Alternatives The logical expression is evaluated. When true, the true-part is executed and the false-part is disregarded. When the logical expression is false, the false-part executes. General Form if (logical-expression) true-part; else false-part;
What happens when an if statement executes? After the logical expression of the if statement evaluates, the true-part executes only if the logical expression was true. False gross >100.0 True net=gross net=gross-tax
Programming Tip Using = for == is a common mistake. For example the following statements are legal: int x = 25; Because assignment statements evaluate to the expression on the right of = x = 1 is always1, which is nonzero, that is true: if (x = 1) // should be (x == 1)
4.4 if Statements with Compound Alternatives General form (also known as a block): { statement-1 ; statement-2 ; ... statement-N ; } The compound statement groups together many statements that are treated as one.
Writing Compound Statements if (transactionType == 'c') { // process check cout << "Check for $" << transactionAmount << endl; balance = balance - transactionAmount; } else { // process deposit cout << "Deposit of $" << transactionAmount << endl; balance = balance + transactionAmount; }
4.5 Decision Steps in Algorithms Algorithm steps that select from a choice of actions are called decision steps The algorithm in the following case contains decisions steps to compute an employee’s gross and net pay after deductions The decision steps are coded as if statements
Decision Steps in AlgorithmsPayroll Case Study -Statement Your company pays its hourly workers once a week An employee’s pay is based upon the number of hours worked (to the nearest half hour) and the employee’s hourly pay rate Weekly hours exceeding 40 are paid at a rate of time and a half Employees who earn over $100 a week must pay union dues of $15 per week Write a payroll program that will determine the gross pay and net pay for an employee
Decision Steps in AlgorithmsPayroll Case Study -Analysis The problem data include the input data for hours worked and hourly pay and two required outputs, gross pay and net pay There are also several constants: the union dues ($15), the minimum weekly earnings before dues must be paid ($100), the maximum hours before overtime must be paid (40), and the overtime rate (1.5 times the usual hourly rate) With this information, we can begin to write the data requirements for this problem We can model all data using the money (see Section 3.7) and float data types
Decision Steps in AlgorithmsPayroll Case Study -Program Design The problem solution requires that the program read the hours worked and the hourly rate before performing any computations After reading these data, we need to compute and then display the gross pay and net pay The structure chart for this problem (Fig. 4.6) shows the decomposition of the original problem into five subproblems We will write three of the subproblems as functions. For these three subproblems, the corresponding function name appears under its box in the structure chart
Decision Steps in AlgorithmsPayroll Case Study Display user instructions (function instructUser) Enter hours worked and hourly rate Compute gross pay (function computeGross) Compute net pay (function computeNet) Display gross pay and net pay
money.h: example void computeGross (float hours, float rate) { if (hours > MAX_NO_OVERTIME) { regularPay = ....; overtimePay = ....; gross = regularPay + overtimePay; // add } else gross = hours * rate; //multiply cout << gross; // use the << op. }
PayrollFunctions.cpp // File: payrollFunctions.cpp // Computes and displays gross pay and net pay // given an hourly rate and number of hours // worked. Deducts union dues of $15 if gross // salary exceeds $100; otherwise, deducts no // dues. #include <iostream> using namespace std;
PayrollFunctions.cpp // Functions used ... void instructUser(); float computeGross(float, float); float computeNet(float); const float MAX_NO_DUES = 100.00; const float dues = 15.00; const float MAX_NO_OVERTIME = 40.0; const float OVERTIME_RATE = 1.5;
PayrollFunctions.cpp int main () { float hours; float rate; float gross; float net; // Display user instructions. instructUser();
PayrollFunctions.cpp // Enter hours and rate. cout << "Hours worked: "; cin >> hours; cout << "Hourly rate: "; cin >> rate; // Compute gross salary. gross = computeGross(hours, rate); // Compute net salary. net = computeNet(gross);
PayrollFunctions.cpp // Print gross and net. cout << "Gross salary is " << gross << endl; cout << "Net salary is " << net << endl; return 0; }
PayrollFunctions.cpp // Displays user instructions void instructUser() { cout << "This program computes gross and net salary." << endl; cout << "A dues amount of " << dues << " is deducted for" << endl; cout << "an employee who earns more than " << MAX_NO_DUES << endl << endl; cout << "Overtime is paid at the rate of " << OVERTIME_RATE << endl;
PayrollFunctions.cpp cout << "times the regular rate for hours worked over " << MAX_NO_OVERTIME << endl << endl; cout << "Enter hours worked and hourly rate" << endl; cout << "on separate lines after the prompts. " << endl; cout << "Press <return> after typing each number." << endl << endl; } // end instructUser
PayrollFunctions.cpp // FIND THE GROSS PAY float computeGross (float hours, float rate) { // Local data ... float gross; float regularPay; float overtimePay; // Compute gross pay. if (hours > MAX_NO_OVERTIME) { regularPay = MAX_NO_OVERTIME * rate;
PayrollFunctions.cpp overtimePay = (hours - MAX_NO_OVERTIME) * OVERTIME_RATE * rate; gross = regularPay + overtimePay; } else gross = hours * rate; return gross; } // end computeGross
PayrollFunctions.cpp // Find the net pay float computeNet (float gross) { float net; // Compute net pay. if (gross > MAX_NO_DUES) net = gross - dues; else net = gross; return net; } // end computeNet
Payroll.cpp Program output This program computes gross and net salary. A dues amount of $15.00 is deducted for an employee who earns more than $100.00 Overtime is paid at the rate of 1.5 times the regular rate on hours worked over 40 Enter hours worked and hourly rate on separate lines after the prompts. Press <return> after typing each number.
Payroll.cpp Program output Hours worked: 50 Hourly rate: 6 Gross salary is $330.00 Net salary is $315.00
4.6 Checking the Correctness of an Algorithm Verifying the correctness of an algorithm is a critical step in algorithm design and often saves hours of coding and testing time. We will now trace the execution of the refined algorithm for the payroll problem solved in the last section.
Checking the Correctness of an Algorithm 1. Display user instructions. 2. Enter hours worked and hourly rate. 3. Compute gross pay. 3.1. If the hours worked exceed 40.0 (max hours before overtime) 3.1.1. Compute regularPay. 3.1.2. Compute overtimePay. 3.1.3. Add regularPay to overtimePay to get gross. else
Checking the Correctness of an Algorithm 3.1.4. Compute gross as hours * rate. 4. Compute net pay. 4.1. If gross is larger than $100.00 4.1.1. Deduct the dues of $15.00 from gross pay. else 4.1.2. Deduct no dues. 5. Display gross and net pay.
4.7 Nested if Statements and Multiple Alternative Decisions Nested logic is one control structure containing another similar control structure. An if...else inside another if...else. e.g. (the 2nd if is placed on the same line as the 1st):
Example of nested logic if(x > 0) numPos = numPos + 1; else if(x < 0) numNeg = NumNeg + 1; else numZero = numZero + 1;
Example of nested logic X numPos numNeg numZero 3.0 _______ _______ _______ -3.6 _______ _______ _______ 4.0 _______ _______ _______ Assume all variables initialized to 0
Writing a Nested if as a Multiple-Alternative Decision Nested if statements can become quite complex. If there are more than three alternatives and indentation is not consistent, it may be difficult to determine the logical structure of the if statement.
Function displayGrade void displayGrade ( int score) { if (score >= 90) cout << "Grade is A " << endl; else if (score >= 80) cout << "Grade is B " << endl; else if (score >= 70) cout << "Grade is C " << endl; else if (score >= 60) cout << "Grade is D " << endl; else cout << "Grade is F " << endl; }
Order of Conditions if (score >= 60) cout << "Grade is D " << endl; else if (score >= 70) cout << "Grade is C " << endl; else if (score >= 80) cout << "Grade is B " << endl; else if (score >= 90) cout << "Grade is A " << endl; else cout << "Grade is F " << endl;
Short Circuit Evaluation (single == ‘y’ && gender == ‘m’ && age >= 18) If single is false, gender and age are not evaluated (single == ‘y’ || gender == ‘m’ || age >= 18) If single is true, gender and age are not evaluated
4.8 The switch Control Statement switch ( switch-expression ) { casevalue-1: statement(s)-1 break ; ... // many cases are allowed casevalue-n: statement(s)-n break ; default : default-statement(s) }