7-1 computing fundamentals with c++ object-oriented programming and design, 2nd edition rick mercer...

51
7-1 Computing Fundamentals Computing Fundamentals with C++ with C++ Object-Oriented Programming and Design, Object-Oriented Programming and Design, 2nd Edition 2nd Edition Rick Mercer Rick Mercer Franklin, Beedle & Associates, 1999 Franklin, Beedle & Associates, 1999 ISBN 1-887902-36-8 ISBN 1-887902-36-8 Presentation Copyright 1999, Franklin, Beedle & Associates Presentation Copyright 1999, Franklin, Beedle & Associates Students who purchase and instructors who adopt Students who purchase and instructors who adopt Computing Computing Fundamentals with C++, Object-Oriented Programming and Design Fundamentals with C++, Object-Oriented Programming and Design by Rick Mercer by Rick Mercer are welcome to use this presentation as long as this copyright are welcome to use this presentation as long as this copyright notice remains intact. notice remains intact.

Upload: darleen-floyd

Post on 03-Jan-2016

218 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: 7-1 Computing Fundamentals with C++ Object-Oriented Programming and Design, 2nd Edition Rick Mercer Franklin, Beedle & Associates, 1999 ISBN 1-887902-36-8

7-1

Computing Fundamentals with C++Computing Fundamentals with C++Object-Oriented Programming and Design, 2nd EditionObject-Oriented Programming and Design, 2nd Edition

Rick MercerRick Mercer

Franklin, Beedle & Associates, 1999Franklin, Beedle & Associates, 1999

ISBN 1-887902-36-8ISBN 1-887902-36-8

Presentation Copyright 1999, Franklin, Beedle & Associates Presentation Copyright 1999, Franklin, Beedle & Associates Students who purchase and instructors who adopt Students who purchase and instructors who adopt Computing Fundamentals with C++, Computing Fundamentals with C++, Object-Oriented Programming and Design Object-Oriented Programming and Design by Rick Mercer are welcome to use this by Rick Mercer are welcome to use this

presentation as long as this copyright notice remains intact.presentation as long as this copyright notice remains intact.

Page 2: 7-1 Computing Fundamentals with C++ Object-Oriented Programming and Design, 2nd Edition Rick Mercer Franklin, Beedle & Associates, 1999 ISBN 1-887902-36-8

7-2Chapter 7Chapter 7SelectionsSelections

In this chapter we study algorithmic patterns In this chapter we study algorithmic patterns that allow alternatives to straight sequential that allow alternatives to straight sequential processing. In particular:processing. In particular:

Guarded ActionGuarded Action execute an action only under certain conditionsexecute an action only under certain conditions

Alternative ActionAlternative Action choose one action or anotherchoose one action or another

Multiple SelectionMultiple Selection choose from more than two sets of actionschoose from more than two sets of actions

Page 3: 7-1 Computing Fundamentals with C++ Object-Oriented Programming and Design, 2nd Edition Rick Mercer Franklin, Beedle & Associates, 1999 ISBN 1-887902-36-8

7-3 Chapter Objectives: Part IChapter Objectives: Part I

Recognize when to use Guarded ActionRecognize when to use Guarded Action Implement Guarded Action pattern with Implement Guarded Action pattern with ifif Use relational (<) and equality (==) operatorsUse relational (<) and equality (==) operators Create and evaluate expressions with logical Create and evaluate expressions with logical

operators notoperators not ! ! , and , and &&&& , or , or |||| Use Use boolbool Understand the Alternative Action PatternUnderstand the Alternative Action Pattern Implement Alternative Action with if…elseImplement Alternative Action with if…else

– ExercisesExercises

– Programming ProjectsProgramming Projects

Page 4: 7-1 Computing Fundamentals with C++ Object-Oriented Programming and Design, 2nd Edition Rick Mercer Franklin, Beedle & Associates, 1999 ISBN 1-887902-36-8

7-4 Chapter Objectives: Part IIChapter Objectives: Part II

Choose one action from many (more than 2) Choose one action from many (more than 2) using the if…else and switch statementsusing the if…else and switch statements

Solve problems using multiple selectionSolve problems using multiple selection ExercisesExercises Programming ProjectsProgramming Projects

Note: There are two sets of exercises and programming Note: There are two sets of exercises and programming projectsprojects

Page 5: 7-1 Computing Fundamentals with C++ Object-Oriented Programming and Design, 2nd Edition Rick Mercer Franklin, Beedle & Associates, 1999 ISBN 1-887902-36-8

7-5 Why do we need selection?Why do we need selection?

Programs must often anticipate a variety of Programs must often anticipate a variety of situationssituations

Consider an Automated Teller Machine:Consider an Automated Teller Machine: ATMs must serve valid bank customers. They ATMs must serve valid bank customers. They

must also reject invalid PINs. must also reject invalid PINs. The code that controls an ATM must permit these The code that controls an ATM must permit these

