52
Lecture 11: Control Flow. Selection (Decision) structures (cont)

Lecture 11: Control Flow. Selection (Decision) structures (cont)

Embed Size (px)

Citation preview

Lecture 11: Control Flow. Selection (Decision) structures

(cont)

2

Lecture Contents:

The switch statement Demo programs Exercises

33.

Control Structures

Three methods of processing a program– In sequence– Branching– Looping

Branch: altering the flow of program execution by making a selection or choice

Loop: altering the flow of program execution by repetition of statement(s)

44.

Flow of Execution

Reminder

Single (one-way) selection

Double (two-way) selection

6

The if statement (then version)

Syntax and flowchart fragment:

if (<expression>) <statement>;

7

The if statement (then – else version)

Syntax and flowchart fragment:

if (<expression>) <statement_1>;

else <statement_2>;

New

Multiple selection

9

Multiple selection

10

The switch statement

Syntax and flowchart fragment:

The switch statement: If you have a large decision tree and all the decisions depend on different values of the same variable (control expression) you’ll probably want to consider a switch statement instead of a series of nested if…else if…else statements or alternate sequence of if statements.

11

The switch statement Syntax&flowchart fragment in general:

switch ( <control expression> ){

case <const_express1>: <stmts1>; break;

case <const_express2>: <stmts2>; break; . . .

case <const_expressn>: <stmtsn>; break;

default: <statementsd>; break;};

Don’t forget the break statement: Without it control passes down to (or falls through) the statements for the next case which is usually not what you want

12

The switch statement

What is <constant expression> ?

It’s an expression that may be evaluated at compile time.

In other words, all operands must be with fixed, defined values during the compilation process.

See examples on next slide(s)

13

The switch statement

What is <constant expression> ?

Expression whose operands are literal values: YES

– 5 + 6 * 8

– 10 * (4 +16) – 5

– 100 % 5 + 20 / 5

14

The switch statement

What is <constant expression> ?

Expression whose operands are constant (const), i.e. named constant: YES– const int A = 15; const int B = 24;– 5 + A * 8

– 10 * (A + B) – 5

– 100 % A + 20 / B

15

The switch statement

What is <constant expression> ?

Expression whose operands are standard scalar variables: NO/YES– int a=15; int b=24;– 5 + a * 8

– 10 * (a + b) – 5

– 100 % a + 20 / b

16

The switch statement

What is <constant expression> ?

Expression whose operands are standard scalar variables: NO– int a; int b; cin >> a >> b;

– 5 + a * 8

– 10 * (a + b) – 5

– 100 % a + 20 / b

17

The switch statement

Example:

int speed;cout<<“\nEnter 33, 45 or 78:”; cin>>speed;switch(speed){case 33: cout<<”Long play album”; break;case 45: cout<<”Single selection”; break;case 78: cout<<”Obsolete format”; break;default: cout<<”Wrong value entered”;}; Reminder: Don’t forget the break statement: Without it control passes down to (or falls through)

the statements for the next case which is usually not what you want

18

More on switch statement

Extract from Friedman/Koffman 4e

chapter 4

Selection Structures: if and switch Statements

Chapter 4

20

Selection Statements

– In this chapter we study statements that allow alternatives to straight sequential processing. 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: ||)• Bit-wise boolean operators (and: & or: |)

21

Logical Expressions

– Logical expressions often use these relational operators:

> Greater than< Less than>= Greater than or equal<= Less than or equal== Equal!= Not equal

22

Truth Tables for Boolean Operators

Truth tables Logical operators !, ¦¦, &&– 1 is a symbol for true– 0 is a symbol for false

Operation Result Operation Result Operation Result! 0! 1

10

1 ¦¦ 11 ¦¦ 00 ¦¦ 10 ¦¦ 0

1110

1 && 11 && 00 && 10 && 0

1000

23

Operator Description GroupingHighest ::

()Scope resolutionFunction call

Left to right

Unary !, +, - Not, unary plus/minus Right to left

Multiplicative * / % Multipy/divide/remainder Left to right

Additive + - Binary plus, minus Left to right

Input/Output >> << Extraction / insertion Left to right

Relational < ><= >=

Less/Greater thanLess/Greater or equal

Left to right

Equality == != Equal, Not equal Left to right

and && Logical and Left to right

or ¦¦ Logical or Left to right

Assignment = Assign expression Right to left

Precedence of Operators

24

4.8 The switch Control Statement

switch ( switch-expression ) { case value-1 : statement(s)-1 break ;

. . . // many cases are allowed case value-n : statement(s)-n break ; default : default-statement(s) }

25

Switch Control

– When a switch statement is encountered, the switch-expression is evaluated. This value is compared to each case value until switch-expression == case value. All statements after the colon : are executed

– It is important to include the break statement

26

Example switch Statement:

switch(watts) // Assume char option = '?’{

case 25: cout << " Life expectancy is 2500 hours. " << endl; break; case 40: case 60: cout << " Life expectancy is 1000 hours. " << endl; break;case 75:case 100:

cout << " Life expectancy is 750 hours. " << endl; break;default: cout << "Invalid Bulb !!" << endl;

}; // end switch

27

Trace the previous switch

– Show output when

• watts = '?' ____________?

• watts = 40 ____________?

• watts = 10 ____________?

• watts = 200____________?

• watts = 100____________?

28

Before lecture end

Lecture:

Control Flow. Selection (decision) structures

More to read:

Friedman/Koffman, Chapter 04

Copyright © 2007 Pearson Education, Inc. Publishing as Pearson Addison-Wesley

