Presentation is loading. Please wait.

Presentation is loading. Please wait.

Chapter 5: Looping Starting Out with C++ Early Objects Seventh Edition

Similar presentations


Presentation on theme: "Chapter 5: Looping Starting Out with C++ Early Objects Seventh Edition"— Presentation transcript:

1 Chapter 5: Looping Starting Out with C++ Early Objects Seventh Edition
by Tony Gaddis, Judy Walters, and Godfrey Muganda

2 Topics 5.1 The Increment and Decrement Operators 5.2 Introduction to Loops: The while Loop 5.3 Using the while loop for Input Validation 5.4 Counters 5.5 The do-while loop 5.6 The for loop 5.7 Keeping a Running Total

3 Topics (continued) 5.8 Sentinels 5.9 Using a Loop to Read Data From a File 5.10 Deciding Which Loop to Use 5.11 Nested Loops 5.12 Breaking Out of a Loop 5.13 The continue Statement 5.14 Creating Good Test Data

4 (Increment/Decrement Operators)
STOP / START HERE Chapter 5 Repetition / Loops (Increment/Decrement Operators) See pr8-09.cpp

5 A. Some New Operators Increment and Decrement
++ adds one to a variable val++; is the same as val = val + 1; -- subtracts one from a variable val--; is the same as val = val – 1; can be used in prefix mode (before) or postfix mode (after) a variable See pr5-01.cpp

6 Prefix Mode ++val and --val increment/decrement the variable, then return the new value of the variable. * int k = 3, m = 5; cout << k << “ “ << ++k << “ “ << k << endl; cout << m << “ “ << --m << “ “ << --m << endl; The new value of the variable is available from that point in the expression/statement.

7 Prefix Mode Example int x = 1, y = 1;
x = ++y; // y is incremented to 2 // Then 2 is assigned to x cout << x << " " << y; // Displays 2 2 x = --y; // y is decremented to 1 // Then 1 is assigned to x << " " << y; // Displays 1 1

8 Postfix Mode val++ and val-- return the old value of the variable, then increment or decrement the variable * int k = 3, m = 5; cout << k++ << “ “ << k << “ “ << ++k << endl; cout << m-- << “ “ << m << “ “ << --m << endl; The old value of the variable is returned … and The new value of the variable is available beyond this point in the expression/statement.

9 Postfix Mode Example x = y++; // y++ returns a 1 cout << x
int x = 1, y = 1; x = y++; // y++ returns a 1 // The 1 is assigned to x // and y is incremented to 2 cout << x << " " << y; // Displays 1 2 x = y--; // y-- returns a 2 // The 2 is assigned to x // and y is decremented to 1 << " " << y; // Displays 2 1 See pr5-02.cpp

10 Increment & Decrement Notes
These operators CHANGE the value of a variable The operand must be a variable Can be used in arithmetic expressions result = num num2; result = (num1 + num2)++; //Illegal.WHY? Can be used in relational expressions if (++num > limit) // Comparisons are if (num++ > limit) // different.

11 (based on counting / sequence)
STOP / START HERE Chapter 5 Repetition / Loops for Loop (based on counting / sequence) See pr8-09.cpp

12 B. The for Loop Loop based on counting Example: int count;
for (count = 1; count <= 10; count++) cout << count << “ “; cout << endl; Output: What about: for ( count = 5; count <= 40; count+=5 )

13 Syntax / Format { body; }
for(initialization; continuation_test; update) { body; } No ; goes here

14 for Loop Mechanics

15 for Loop Flow of Control
true statement(s) false test initialization code update code

16 for Loop Example (Tracing)
int sum = 0, num; for (num = 1; num <= 6; num++) sum += num; cout << "Sum of 1–6 is “ << sum << endl; Step - 1 2 3 4 5 6 7 num (before) ? condition T F sum 10 15 21 num (after) See pr5-09.cpp

17 for Loop Notes If contination_condition is false the first time it is evaluated, the body of the loop will not be executed The update expression can modify the control variable by any amount (commonly ++, --, +=, -=, *=, /=, %= ) The loop control variable should not be modified in the body of the loop.

18 for Loop Modifications
Can define variables in initialization code Their scope is the for loop Initialization and update code can contain more than one statement Separate statements with commas, not semicolons Example: for (int sum = 0, num = 1; num <= 10; num++) sum += num;

19 (indefinite repetition)
STOP / START HERE Chapter 5 Repetition / Loops while Loop (indefinite repetition) See pr8-09.cpp