different requests. different requests. Software developers must implement code that Software developers must implement code that

anticipates all possible transactions. anticipates all possible transactions.

Page 6: 7-1 Computing Fundamentals with C++ Object-Oriented Programming and Design, 2nd Edition Rick Mercer Franklin, Beedle & Associates, 1999 ISBN 1-887902-36-8

7-6 7.1 Selective Control7.1 Selective Control

Programs often contain statements that may Programs often contain statements that may not always executenot always execute

Sometimes a statement may execute and other Sometimes a statement may execute and other certain conditions it may notcertain conditions it may not

Reject invalid PIN entries at an ATMReject invalid PIN entries at an ATM

We say an action is guarded from executingWe say an action is guarded from executing

Page 7: 7-1 Computing Fundamentals with C++ Object-Oriented Programming and Design, 2nd Edition Rick Mercer Franklin, Beedle & Associates, 1999 ISBN 1-887902-36-8

7-7 7.1.1 The Guarded Action Pattern7.1.1 The Guarded Action Pattern

Pattern: Guarded Action

Problem: Execute an action only under certain conditions

General if( logical-expression )

Form: true-part

Code if(aStudent.GPA() >= 3.5)Example: deansList.push_back(aStudent);

Page 8: 7-1 Computing Fundamentals with C++ Object-Oriented Programming and Design, 2nd Edition Rick Mercer Franklin, Beedle & Associates, 1999 ISBN 1-887902-36-8

7-8 7.1.2 The if statement7.1.2 The if statement

The The ifif is the first statement that alters strict is the first statement that alters strict sequential control. General form of the if:sequential control. General form of the if:

if (if ( logical-expressionlogical-expression )) true-parttrue-part ;;

logical-expressionlogical-expression: any expression that evaluates : any expression that evaluates to nonzero (true) or zero (false)to nonzero (true) or zero (false)

In C++, almost everything is true or falseIn C++, almost everything is true or false

Page 9: 7-1 Computing Fundamentals with C++ Object-Oriented Programming and Design, 2nd Edition Rick Mercer Franklin, Beedle & Associates, 1999 ISBN 1-887902-36-8

7-9What happens when an if What happens when an if statement executes?statement executes?

After the logical expression of the if statement After the logical expression of the if statement evaluates, the true-part executes only if the logical evaluates, the true-part executes only if the logical expression is true.expression is true.

logicalexpression

False

statement -1

statement-n

TruePart

Page 10: 7-1 Computing Fundamentals with C++ Object-Oriented Programming and Design, 2nd Edition Rick Mercer Franklin, Beedle & Associates, 1999 ISBN 1-887902-36-8

7-10 Example if statementExample if statement

double hours = 38.0;double hours = 38.0; // Add 1.5 hours for hours over 40.0 (overtime)// Add 1.5 hours for hours over 40.0 (overtime) if(hours > 40.0)if(hours > 40.0) hours = 40.0 + 1.5 * (hours - 40.0); hours = 40.0 + 1.5 * (hours - 40.0);

Write last value of hours when it starts as:Write last value of hours when it starts as: double hours = 38.0; ____________double hours = 38.0; ____________

double hours = 40.0; ____________double hours = 40.0; ____________

double hours = 42.0; ____________double hours = 42.0; ____________

Optional Demo Optional Demo awards.cppawards.cpp demontrates the variety of program demontrates the variety of program execution when the if statement is usedexecution when the if statement is used

Page 11: 7-1 Computing Fundamentals with C++ Object-Oriented Programming and Design, 2nd Edition Rick Mercer Franklin, Beedle & Associates, 1999 ISBN 1-887902-36-8

7-11 Another wayAnother way

The if statement could also be written with a The if statement could also be written with a block as the true part: block as the true part: here it is not necessary here it is not necessary

if(hours > 40.0)if(hours > 40.0) {{ hours = 40.0 + 1.5 * (hours - 40.0); hours = 40.0 + 1.5 * (hours - 40.0); }}

Sometimes the block is required Sometimes the block is required consider using consider using { }{ }

if(hours > 40.0)if(hours > 40.0) {{ regularHours = 40.0;regularHours = 40.0; overtimeHours = hours - 40.0;overtimeHours = hours - 40.0; }}

Page 12: 7-1 Computing Fundamentals with C++ Object-Oriented Programming and Design, 2nd Edition Rick Mercer Franklin, Beedle & Associates, 1999 ISBN 1-887902-36-8

7-127.2 Logical expressions with 7.2 Logical expressions with Relational Operators Relational Operators

Logical expressions often use these relational Logical expressions often use these relational operators:operators:

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

Page 13: 7-1 Computing Fundamentals with C++ Object-Oriented Programming and Design, 2nd Edition Rick Mercer Franklin, Beedle & Associates, 1999 ISBN 1-887902-36-8

7-13 Logical ExpressionsLogical Expressions

