1 / 19

Conditional Execution – Sections 4.2, 4.3 , 4.4 and 4.7

Conditional Execution – Sections 4.2, 4.3 , 4.4 and 4.7. Up to now, we have seen that instructions are executed unconditionally one after another. What if you want to execute an instruction depending on a condition? Selection: choose from among many options according to a criteria

leo-hurst
Télécharger la présentation

Conditional Execution – Sections 4.2, 4.3 , 4.4 and 4.7

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Conditional Execution – Sections 4.2, 4.3, 4.4 and 4.7 • Up to now, we have seen that instructions are executed unconditionally one after another. • What if you want to execute an instruction depending on a condition? • Selection: choose from among many options according to a criteria • E.g. If response is yes do this, else do that • E.g. • If year is a leap year, number of days is 366, else 365 • if else statements

  2. Syntax if (condition) statementtrue; else statementfalse; • If condition is TRUE then statementtrue is executed, if FALSE statementfalse is executed. • else and statementfalse are optional if (condition) statementtrue; • if condition is FALSE then nothing will be executed and execution continues with the next statement in the program

  3. More Syntax • Condition must be in brackets • What happens if you have several statements to execute? • write your statements within curly brackets • book recommends using this all the time even if you have only one statement (defensive programming) if (condition) { ... statementtrue list; ... } else { ... statementfalse list; ... } Definiton Compound block: Statements written within matching curly brackets

  4. Example (not in the book) • Write a program that inputs two integer numbers and displays the minimum one. • Two solutions • using if and else together • using only if (no else)

  5. Solution 1 – with_if_else.cpp int main () { int num1, num2, min; cout << "Enter two numbers: "; cin >> num1 >> num2; if (num1 < num2) //check if first number is smaller than the second one { min = num1; //if so minimum is the first number } else { min = num2; //otherwise minimum is the second number } cout << "minimum of these two numbers is: " << min << endl; return 0; }

  6. Solution 2 – with_if.cpp (no else) int main () { int num1, num2, min; cout << "Enter two numbers: "; cin >> num1 >> num2; min = num1; // default assignment - minimum is the first number if (num2 < min) //check if second number is smaller than the first one { min = num2; //if so update the minimum, if not do nothing } cout << "minimum of these two numbers is: " << min << endl; return 0; }

  7. Boolean type and expressions • The condition in an if statement must be a Boolean expression (named for George Boole) • Values are true and false • bool is a built-in type like int, double int degrees; bool isHot = false; cout << "enter temperature: "; cin >> degrees; if (degrees > 35) { isHot = true; } • Boolean values have numeric equivalents • false is 0, true is any nonzero value if (3*4 –8) cout << "hello"; else cout << "bye"; • prints hello on sreen • boolean output yields 0 (for false) or 1 (for true) cout << (4 < 5); • prints 1 on screen cout << (5 == 7-2+1); • prints 0on screen

  8. Relational Operators • Relational operators are used to compare values: < less than <= less than or equal > greater than >= greater than or equal == equality check != inequality check • They take two operands • operands can be literals, variables or expressions • Used for many types • numeric comparisons • string comparisons (lexicographical, i.e. alphabetical) • boolean comparisons (false is less than true)

  9. Examples • I used literals in the following numeric examples to see the results quickly. You can compare variables as well. 23 >= 45 false 49.0 == 7*7 true 34-3 != 30+1 false • Let’s see some string comparison examples string s1= "elma", s2= "armut", s3= "Elma"; s1 < s2false s3 < s2true • Why s3 < s2 is true? • ‘E’ has a smaller code than ‘a’ • Uppercase letters have smaller codes than lowercase letters

  10. Logical operators • Boolean expressions can be combined using logical operators: AND, OR, NOT • In C++ we use && || ! respectively

  11. Example • Range check: between and including 0 and 100,or not? If so, display a message saying that the number is in the range. If not, the message should say “out of the range”. • Solution 1: using logical AND operator if (num >= 0 && num <= 100) cout << "number in the range"; else cout << "number is out of the range"; • Solution 2: using logical AND and NOT operators if (!(num >= 0 && num <= 100)) cout << "number is out of the range"; else cout << "number is in the range"; • Solution 3: using logical OR operator if (num < 0 || num > 100) cout << "number is out of the range"; else cout << "number is in the range";

  12. De Morgan’s Rules (Section 4.7) • Compare solution 2 and 3 • two conditions are equivalent (!(num >= 0 && num <= 100)) (num < 0 || num > 100) • De Morgan’s Rules (assume a and b are two boolean expressions) ! (a && b) = !a || !b ! (a || b) = !a && !b • De Morgan’a Rules can be generalized to several expressions (e.g. 4 boolean expressions case) ! (a && b && c && d) = !a || !b || !c || !d ! (a || b || c || d) = !a && !b && !c && !d

  13. Operator Precedence - Revisited • Upper operator groups have precedence

  14. Operator Precedence Examples cout << num1 < year; • syntax error (very cryptic) • the problem is that << has precedence over < • does not compile as intended • Solution: cout << (num1 < year); • Advice: use parenthesized expressions in cout • What about (0 <= num <= 100) for range check? • not a syntax error • but that expression does not makea range check. It is always true. Why? • What is the value of !12+5&&32/35 ? • result is 0

  15. Nested if statements • if/else statements are inside other if/else statements • Method to select from multiple choices • Example: input a numeric grade and display messages according to its value 0 .. 50 low 51 .. 70 average 71 .. 100 good otherwise invalid grade • Several solutions exist (we’ll see three) – not in the book • first two solution: ifs are after elses • see if_after_else.cpp and if_after_else2.cpp • third solution: ifs are after ifs • see if_after_if.cpp

  16. Short-circuit Evaluation • Some subexpressions in Boolean expressions are not evaluated if the entire expression’s value is already known using the subexpression evaluated so far • Rule: Evaluate the first (leftmost) boolean subexpression. If its value is sufficient to judge about the value of the entire expression, then stop there. Otherwise continue evaluation towards right. if (count != 0 && scores/count < 60) { cout << "low average" << endl; } • In this example, if the value of count is zero, then first subexpression becomes false and the second one is not evaluated. • In this way, we avoid “division by zero” error (that would cause to crash the execution of the program) • Alternative method to avoid division by zero without using short-circuit evaluation: if (count != 0) { if (scores/count < 60) { cout << "low average warning" << endl; } }

  17. Dangling Else Problem if ( x % 2 == 0) if ( x < 0 ) cout << x << " is an even, negative number" << endl; else cout << x << "is an odd number << endl; • Do the above messages make sense? • The problem is that it displays “odd number” for positive even numbers and zero. • Reason is that, although indentation says the reverse, else belongs to second (inner) if • Solution: use braces (see next slide)

  18. Solution to Dangling Else Problem if ( x % 2 == 0) { if ( x < 0 ) cout << x << " is an even, negative number"<< endl; } else { cout << x << "is an odd number << endl; } • Now else belongs to first if

  19. if – else matching rule • Each else belongs to the nearest if for which there is no else and in the same compound block

More Related