20 The while Loop Loop: programming construct to execute certain statements repeatedly (>= 0 times) while loop format: while (condition) { loop_body statement(s); } The {} can be omitted if there is only one statement in the body of the loop

21 How the while Loop Works
while ( continuation_condition ) { loop_body } continuation_condition is evaluated if true, the body is executed, and then continuation_condition is evaluated again if false, the loop is exited

22 while Loop Flow of Control
false condition true statement(s)

23 while Loop is a Pretest Loop
while is a pretest loop (condition is evaluated before the loop executes) If the condition is initially false, the statement(s) in the body of the loop are never executed If the condition is initially true, the statement(s) in the body continue to be executed until the condition becomes false

24 while Loop Example Execution Trace int val = 5; while (val >= 0)
{ cout << val << " "; val--; } produces output: Execution Trace Step 1 2 3 4 5 6 7 val (before) -1 condition T F output val (after) See pr5-03.cpp

25 Exiting the Loop The loop must contain code to force the condition to eventually become false, so the loop can be exited Otherwise, you have an infinite loop (i.e., a loop that does not stop) Example of an infinite loop: x = 5; while (x > 0) // Infinite loop: NOTHING cout << x; // x NOT CHANGED from 5.

26 Common while Loop Errors
Don’t forget the { } : int numEntries = 1; while (numEntries <=3) cout << "Still working … "; numEntries++; // OUTSIDE loop body Don’t use = when you mean to use == while (numEntries = 3) // always true { numEntries++; }

27 (input validation; counters; accumulators)
STOP / START HERE Chapter 5 Repetition / Loops while Loop (input validation; counters; accumulators) See pr8-09.cpp

28 5.3 Using the while Loop for Input Validation
Validation: ensure input data is valid before proceeding Prompt for and read in the data. Use a while loop to test if data is valid. Enter the loop only if data is not valid. Inside the loop, display error message and prompt the user to re-enter the data. The loop will not be exited until the user enters valid data. See pr5-04.cpp

29 Input Validation: while Loop Example
//Read data first time. cout << "Enter a number (1-100) and" << " I will guess it. "; cin >> number; while (number < 1 || number > 100)//outside range { //Read data again. cout << "Number must be between 1 and 100." << " Re-enter your number. "; } // … Code to use the valid number goes here.

30 Counters Counter: variable that is incremented or decremented each time a loop repeats Can be used to control execution of the loop (loop control variable) Must be initialized before entering loop May be incremented/decremented either inside the loop or in the loop test See pr5-05.cpp

31 Accumulators Accumulator: variable that holds a partial answer
is updated by a variable amount the updating arithmetic operator can be +=, -=, *=, /=, or %= answer must be initialized outside loop May be incremented/decremented either inside the loop or in the loop test See pr5-05.cpp