Examples (Write T for True, or F for False):Examples (Write T for True, or F for False): int n1 = 78;int n1 = 78;

int n2 = 80;int n2 = 80;

n1 < n2 n1 < n2 // _____// _____

n1 >= n2 n1 >= n2 // _____// _____

(n1 + 35) > n2 (n1 + 35) > n2 // _____// _____

fabs(n1-n2) <= 0.00001fabs(n1-n2) <= 0.00001 // _____// _____

n1 == n2 n1 == n2 // _____// _____

n1 != n2 n1 != n2 // _____// _____

Page 14: 7-1 Computing Fundamentals with C++ Object-Oriented Programming and Design, 2nd Edition Rick Mercer Franklin, Beedle & Associates, 1999 ISBN 1-887902-36-8

7-14More Logical Expressions More Logical Expressions (with strings this time)(with strings this time)

Examples (Write T for True, or F for False):Examples (Write T for True, or F for False): string s1 = "Pierre";string s1 = "Pierre";

string s2 = "Winder";string s2 = "Winder";

s1 < s2 s1 < s2 // _____// _____

s1 > s2 s1 > s2 // _____// _____

s1 == s2 s1 == s2 // _____// _____

s1 != s2 s1 != s2 // _____// _____

s1 > "Pierrey" s1 > "Pierrey" // _____// _____

s2 < "Windy" s2 < "Windy" // _____// _____

Page 15: 7-1 Computing Fundamentals with C++ Object-Oriented Programming and Design, 2nd Edition Rick Mercer Franklin, Beedle & Associates, 1999 ISBN 1-887902-36-8

7-15Using relational operators in if Using relational operators in if statementsstatements

double x = 59.0;double x = 59.0; if(x >= 60.0) if(x >= 60.0) {{ cout << "passing";cout << "passing"; }} if(x < 60.0) if(x < 60.0) {{ cout << "below 60.0";cout << "below 60.0"; }}

double x = 59.0; double x = 59.0; ? __________________________ ?? __________________________ ?

double x = 60.0; double x = 60.0; ? __________________________ ?? __________________________ ?

double x = 61.0; double x = 61.0; ? __________________________ ?? __________________________ ?

Page 16: 7-1 Computing Fundamentals with C++ Object-Oriented Programming and Design, 2nd Edition Rick Mercer Franklin, Beedle & Associates, 1999 ISBN 1-887902-36-8

7-16 Programming Tip: Programming Tip:

Using = for == is a common mistake. For example Using = for == is a common mistake. For example the following two statements are legal, but ...the following two statements are legal, but ...

int x = 25;int x = 25; // Because assignment statements evaluate to the// Because assignment statements evaluate to the // expression on the right of =, x = 1 is always// expression on the right of =, x = 1 is always // 1, which is nonzero, which is true:// 1, which is nonzero, which is true: if(x = 1) if(x = 1) // should be (x == 1)// should be (x == 1) cout << "I'm always displayed";cout << "I'm always displayed";

So consider putting the constant firstSo consider putting the constant first if(1 = x) if(1 = x) // this is an obvious compiletime error// this is an obvious compiletime error

Page 17: 7-1 Computing Fundamentals with C++ Object-Oriented Programming and Design, 2nd Edition Rick Mercer Franklin, Beedle & Associates, 1999 ISBN 1-887902-36-8

7-177.3 The Alternative Action 7.3 The Alternative Action PatternPattern

Programs often contain statements that select Programs often contain statements that select between one set of actions or anotherbetween one set of actions or another

ExamplesExamples withdraw or deposit moneywithdraw or deposit money pass or fail the entrance requirementspass or fail the entrance requirements

This is the Alternative Action PatternThis is the Alternative Action Pattern choose between two alternate sets of actions choose between two alternate sets of actions

Page 18: 7-1 Computing Fundamentals with C++ Object-Oriented Programming and Design, 2nd Edition Rick Mercer Franklin, Beedle & Associates, 1999 ISBN 1-887902-36-8

7-18 Alternative ActionAlternative Action

Pattern: Alternative Action

Problem: Must choose one action from two alternatives

Outline: if (true-or-false-condition is true) action-1else action-2

Code if(finalGrade >= 60.0)if(finalGrade >= 60.0) cout << "passing" << endl;cout << "passing" << endl; elseelse cout << "failing" << endl;cout << "failing" << endl;

Page 19: 7-1 Computing Fundamentals with C++ Object-Oriented Programming and Design, 2nd Edition Rick Mercer Franklin, Beedle & Associates, 1999 ISBN 1-887902-36-8

7-19 if-else General Formif-else General Form

if ( if ( logical-expressionlogical-expression ) ) true-parttrue-part ;; elseelse false-partfalse-part ;;

When the logical expression evaluates to true, the When the logical expression evaluates to true, the true-part executes and the false-part is disregarded. true-part executes and the false-part is disregarded. When the logical expression is false, only the false-When the logical expression is false, only the false-part executes.part executes.

