Conditionals

Download Report

Transcript Conditionals

Conditionals
 In many cases we want our program to make a
decision about whether a piece of code should be
executed or not, based on the truth of a condition.
 For this we use conditionals
 if statements
 switch statements
1
Conditionals
 Example:
IF score is higher than 50
THEN grade is PASS
ELSE grade is FAIL
In C++ this corresponds to
one statement with 3 parts:
if (score > 50) {
grade = PASS;
}
else {
grade = FAIL;
}
2
Conditionals
Part 1 : the condition.
An expression that evaluates to TRUE or FALSE
if (score > 50) {
grade = PASS;
}
else {
grade = FAIL;
}
3
Conditionals
if (score > 50) {
grade = PASS;
}
else {
grade = FAIL;
}
Part 2 : the TRUE part.
A block of statements that
are executed if the condition
evaluates to TRUE
4
Conditionals
if (score > 50) {
grade = PASS;
}
else {
grade = FAIL;
}
Part 3 : the FALSE part.
A block of statements that
are executed if the condition
evaluates to FALSE
5
Conditionals
 Sometimes, we do not need a FALSE part:
if (gas_tank_state == EMPTY) {
fill_up_tank();
}
 In that case, if the condition is FALSE, execution will
continue at the statement following the if-statement.
6
Conditionals
 If the TRUE or the FALSE part consists of only one
statement, the curly braces may be omitted.
 The following statements are equivalent:
if (score > 50) {
grade = PASS;
}
else {
grade = FAIL;
}
if (score > 50)
grade = PASS;
else
grade = FAIL;
7
Conditionals
 We often use cascading if-statements:
if (score > 90)
lettergrade = 'A';
else if (score > 75)
lettergrade = 'B';
else if (score > 60)
lettergrade = 'C';
else if (score > 50)
lettergrade = 'D';
else
lettergrade = 'F';
8
Conditionals
 Cascading if-statements may sometimes be replaced
with a switch statement:
if (lettergrade == 'A')
cout << "Very good!";
else if (lettergrade == 'B')
cout << "Good!";
else if (lettergrade == 'C')
cout << "Adequate";
else cout << "Work harder!";
switch (lettergrade) {
case 'A': cout << "Very good!";
break;
case 'B': cout << "Good!";
break;
case 'C': cout << "Adequate";
break;
default: cout << "Work harder!";
break;
}
9
Conditionals
switch (expression) {
case value1: statements;
break;
case value2 : statements;
break;
...
default : statements;
break;
}
In English:
Check the value of expression.
Is it equal to value1? If yes, execute
the statements and break out
of the switch. If no,
Is it equal to value2? etc.
If it's not equal to any of the above,
execute the default statements
and then break out of the
switch
10
Conditionals
switch (expression) {
case value1: statements;
break;
case value2 : statements;
break;
...
default : statements;
break;
}
-- expression should evaluate to
either an int or a char
-- NEVER omit break; (see next
slide for an example of
what may happen)
-- ALWAYS have a default to
cover the case when none
of the above values match
11
Conditionals
This is equivalent to:
switch (lettergrade) {
case 'A':
case 'B':
case 'C':
case 'D':
cout << "You passed!";
break;
case 'F' :
cout << "You failed!";
break;
default:
cout << "You received a "
<< lettergrade;
}
if (lettergrade == 'A'
|| lettergrade == 'B'
|| lettergrade == 'C'
|| lettergrade == 'D')
cout << "You passed!";
else if (lettergrade == 'F')
cout << "You failed!";
else
cout << "You received a "
<< lettergrade;
12
Conditionals
int x = -1;
int y;
switch ( x ) {
case -1: y = 10;
case 1 : y = 20;
default : y = 30;
}
cout << y;
This piece of code prints 30 on the screen
x is -1, so the first case applies. y is assigned
the value 10. Since there is no break statement,
execution continues to the next case and
eventually y becomes 30 which is not what
we intended.
This event is called fall-through.
13
Loops
 Loops repeat (iterate) a block of statements for a
number of times.
 A terminating condition tells a loop when to stop
iterating (e.g. terminate after 10 iterations or
terminate when the user types NO)
 Careful! If there is no terminating condition, then
your program will never finish
14
Loops
star
t
 Pre-Test Loop



check condition
if false, exit the loop
if true, execute statements,
iterate:
 check condition
 if false, exit the loop
 if true, execute
statements, iterate:

initialize condition
is(condition)true?
yes
{
block of statements;
etc.
 The block of statements may not
be executed at all (if condition is
immediately false)
 The condition must be updated
no
}
finish
15
Loops
 Pre-Test Loop
 count-driven :
 uses a "counter" to determine how many times it iterates
 Example:


every time the loop iterates, a counter variable is
incremented by one. When the counter reaches a specific
value, the condition becomes false and the loop
terminates.
event-driven :
 uses an "event" to determine how many times it iterates
 Example:

at each iteration the user is asked whether to continue. As
long as the user types "yes" the loop iterates. When the
user types "no" the condition becomes false and the loop
terminates.
16
for loops
 Pre-test, mainly count-driven
 Syntax:
 Example:
for (init; condition; update) {
statements;
}
/* Frog lifetime*/
int days;
for (days =155; days > 0; days--) {
work_all_day();
sleep_all_night();
}
die_quietly();
17
while loops
 Pre-test, mainly event-driven
 Syntax:
while (condition) {
statements;
}
 Example (event):
/* Frog Feeding */
while ( am_hungry() == TRUE && see_fly() == TRUE ) {
flick_tongue();
clamp_mouth();
swallow_fly();
}
18
while loops
 Pre-test, mainly event-driven
 Syntax:
while (condition) {
statements;
}
 Example (counter):
/* Frog lifetime*/
int days;
days = 155;
/* initialize */
while ( days > 0 ) { /* condition */
work_all_day();
sleep_all_night();
days--;
/* update */
}
die_quietly();
19
star
t
Loops
 Post-Test Loop
 execute statements
 check condition
 if false, exit the loop
 if true, iterate:
 execute statements
 check condition
 if false, exit the loop
 if true, iterate:

etc.
 The block of statements is
always executed at least once
 The condition must be updated
initialize condition
{
block of statements;
}
is(condition)true?
no
yes
finish
20
Loops
 Post-test loops
 The block of statements is ALWAYS executed at least once!

Often used for data validation (e.g. if the user types a wrong
selection, keep asking for a correct one)

A post-test loop may be count- or event-driven.
21
do-while loop
 Post-test, mainly event driven
 Syntax:
do {
statements;
} while (condition)
 Example:
/* Frog mating*/
do {
have_mate = look_for_lady_frog();
} while ( have_mate == FALSE )
22
Loops
 In some cases, we may need to break put of a loop
prematurely. To do that, we use a break statement.
 Example:
int days;
float food,fat;
...
for( days = 155; days > 0; days--) {
work_all_day();
if ( food+fat < 0.01)
break;
sleep_all_night();
}
die_quietly();
23
Loops
 In some cases, we may want to only execute part of
the body during an iteration. To do that, we use a
continue statement.
 Example:
/* Frog feeding v2.0 */
while ( am_hungry() == TRUE && see_fly() == TRUE ) {
flick_tongue();
if (!caught_fly())
continue;
clamp_mouth();
swallow_fly();
}
24
break vs. continue vs. return
 continue
 it is used in loops
 it means : skip the remaining statements in the loop body
and iterate again
 break
 it is used in loops and switch statements
 it means : skip the remaining statements in this block, break
out of the block. When used in loops, it causes the loop to
terminate
 return
 it may be used anywhere in a function.
 it means : terminate the function.
25