1 / 25

Announcements

Announcements. HW1 grades will be announced this week New (2 nd ) homework was assigned last week will be due next week March 8 th on Wednesday at 19:00 About functions and if-else statements Common Submission Mistakes In HW1, some students submitted empty/wrong files

durhamk
Télécharger la présentation

Announcements

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. Announcements • HW1 grades will be announced this week • New (2nd) homework was assigned last week • will be due next week March 8thon Wednesday at 19:00 • About functions and if-else statements • Common Submission Mistakes • In HW1, some students submitted empty/wrong files • Make sure that you send the cpp file; otherwise we cannot grade • Please submit the required files only, not the entire project folder • 7z, rar and tar format is not allowed for compression; please use zip • Do not use blanks, Turkish characters, special symbols in the filenames • Only English alphabet letters, digits and underscore are allowed • General rules about homeworks • Use of global variables (variables defined outside of functions) prohibited • No abrupt program termination in the middle of the program. • Modularity and code duplication are important • Code duplication must be avoided • Please write comments to your programs.

  2. Summary of what we learned last week • Functions – Divide and conquer • Functions with Parameters • Local variables vs Parameters • Scope

  3. Conditional Statements(if–else) Textbook Sections 4.2, 4.3, 4.4 and 4.7

  4. Conditional Statements • So far statements of our programs execute sequentially one after another. • What happens when • we want to execute a statement depending on a condition? • e.g. If it snows, announce that the schools are on vacation • e.g. If there is enough money in the bank account, give the money • we want to execute one statement when a condition holds and another statement when a condition does not hold? • e.g. If dollar is high, sell dollar. Otherwise, buy dollar. • we want to select from many statements according to one or more criteria (selection). • e.g. If dollar is high and euro is low, sell dollar and buy euro. If dollar is low and euro is high, sell euro and buy dollar. If both of them are high, sell both and buy TL. • You achieve conditional execution with if-elsestatements

  5. Syntax if (<condition>) { <statement_true_1>; ... <statement_true_N>; } else { <statement_false_1>; ... <statement_false_N>; } • If condition is TRUE then statement_true_1 … statement_true_N are executed, if condition is FALSE statement_false_1 … statement_false_N are executed. if (<condition>) { <statement_true_1>; ... <statement_true_N>; } • else and statement_false’s are optional • if condition is FALSE then nothing will be executed and execution continues with the next statement in the program • <condition> must be in parantheses ( )

  6. Another Syntax (without { }) if (<condition>) <statement_true>; else <statement_false>; if (<condition>) <statement_true>; • Can be used when there is only one statement • Not suggested (we will see why)

  7. Flow diagram of if-else test condition false true false statements true statements next statement

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

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

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

  11. Boolean type and expressions • The condition in an if statement must be a Boolean expression (named for George Boole) • Values are true or false • boolis a built-in type like int, double int degrees; boolisHot= 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 • boolean output yields 0 (for false) or 1 (true) cout << (4 < 5); • prints 1

  12. Relational Operators • Relational operators are used to compare values: • 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)

  13. Examples • Let’s look at some examples with literals to better see the boolean results. 23 >= 45 false 49.0 == 7*7 true 34-3 != 30+1 false string s1= "elma", s2= "armut", s3= "Elma"; s1 < s2false s3 < s1true • Why s3 < s2 is true? • ‘E’ has a smaller code than ‘a’ • Uppercase letters have smaller codes than lowercase letters

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

  15. Example • Range check: between 0 and 100 (includes 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 range"; • Solution 2: using logical AND and NOT operators if ( ! (num >= 0 && num <= 100) ) cout << "number is out of range"; else cout << "number is in the range"; • Solution 3: using logical OR operator if (num < 0 || num > 100) cout << "number is out of range"; else cout << "number is in the range";

  16. 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

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

  18. 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

  19. 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

  20. Nested if Example • 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 (not in the book) • First solution: if’s are after if’s • see if_after_if.cpp • Second solution: if’s are after else’s • see if_after_else.cpp • or if_after_else2.cpp

  21. Nested if-else Syntax 1 if (<condition_1>) { if (<condition_2>) { if (<condition_3>) { <statements_alltrue>; } else { <statements_true_1and2>; } } else { <statements_true_1_only>; } } else { <statements_1_false>; } if condition_1 is TRUE then check condition_2 if condition_2 is TRUE then check condition_3 if condition_3 is TRUE statements_alltrueare executed, if condition_3 is FALSE statements_true_1and2 are executed, if condition_2 is FALSE statements_true_1_only are executed, if condition_1 is FALSE statements_1_false are executed,

  22. Nested if-else Syntax 2 if (<condition_1>) { <statement_1true_1>; ... <statement_1true_N>; } else if (<condition_2>) { <statement_2true_1>; ... <statement_2true_N>; } else if (<condition_3>) { <statement_3true_1>; ... <statement_3true_N>; } ... else { <statement_allfalse_1>; ... <statement_allfalse_N>; } • if condition_1 is TRUE then statement_1true_1 … statement_1true_N are executed, • if condition_1 is FALSE then check condition_2 and if condition_2 is TRUE then statement_2true_1 … statement_2true_N are executed, • if condition_2 is FALSE then check condition_3 and if condition_3 is TRUE then Statement_3true_1 … statement_3true_N are executed, … • if condition_(N-1) is FALSE then statement_allfalse_1 … statement_allfalse_N are executed.

  23. 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 enough 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; } }

  24. 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; • What does it display for x=4? • The problem is that it displays “odd number” message for positive even numbers and zero. • Reason is that, although indentation says the reverse, else belongs to second (inner) if • else belongs to the most recent if • Solution: use braces (see next slide)

  25. 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 the first if • 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