Page 20: 7-1 Computing Fundamentals with C++ Object-Oriented Programming and Design, 2nd Edition Rick Mercer Franklin, Beedle & Associates, 1999 ISBN 1-887902-36-8

7-20 7.3.1 The if...else statement7.3.1 The if...else statement

The if...else statement allows two alternate The if...else statement allows two alternate courses of action. courses of action.

logicalexpressio

n

False

statement-1

statement-n

statement-1

statement-n

True

FalsePart

TruePart

Page 21: 7-1 Computing Fundamentals with C++ Object-Oriented Programming and Design, 2nd Edition Rick Mercer Franklin, Beedle & Associates, 1999 ISBN 1-887902-36-8

7-21 if...else Example if...else Example

if(miles > 24000)if(miles > 24000) cout << "Tune-up " << miles-24000 << " miles overdue";cout << "Tune-up " << miles-24000 << " miles overdue";elseelse cout << "Tune-up due in " << 24000-miles << " miles";cout << "Tune-up due in " << 24000-miles << " miles";

MilesMiles OutputOutput

3012330123 ________________________________________________________

20002000 ________________________________________________________

2400024000 ________________________________________________________

Demonstrate the variety of program execution for the three values shown above Demonstrate the variety of program execution for the three values shown above

tuneup.cpptuneup.cpp

Page 22: 7-1 Computing Fundamentals with C++ Object-Oriented Programming and Design, 2nd Edition Rick Mercer Franklin, Beedle & Associates, 1999 ISBN 1-887902-36-8

7-227.4 The Block with Selection 7.4 The Block with Selection Structures Structures { }{ }

Again, the blocks may be used even when Again, the blocks may be used even when unecessary unecessary and again, consider always using themand again, consider always using them

if(miles > 24000)if(miles > 24000) {{ cout<< "Tune-up " << miles-24000 << " miles overdue";cout<< "Tune-up " << miles-24000 << " miles overdue"; }} elseelse {{ cout<< "Tune-up due in " << 24000-miles << " miles";cout<< "Tune-up due in " << 24000-miles << " miles"; }}

Using curly braces all the time helps avoid Using curly braces all the time helps avoid difficult to detect errorsdifficult to detect errors

Page 23: 7-1 Computing Fundamentals with C++ Object-Oriented Programming and Design, 2nd Edition Rick Mercer Franklin, Beedle & Associates, 1999 ISBN 1-887902-36-8

7-23 Sometimes blocks are necessarySometimes blocks are necessary

if(GPA >= 3.5)if(GPA >= 3.5)

{ { // true-part contains more than one statement in this block// true-part contains more than one statement in this block

cout << "Congratulations, you're on the Dean's List."<< endl;cout << "Congratulations, you're on the Dean's List."<< endl;

margin = GPA - 3.5;margin = GPA - 3.5;

cout << "You made it by " << margin << " points." << endl;cout << "You made it by " << margin << " points." << endl;

}}

else else

{ { // false-part contains more than one statement in this block// false-part contains more than one statement in this block

cout << "Sorry, you are not on the Dean's List." << endl;cout << "Sorry, you are not on the Dean's List." << endl;

margin = 3.5 - GPA;margin = 3.5 - GPA;

cout << "You missed it by " << margin << " points." << endl;cout << "You missed it by " << margin << " points." << endl;

}}

totalMargin = totalMargin + margin;totalMargin = totalMargin + margin;

Page 24: 7-1 Computing Fundamentals with C++ Object-Oriented Programming and Design, 2nd Edition Rick Mercer Franklin, Beedle & Associates, 1999 ISBN 1-887902-36-8

7-247.4.1 the trouble in Forgetting 7.4.1 the trouble in Forgetting { }{ }

Failing to use { and }Failing to use { and } if(GPA >= 3.5) if(GPA >= 3.5) // The true-part is the first cout only// The true-part is the first cout only cout <<"Congrats, you're on the Dean's List. ";cout <<"Congrats, you're on the Dean's List. "; margin = GPA - 3.5;margin = GPA - 3.5; cout <<"You made it by " << margin << " points.";cout <<"You made it by " << margin << " points.";

else else <<<< Error >>>><<<< Error >>>>

Page 25: 7-1 Computing Fundamentals with C++ Object-Oriented Programming and Design, 2nd Edition Rick Mercer Franklin, Beedle & Associates, 1999 ISBN 1-887902-36-8

7-257.4.1 the trouble in Forgetting 7.4.1 the trouble in Forgetting { }{ }

There are no compiletime errors next, but there is There are no compiletime errors next, but there is an intent error. an intent error.

elseelse cout << "Sorry, you're not on the Dean's List." << endl;cout << "Sorry, you're not on the Dean's List." << endl; margin = 3.5 - GPAmargin = 3.5 - GPA ;; cout << "You missed it by " << margin << " points.";cout << "You missed it by " << margin << " points.";