Chapter 4: Selection Structures: if and switch Statements

Problem Solving,

Abstraction, and Design using C++ 5e

by Frank L. Friedman and Elliot B. Koffman

30Copyright © 2007 Pearson Education, Inc. Publishing as Pearson Addison-Wesley

4.8 The switch Control Statementswitch ( switch-expression ) { case label1: statements1;

break;

case label2: statements2;

break;.

.

.

case labeln: statementsn;

break;

default: statementsd; // optional}

31Copyright © 2007 Pearson Education, Inc. Publishing as Pearson Addison-Wesley

Switch Control Statement

• Alternative to multiple if statements in some cases

• Most useful when switch selector is single variable or simple expression

• Switch selector must be an integral type (int, char, bool)

32Copyright © 2007 Pearson Education, Inc. Publishing as Pearson Addison-Wesley

Switch Control Statement

• Switch selector value compared to each case label. When there is an exact match, statements for that case are executed.

• If no case label matches the selector, the entire switch body is skipped unless it contains a default case label.

• break is typically used between cases to avoid fall through.

33Copyright © 2007 Pearson Education, Inc. Publishing as Pearson Addison-Wesley

Listing 4.5 switch statement to determine life expectancy of a lightbulb

34Copyright © 2007 Pearson Education, Inc. Publishing as Pearson Addison-Wesley

4.9 Common Programming Errors

• Use parentheses to clarify complex expressions

• Use logical operators only with logical expressions

• Use braces { } to group multiple statements for use in control structures

35Copyright © 2007 Pearson Education, Inc. Publishing as Pearson Addison-Wesley

Common Programming Errors

• When writing a nested if statement, use multiple-alternative form if possible– if conditions are not mutually exclusive, put the

most restrictive condition first

• Make sure switch selector and case labels are the same type.

• Provide a default case for a switch statement whenever possible.

Decision Tree

C# Programming: From Problem Analysis to Program Design 36

Figure 5-7 Bonus decision tree

Decision Tables

• Decision tables are a precise yet compact way to model complicated logic.

• Decision tables, like flowcharts and if-then-else and switch-case statements, associate conditions with actions to perform, but in many cases do so in a more elegant way.

Decision Tables

The four quadrants

Each decision corresponds to a variable, relation or predicate whose possible values are listed among the condition alternatives. Each action is a procedure or operation to perform, and the entries specify whether (or in what order) the action is to be performed for the set of condition alternatives the entry corresponds to.

Conditions Condition alternatives

Actions Action entries

Decision Tables

04/19/23

Decision Tables

Conditions Rules

Actions/Activities

Conditions Rules

C1. Qual > 10 years Y Y Y Y N N N N

C2. Gender – male Y Y N N Y Y N N

C3. Age > 50 Y N Y N Y N Y N

Actions

A1. Extra payment 900 700 800 600 0 0 0 0

04/19/23

Таблици на решение

Стих: древноперсийски епос:

Този, който не знае и не знае, че не знае,

Той е глупак, бягай от него!

Този, който не знае и знае, че не знае,

Той може да се изучи, помогни му!

Този, който знае и не знае, че знае,

Той спи, събуди го!

Този, който знае и знае, че знае,

Той е пророк(мъдрец), учи се от него!

04/19/23

Таблицы Решений

В древнем персидском стихотворении сказано:

Тот, кто не знает и не знает, что он не знает,

- глупец, избегай его.

Тот, кто не знает и знает, что он не знает,

может научиться, научи его.

Тот, кто знает и не знает, что он знает,

спит, разбуди его,

Тот, кто знает и знает, что он знает,

- пророк, учись у него.

04/19/23

Decision Tables

Version in English presented as Jewish proverb:

He who knows not and knows not he knows not,he is a fool, shun him.

He who knows not and knows he knows not,he is ignorant, teach him.

He who knows and knows not he knows,he is asleep, awaken him.

He who knows and knows he knows,he is wise, follow him.

04/19/2344

Decision Tables

Conditions Rules

C1. Man knows N N Y Y

C2. Man knows, that C1 N Y N Y

Actions

A1. SHUN HIM! X

A2. TEACH HIM X

A3. AWAKEN HIM! X

A4. FOLLOW HIM! X

Exercises

• Write a C# program that corresponds to the extra payment decision table.

46

Exercise 11.1

Build programs based on branch algorithms using the switch statement:

 To test an input integer value entered from the keyboard as a valid speed of a gramophone (obsolete record player) – 33, 45, 78;

47

Exercise 11.2

Build programs based on branch algorithms using the switch statement:

To test a character as a valid grade

‘A’ or ‘a’ - excellent

‘B’ or ‘b’ - good

‘C’ or ‘c’ - average

‘D’ or ‘d’ - poor. Student is to retake.

48

Exercise 11.3

Build programs based on branch algorithms using the switch statement:

To classify the type of a ship through its class identifier:

‘B’ or ‘b’ - Battle ship‘C’ or ‘c’ - Cruiser‘D’ or ‘d’ - Destroyer‘F’ or ‘f’ - Frigate

49

Exercise 11.4

Build programs based on branch algorithms using the switch statement:

To associate the expected brightness of a standard light bulb depending on its power (wattage);

Watts Brightness (in lumens)15 12525 21540 50060 88075 1000100 1675

50

Exercise 11.5

Build programs to test logical operators

negation

conjunction

disjunction

51

Exercise 11.6

Build programs to test the bit wise And (&) operator

Build programs to test the bit wise Or ( | ) operator

52

Thank You

For

Your Attention!