32 Accumulator: Running Sum
int num, sum, count = 15; sum = 0; for (int k=1; k<=count; k++) { //Read next value and add to sum. cin >> num; sum += num; }//for cout << “SUM = “ << sum; See pr5-05.cpp

33 User Driven Loop Control
Program can be written so that user input determines loop repetition Can be used when program processes a list of items, and user knows the number of items in the list. User is prompted before loop. Their input is used to control number of repetitions

34 Example: User Controls the while Loop
int num, limit; cout << "Table of squares\n"; cout << "How high to go? "; cin >> limit; cout << “number square\n"; num = 1; while (num <= limit) { cout << setw(5) << num << setw(6) << num*num << endl; num++; } See pr5-06.cpp

35 Example: User Controls the for Loop
int num, limit; cout << "Table of squares\n"; cout << "How high to go? "; cin >> limit; cout << “number square\n"; num = 1; for (num=1; num <= limit; num++) { cout << setw(5) << num << setw(6) << num*num << endl; } See pr5-06.cpp

36 Chapter 5 Repetition / Loops do-while Loop STOP / START HERE
(repeat-then-test) See pr8-09.cpp

37 5.5 The do-while Loop do-while: a post test loop (condition is evaluated after the loop executes) Format: do { loop_body } while (condition); Notice the required ;

38 do-while Flow of Control
statement(s) condition false true See pr5-07.cpp

39 do-while Loop Notes Loop always executes at least once
Execution continues as long as condition is true; the loop is exited when condition becomes false Useful in menu-driven programs to bring user back to menu to make another choice Also used for input validation. See pr5-08.cpp

40 Input Validation using the do-while Loop
do { cout << "Enter a number (1-100) and" << " I will guess it. "; cin >> number; } while (number < 1 || number > 100); // … Code to use the valid number goes here.

41 5.7 Keeping a Running Total (for loop)
running total: accumulated sum of numbers from each repetition of loop accumulator: variable that holds a running total. int sum = 0, num = 1; // sum is the while (num <= 10) // accumulator { sum += num; num++; } cout << "Sum of numbers 1 – 10 is " << sum << endl; See pr5-10.cpp

42 5.8 Sentinels Sentinel: value in a list of values that indicates end of data Special value that cannot be confused with a valid value, e.g., -999 for a test score Used to terminate input when user may not know how many values will be entered

43 Sentinel Example int total = 0; cout << "Enter points earned " << "(or -1 to quit): "; cin >> points; while (points != -1) // -1 is the sentinel { total += points; cout << "Enter points earned: "; } See pr5-11.cpp

44 5.9 Using a Loop to Read Data From a File
A Loop can be used to read in each piece of data from a file It is not necessary to know how much data is in the file Several methods exist to test for the end of the file

45 Using read failure to Test for the End of a File
instream >> value -- returns false when not successful Example: while (datafile >> score) { sum += score; datafile >> score; } See pr5-12.cpp

46 Using the eof() Function to Test for the End of a File
instream.eof() member function returns true when the previous read encountered the end of file. Example: datafile >> score; while (!datafile.eof()) { sum += score; } See pr5-12.cpp

47 Problems Using eof() For the eof() function to work correctly using this method, there must be a whitespace (space, tab, or [Enter] ) between the last data value and the EOF marker. InBuffer: 33<ENTER><EOF> 33 is read but ! eof() Otherwise the eof() will be set when reading the final data value; this value will not be processed. when InBuffer: 33<EOF> , 33 is read but eof() true. But after the extraction, the buffer contains only whitespace (but <EOF> is not exposed, so eof() is false, and there appears to be data in InBuffer. InBuffer: <ENTER><EOF>

48 Using the >> Operation
The stream extraction operator (>>) returns a value indicating if a read is successful One way to determine end of file since the read “fails” when there is no more data Example: while (datafile >> score) sum += score; See pr5-13.cpp

49 5.10 Deciding Which Loop to Use
while: pretest loop (Not sure how many repetitions, possibly zero) do-while: post test loop (must execute body at least once, e.g., menu-driven) for: pretest loop (counter controlled loop)

50 5.11 Nested Loops A nested loop is a loop inside the body of another loop Example: for (row = 1; row <= 3; row++) { for (col = 1; col <= 3; col++) cout << row * col << endl; } outer loop inner loop See pr5-14.cpp

51 Notes on Nested Loops Inner loop goes through all its repetitions for each repetition of outer loop Inner loop repetitions complete sooner than outer loop Total number of repetitions for inner loop is product of number of repetitions of the two loops. In previous example, inner loop repeats 9 times

52 5.12 Breaking Out of a Loop Can use break to terminate execution of a loop Use sparingly if at all – makes code harder to understand When used in an inner loop, terminates that loop only and returns to the outer loop See pr5-15.cpp

53 5.13 The continue Statement
Can use continue to go to end of loop body and prepare for next repetition while and do-while loops go to test and repeat the loop if test condition is true for loop goes to update step, then tests, and repeats loop if test condition is true Use sparingly – like break, can make program logic hard to follow See pr5-16.cpp

54 5.14 Creating Good Test Data
Program should work under different conditions normal situations Extreme conditions near the limits of valid inputs invalid input Quality of test data vs quantity Data should force loops/decisions to achieve all possible outcomes File pr5-17.cpp corresponds to program 5-17 on pp in the text. See also file pr5-17B.cpp as a solution to the problems discussed in program 5-17.

55 Chapter 5: Looping Starting Out with C++ Early Objects Seventh Edition
by Tony Gaddis, Judy Walters, and Godfrey Muganda

56 More for Loop Modifications (These are NOT Recommended)
Can omit initialization if already done int sum = 0, num = 1; for (; num <= 10; num++) sum += num; Can omit update if done in loop for (sum = 0, num = 1; num <= 10;) sum += num++; Can omit test – may cause an infinite loop for (sum = 0, num = 1; ; num++) Can omit loop body if all work is done in header


Download ppt "Chapter 5: Looping Starting Out with C++ Early Objects Seventh Edition"

Similar presentations


Ads by Google