With the above false part, you could get this With the above false part, you could get this confusing output (when GPA = 3.9):confusing output (when GPA = 3.9):

Congrats, you're on the Dean's list.Congrats, you're on the Dean's list. You made it by 0.4 points.You made it by 0.4 points. You missed it by -0.4 points.You missed it by -0.4 points.

Page 26: 7-1 Computing Fundamentals with C++ Object-Oriented Programming and Design, 2nd Edition Rick Mercer Franklin, Beedle & Associates, 1999 ISBN 1-887902-36-8

7-26 7.5 bool Objects7.5 bool Objects

The standardThe standard bool bool class stores one of two class stores one of two valuesvalues

true true and and falsefalse

A A boolbool object stores the result of a logical object stores the result of a logical expression:expression:

bool ready = false;bool ready = false; double hours = 4.5;double hours = 4.5; ready = hours >= 4.0;ready = hours >= 4.0; cout << ready << endl; cout << ready << endl; // Displays 1 for true// Displays 1 for true

Page 27: 7-1 Computing Fundamentals with C++ Object-Oriented Programming and Design, 2nd Edition Rick Mercer Franklin, Beedle & Associates, 1999 ISBN 1-887902-36-8

7-27 bool Functionsbool Functions

It is common to have functions that return one It is common to have functions that return one of the bool values (true or false).of the bool values (true or false).

bool odd(int n) bool odd(int n) { { // post: return true if n is an odd integer// post: return true if n is an odd integer return (n % 2) != 0;return (n % 2) != 0;}}

// Client code// Client codeif( odd(j) )if( odd(j) ) j = j + 1; j = j + 1; // assert: j is an even integer// assert: j is an even integer

Page 28: 7-1 Computing Fundamentals with C++ Object-Oriented Programming and Design, 2nd Edition Rick Mercer Franklin, Beedle & Associates, 1999 ISBN 1-887902-36-8

7-28 7.5.1 Boolean Operators 7.5.1 Boolean Operators

A logical operator (&& means AND) used in A logical operator (&& means AND) used in an if...else statement:an if...else statement:

if( (test >= 0) && (test <= 100) )if( (test >= 0) && (test <= 100) ) cout << "Test in range";cout << "Test in range"; elseelse cout << "**Warning--Test out of range"; cout << "**Warning--Test out of range";

The code describes whether or not test is in The code describes whether or not test is in the range of 0 through 100 inclusive.the range of 0 through 100 inclusive.

Page 29: 7-1 Computing Fundamentals with C++ Object-Oriented Programming and Design, 2nd Edition Rick Mercer Franklin, Beedle & Associates, 1999 ISBN 1-887902-36-8

7-29Truth Tables for Boolean Truth Tables for Boolean OperatorsOperators

Truth tables for the Logical (Boolean) Truth tables for the Logical (Boolean) operators !, ¦¦, && operators !, ¦¦, &&

! (not) ¦¦ (or) && (and)Expression Result Expression Result Expression Result! false! true

truefalse

true ¦¦ truetrue ¦¦ falsefalse ¦¦ truefalse ¦¦ false

truetruetruefalse

true && truetrue && falsefalse && truefalse && false

truefalsefalsefalse

Page 30: 7-1 Computing Fundamentals with C++ Object-Oriented Programming and Design, 2nd Edition Rick Mercer Franklin, Beedle & Associates, 1999 ISBN 1-887902-36-8

7-30 Using && in an expressionUsing && in an expression

Assuming test == 97, Assuming test == 97, Is test within the range of 0 and 100 inclusive?Is test within the range of 0 and 100 inclusive?

( (test >= 0) && (test <= 100) ) ( (test >= 0) && (test <= 100) ) ( ( 97 >= 0) && ( 97 <= 100) ) ( ( 97 >= 0) && ( 97 <= 100) ) ( true && true )( true && true ) truetrue

Is test outside the range of 0 and 100 inclusive?Is test outside the range of 0 and 100 inclusive? ( (test < 0) ¦¦ (test > 100) ) ( (test < 0) ¦¦ (test > 100) ) ( ( 97 < 0) ¦¦ ( 97 > 100) ) ( ( 97 < 0) ¦¦ ( 97 > 100) ) ( false ¦¦ false )( false ¦¦ false ) false false

Evaluate both expressions when test == 101 ?__?Evaluate both expressions when test == 101 ?__?

Page 31: 7-1 Computing Fundamentals with C++ Object-Oriented Programming and Design, 2nd Edition Rick Mercer Franklin, Beedle & Associates, 1999 ISBN 1-887902-36-8

7-31 More Precedence RulesMore Precedence Rules

The following slide summarizes all operators used in The following slide summarizes all operators used in this textbook (we've seen 'em all)this textbook (we've seen 'em all)

Precedence: most operators are evaluated (grouped) in a Precedence: most operators are evaluated (grouped) in a left-to-right order:left-to-right order:

a / b / c / da / b / c / d is equivalent tois equivalent to (((a/b)/c)/d)(((a/b)/c)/d)

Assignment operators group in a right-to-left order so the Assignment operators group in a right-to-left order so the expression expression

x = y = z = 0.0 x = y = z = 0.0 is equivalent tois equivalent to (x=(y=(z=0.0))) (x=(y=(z=0.0)))

Also note that standard C++ has the operators:Also note that standard C++ has the operators:not and or not and or // we'll use ! && ||// we'll use ! && ||

Page 32: 7-1 Computing Fundamentals with C++ Object-Oriented Programming and Design, 2nd Edition Rick Mercer Franklin, Beedle & Associates, 1999 ISBN 1-887902-36-8

7-32 Operators used in this bookOperators used in this book

Page 33: 7-1 Computing Fundamentals with C++ Object-Oriented Programming and Design, 2nd Edition Rick Mercer Franklin, Beedle & Associates, 1999 ISBN 1-887902-36-8

7-33Applying Operators and Applying Operators and Precedence RulesPrecedence Rules

Use the precedence rules to evaluate the Use the precedence rules to evaluate the following expression:following expression:

int j = 5; int j = 5; int k = 10;int k = 10;bool TorF;bool TorF;

TorF = (j * (1 + k) > 55) ¦¦ (j + 5 <= k) && (j>k) TorF = (j * (1 + k) > 55) ¦¦ (j + 5 <= k) && (j>k)

What is assigned to What is assigned to TorFTorF_______?_______?

Page 34: 7-1 Computing Fundamentals with C++ Object-Oriented Programming and Design, 2nd Edition Rick Mercer Franklin, Beedle & Associates, 1999 ISBN 1-887902-36-8

7-347.5.3 The Boolean "or" 7.5.3 The Boolean "or" |||| with with a grid Objecta grid Object

bool moverOnEdge(const grid & g)bool moverOnEdge(const grid & g){ { // post: return true if the mover is on an edge// post: return true if the mover is on an edge // or false otherwise// or false otherwise return( g.row()==0 return( g.row()==0 // on north edge?// on north edge? || g.row()==g.nRows()-1 || g.row()==g.nRows()-1 // on south edge?// on south edge? || g.column()==0 || g.column()==0 // on west edge?// on west edge? || g.column()==g.nColumns()-1 ); || g.column()==g.nColumns()-1 ); // east?// east?}}

int main()int main(){{ grid tarpit( 5, 10, 4, 4, east );grid tarpit( 5, 10, 4, 4, east ); if( moverOnEdge(tarpit) )if( moverOnEdge(tarpit) ) cout << "On edge" << endl;cout << "On edge" << endl; elseelse cout << "Not" << endl;cout << "Not" << endl; return 0;return 0;}}

Optional Demo: onedge.cpp

Page 35: 7-1 Computing Fundamentals with C++ Object-Oriented Programming and Design, 2nd Edition Rick Mercer Franklin, Beedle & Associates, 1999 ISBN 1-887902-36-8

7-357.5.4 Short Circuit Boolean 7.5.4 Short Circuit Boolean EvaluationEvaluation

C++ logical expressions evaluate subexpressions C++ logical expressions evaluate subexpressions in a left to right orderin a left to right order

Sometimes the evaluation can stop earlySometimes the evaluation can stop early This never evaluates This never evaluates sqrtsqrt of a negative number: of a negative number:

if((x >= 0.0) && (sqrt(x) <= 2.5))if((x >= 0.0) && (sqrt(x) <= 2.5)) // ... // ...

test>100 test>100 is not evaluated whenis not evaluated when test<0 test<0 is trueis true if(test < 0 || test > 100)if(test < 0 || test > 100) // ...// ...

Page 36: 7-1 Computing Fundamentals with C++ Object-Oriented Programming and Design, 2nd Edition Rick Mercer Franklin, Beedle & Associates, 1999 ISBN 1-887902-36-8

7-36 7.6 A bool member function7.6 A bool member functionPREREQUISITE: Chapter 6PREREQUISITE: Chapter 6

Consider changing bankAccount::withdraw so it Consider changing bankAccount::withdraw so it only withdraw money if the balance is sufficient. only withdraw money if the balance is sufficient.

Also have it return true in this caseAlso have it return true in this case Have it return false when there are insufficient fundsHave it return false when there are insufficient funds

First change heading in class bankAccount First change heading in class bankAccount bool withdraw(double withdrawalAmount);bool withdraw(double withdrawalAmount); // was void// was void

Page 37: 7-1 Computing Fundamentals with C++ Object-Oriented Programming and Design, 2nd Edition Rick Mercer Franklin, Beedle & Associates, 1999 ISBN 1-887902-36-8

7-37 a bool member function a bool member function continuedcontinued

Also change implementation in baccount.cppAlso change implementation in baccount.cpp

bool bankAccount::withdraw(double withdrawalAmount)bool bankAccount::withdraw(double withdrawalAmount) {{ // post: return true if withdrawal was successful // post: return true if withdrawal was successful // or false with insufficient funds// or false with insufficient funds bool result = false;bool result = false;

if(my_balance >= withdrawalAmount)if(my_balance >= withdrawalAmount) {{ my_balance = my_balance - withdrawalAmount;my_balance = my_balance - withdrawalAmount; result = true;result = true; }} return result;return result; }}

Page 38: 7-1 Computing Fundamentals with C++ Object-Oriented Programming and Design, 2nd Edition Rick Mercer Franklin, Beedle & Associates, 1999 ISBN 1-887902-36-8

7-38 7.7 Multiple Selection7.7 Multiple Selection

Nested logic: Nested logic: one control structure contains another similar control one control structure contains another similar control

structurestructure an if...else inside another if...elsean if...else inside another if...else allows selections from 3 or more alternativesallows selections from 3 or more alternatives

We must often select one alternative from manyWe must often select one alternative from many

Page 39: 7-1 Computing Fundamentals with C++ Object-Oriented Programming and Design, 2nd Edition Rick Mercer Franklin, Beedle & Associates, 1999 ISBN 1-887902-36-8

7-39

Page 40: 7-1 Computing Fundamentals with C++ Object-Oriented Programming and Design, 2nd Edition Rick Mercer Franklin, Beedle & Associates, 1999 ISBN 1-887902-36-8

7-40 Example of Multiple Selection Example of Multiple Selection nested if...elsenested if...else

if(GPA < 3.5)if(GPA < 3.5) cout << "Try harder" << endl;cout << "Try harder" << endl; elseelse if(GPA < 4.0)if(GPA < 4.0) cout << "Dean's List" << endl;cout << "Dean's List" << endl; elseelse cout << "President's list" << endl;cout << "President's list" << endl;

GPAGPA Output:Output:

3.03.0 ____________________________________

3.63.6 ____________________________________

4.04.0 ____________________________________

The false part is another if...else

Page 41: 7-1 Computing Fundamentals with C++ Object-Oriented Programming and Design, 2nd Edition Rick Mercer Franklin, Beedle & Associates, 1999 ISBN 1-887902-36-8

7-41 Active LearningActive Learning

Given the scale below, Complete the function Given the scale below, Complete the function (next slide) with a nested if..else to display the (next slide) with a nested if..else to display the appropriate message:appropriate message:

Value of C°Value of C° OutputOutput

C >= 34 C >= 34 HotHot

20 <= C < 34 20 <= C < 34 WarmWarm

12 <= C < 20 12 <= C < 20 MildMild

0 <= C < 12 0 <= C < 12 ColdCold

C < 0C < 0 FreezingFreezing

Page 42: 7-1 Computing Fundamentals with C++ Object-Oriented Programming and Design, 2nd Edition Rick Mercer Franklin, Beedle & Associates, 1999 ISBN 1-887902-36-8

7-42

string weather(int C)string weather(int C){ { // post: return appropriate message// post: return appropriate message string result;string result; if( C >= 34 )if( C >= 34 ) result = "Hot";result = "Hot"; else if(C >= 20)else if(C >= 20) result ="Warm";result ="Warm";

return result;return result;}}

Page 43: 7-1 Computing Fundamentals with C++ Object-Oriented Programming and Design, 2nd Edition Rick Mercer Franklin, Beedle & Associates, 1999 ISBN 1-887902-36-8

7-43 7.7.2 Multiple Returns7.7.2 Multiple Returns

It's possible to have multiple return statements in It's possible to have multiple return statements in a function a function terminate when the first return executesterminate when the first return executes

string letterGrade(double percentage)string letterGrade(double percentage) { { if(percentage >= 90)if(percentage >= 90) return "A";return "A"; if(percentage >= 80) if(percentage >= 80) return "B";return "B"; if(percentage >= 70) if(percentage >= 70) return "C";return "C"; if(percentage >= 60) if(percentage >= 60) return "D";return "D"; return "F"; return "F"; // return F when percentage < 0// return F when percentage < 0 }}

Page 44: 7-1 Computing Fundamentals with C++ Object-Oriented Programming and Design, 2nd Edition Rick Mercer Franklin, Beedle & Associates, 1999 ISBN 1-887902-36-8

7-44 7.8 Testing Multiple Selection7.8 Testing Multiple Selection

It is often difficult and unnecessary to test It is often difficult and unnecessary to test every possible value every possible value imagine all those doubles 0.1, imagine all those doubles 0.1, 0.001, 0.0001,...0.001, 0.0001,...

Testing our code in "most" branches can Testing our code in "most" branches can prove dangerously inadequateprove dangerously inadequate

Each branch through the multiple selection Each branch through the multiple selection should be tested.should be tested.

Page 45: 7-1 Computing Fundamentals with C++ Object-Oriented Programming and Design, 2nd Edition Rick Mercer Franklin, Beedle & Associates, 1999 ISBN 1-887902-36-8

7-45 Perform Branch Coverage TestPerform Branch Coverage Test

To correctly perform branch coverage testing To correctly perform branch coverage testing we need to do the following: we need to do the following:

Establish a set of data that ensures all paths will Establish a set of data that ensures all paths will execute execute the statements after the logical expressionsthe statements after the logical expressions

Execute the code Execute the code call the functioncall the function with the nested logic with the nested logic for all selected data values for all selected data values

Observe that the code behaves correctly for Observe that the code behaves correctly for all all data data

compare program output with expected resultscompare program output with expected results

This is glass box testing This is glass box testing whenwhen you look at the codeyou look at the code

Page 46: 7-1 Computing Fundamentals with C++ Object-Oriented Programming and Design, 2nd Edition Rick Mercer Franklin, Beedle & Associates, 1999 ISBN 1-887902-36-8

7-46 7.8.1 Boundary Testing7.8.1 Boundary Testing

Boundary testing involves executing the code Boundary testing involves executing the code using the boundary (cutoff) valuesusing the boundary (cutoff) values

What grade would you receive with a percentage What grade would you receive with a percentage of 90 using this codeof 90 using this code

if( percentage > 90 )if( percentage > 90 ) grade = "A";grade = "A"; else if( percentage >= 80 )else if( percentage >= 80 ) grade = "B";grade = "B";

Optional DemoOptional Demo b&btest.cpp b&btest.cpp Perform branch and boundary testing with the temperature example Perform branch and boundary testing with the temperature example

Page 47: 7-1 Computing Fundamentals with C++ Object-Oriented Programming and Design, 2nd Edition Rick Mercer Franklin, Beedle & Associates, 1999 ISBN 1-887902-36-8

7-477.9 The switch Statement 7.9 The switch Statement (General form)(General form)

switch ( switch ( switch-expression switch-expression )) {{ casecase value-1value-1 ::

statement(s)-1statement(s)-1

break ;break ; ... // many cases are allowed... // many cases are allowed

casecase value-nvalue-n ::

statement(s)-nstatement(s)-n

break ;break ;

default :default : default-statement(s) default-statement(s) }}

Page 48: 7-1 Computing Fundamentals with C++ Object-Oriented Programming and Design, 2nd Edition Rick Mercer Franklin, Beedle & Associates, 1999 ISBN 1-887902-36-8

7-48 Switch controlSwitch control

When a switch statement is encountered:When a switch statement is encountered: the switch-expression is evaluated. This value is the switch-expression is evaluated. This value is

compared to each case value until switch-expression compared to each case value until switch-expression == case value. All statements after the colon : are == case value. All statements after the colon : are executed. executed.

It is important to include the break statementIt is important to include the break statement The switch expression must evaluate to one of C+The switch expression must evaluate to one of C+

+'s integral types+'s integral types int, char, or enumint, char, or enum

Page 49: 7-1 Computing Fundamentals with C++ Object-Oriented Programming and Design, 2nd Edition Rick Mercer Franklin, Beedle & Associates, 1999 ISBN 1-887902-36-8

7-49 7.9.1 char Objects7.9.1 char Objects

A char object stores 1 characterA char object stores 1 character'A' 'x' 'c' '?' ' ' '1' '.''A' 'x' 'c' '?' ' ' '1' '.'

or 1 escape sequenceor 1 escape sequence

Page 50: 7-1 Computing Fundamentals with C++ Object-Oriented Programming and Design, 2nd Edition Rick Mercer Franklin, Beedle & Associates, 1999 ISBN 1-887902-36-8

7-50 Example switch statement:Example switch statement:

char option = '?';char option = '?';cout << "Enter W)ithdraw D)eposit B)alances: ";cout << "Enter W)ithdraw D)eposit B)alances: ";cin >> option;cin >> option;switch(option) {switch(option) { case 'W':case 'W': cout << "Withdraw" << endl;cout << "Withdraw" << endl; break;break; case 'D':case 'D': cout << "Deposit" << endl;cout << "Deposit" << endl; break;break; case 'B':case 'B': cout << "Balance" << endl;cout << "Balance" << endl; break;break; default: default: cout << "Invalid" << endl;cout << "Invalid" << endl;} } // end switch// end switch

Page 51: 7-1 Computing Fundamentals with C++ Object-Oriented Programming and Design, 2nd Edition Rick Mercer Franklin, Beedle & Associates, 1999 ISBN 1-887902-36-8

7-51 Trace the previous switchTrace the previous switch

Show output when Show output when

option == '?'option == '?' ____________?____________?

option == 'W'option == 'W' ____________?____________?

option == 'B'option == 'B' ____________?____________?

option == 'A'option == 'A' ____________?____________?

option == 'Q'option == 'Q' ____________?____________?