450 likes | 585 Views
5. Repetition Statements. Contents. Basic loop structures while loops Interactive while loops for loops Loop programming techniques Nested loops do while loops Common programming errors. Basic Loop Structures. Repetition structure has four required elements: Repetition statement
E N D
5 Repetition Statements
Contents • Basic loop structures • while loops • Interactive while loops • for loops • Loop programming techniques • Nested loops • dowhile loops • Common programming errors
Basic Loop Structures • Repetition structure has four required elements: • Repetition statement • Condition to be evaluated • Initial value for the condition • Loop termination • Repetition statements include: • while • for • do while
Basic Loop Structures • The condition can be tested • At the beginning: Pretest or entrance-controlled loop • At the end: Posttest or exit-controlled loop • Something in the loop body must cause the condition to change, to avoid an infinite loop, which never terminates
Pretest and Posttest Loops • Pretest loop: Condition is tested first; if false, statements in the loop body are never executed • while and for loops are pretest loops Figure 5.1 A pretest loop
Pretest and Posttest Loops • Posttest loop: Condition is tested after the loop body statements are executed; loop body always executes at least once • do whileis a posttest loop Figure 5.2 A posttest loop
Fixed-Count Versus Variable-Condition Loops • Fixed-count loop: Loop is processed for a fixed number of repetitions • Variable-condition loop: Number of repetitions depends on the value of a variable
while Loops • while statement is used to create a while loop • Syntax: • while (expression) • statement; • Statements following the expressions are executed as long as the expression condition remains true (evaluates to a non-zero value)
while Loops • Program 5.1 • #include <iostream> • using namespace std; • int main() • { • int count; • count = 1; // initialize count • while (count <= 10) • { • cout << count << " "; • count++; // increment count • } • return 0; • } • The Output from Program 5.1 • 1 2 3 4 5 6 7 8 9 10
while Loops • Program 5.3 • #include <iostream> • #include <iomanip> • using namespace std; • int main() • { • int num; • cout << "NUMBER SQUARE CUBE\n" • << "------ ------ ----\n"; • num = 1; • while (num < 11) • { • cout << setw(3) << num << " " • << setw(3) << num * num << " " • << setw(4) << num * num * num << endl; • num++; // increment num • } • return 0; • }
while Loops • The Output from Program 5.3 • NUMBER SQUARE CUBE • ------ ------ ---- • 1 1 1 • 2 4 8 • 3 9 27 • 4 16 64 • 5 25 125 • 6 36 216 • 7 49 343 • 8 64 512 • 9 81 729 • 10 100 1000
while Loops • Example: • Celsius-to-Fahrenheit temperature-conversion • Display Fahrenheit and Celsius temperatures, from 5-50 degrees C, in 5 degree increments celsius = 5; // starting Celsius value while (celsius <= 50) { fahren = (9.0/5.0) * celsius + 32.0; cout << setw(4) << celsius << setw(13) << fahren << endl; celsius = celsius + 5; }
Interactive while Loops • Combining interactive data entry with the whilestatement provides for repetitive entry and accumulation of totals
Interactive while Loops Figure 5.6 Accumulation flow of control
Interactive while Loops • Program 5.6 • #include <iostream> • using namespace std; • int main() • { • const int MAXNUMS = 4; • int count; • double num, total; • cout << "\nThis program will ask you to enter " • << MAXNUMS << " numbers.\n"; • count = 1; • total = 0 • while (count <= MAXNUMS) • { • cout << "\nEnter a number: "; • cin >> num; • total = total + num; • cout << "The total is now " << total; • count++; • } • cout << “\n\nThe final total is “ << total << endl; • return 0; • }
Interactive while Loops Sample run of program 5.6: This program will ask you to enter 4 numbers. Enter a number: 26.2 The total is now 26.2 Enter a number: 5 The total is now 31.2 Enter a number: 103.456 The total is now 134.656 Enter a number: 1267.89 The total is now 1402.546 The final total is 1402.546
Sentinels • Sentinel: A data value used to signal either the start or end of a data series • Use a sentinel when you don’t know how many values need to be entered
break and continue Statements • break statement • Forces an immediate break, or exit, from switch,while,for, and do-while statements • Violates pure structured programming, but is useful for breaking out of loops when an unusual condition is detected
break and continue Statements • Example of a break statement: while( count <= 10) { cout << “Enter a number: ”; cin >> num; if (num > 76) { cout << “You lose!\n”; break; // break out of the loop } else cout << “Keep on tracking!\n”; count++; } // break jumps to here
break and continue Statements • A continue statement where invalid grades are ignored, and only valid grades are added to the total: while( count < 30) { cout << “Enter a grade: ”; cin >> grade; if (grade < 0 || grade > 100) continue; total = total + grade; count++; }
break and continue Statements • continue statement • Applies to while,do-while, and for statements; causes the next iteration of the loop to begin immediately • Useful for skipping over data that should not be processed in this iteration, while staying within the loop
The NullStatement • Null statement • Semicolon with nothing preceding it • ; • Do-nothing statement required for syntax purposes only
for Loops • for statement: A loop with a fixed count condition that handles alteration of the condition • Syntax: • for (initializing list; expression; altering list) • statement; • Initializing list: Sets the starting value of a counter • Expression: Contains the maximum or minimum value the counter can have; determines when the loop is finished
for Loops • Altering list: Provides the increment value that is added or subtracted from the counter in each iteration of the loop • If initializing list is missing, the counter initial value must be provided prior to entering the for loop • If altering list is missing, the counter must be altered in the loop body • Omitting the expression will result in an infinite loop
for Loops • Program 5.9 • #include <iostream> • #include <iomanip> • #include <cmath> • using namespace std; • int main() • { • const int MAXCOUNT = 5; • int count; • cout << "NUMBER SQUARE ROOT\n"; • cout << "------ -----------\n"; • cout << setiosflags(ios::showpoint); • for (count = 1; count <= MAXCOUNT; count++) • cout << setw(4) << count • << setw(15) << sqrt(double(count)) << endl; • return 0; • }
for Loops Figure 5.7for loop flowchart.
for Loops • Program 5.11 • #include <iostream> • #include <iomanip> • using namespace std; • int main() • { • const int MAXNUMS = 10; • int num; • cout << endl; // print a blank line • cout << "NUMBER SQUARE CUBE\n" • << "------ ------ ----\n"; • for (num = 1; num <= MAXNUMS; num++) • cout << setw(3) << num << " " • << setw(3) << num * num << " " • << setw(4) << num * num * num << endl; • return 0; • }
for Loops When Program 5.11 is run, the display produced is NUMBER SQUARE CUBE _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 1 1 1 2 4 8 3 9 27 4 16 64 5 25 125 6 36 216 7 49 343 8 64 512 9 81 729 10 100 1000
A Closer Look: Loop Programming Techniques • These techniques are suitable for pretest loops (for and while): • Interactive input within a loop • Includes a cin statement within a while or for loop • Selection within a loop • Using a for or while loop to cycle through a set of values to select those values that meet some criteria
A Closer Look: Loop Programming Techniques • Program 5.13 • #include <iostream> • using namespace std; • // this program computes the positive and negative sums of a set • // of MAXNUMS user entered numbers • int main() • { • const int MAXNUMS = 5; • inti; • double usenum, postot, negtot; • postot = 0; // this initialization can be done in the declaration • negtot = 0; // this initialization can be done in the declaration • for (i = 1; i <= MAXNUMS; i++) • { • cout << "Enter a number (positive or negative) : "; • cin >> usenum; • if (usenum > 0) • postot = postot + usenum; • else • negtot = negtot + usenum; • } • cout << "The positive total is " << postot << endl; • cout << "The negative total is " << negtot << endl; • return 0; • }
A Closer Look: Loop Programming Techniques • Evaluating functions of one variable • Used for functions that must be evaluated over a range of values • Noninteger increment values can be used
A Closer Look: Loop Programming Techniques • Program 5.14 • #include <iostream> • #include <iomanip> • #include <cmath> • using namespace std; • int main() • { • int x, y; • cout << "x value y value\n" • << "------- --------\n"; • for (x = 2; x <= 6; x++) • { • y = 10 * pow(x,2.0) + 3 * x - 2; • cout << setw(4) << x << setw(11) << y << endl; • } • return 0; • }
A Closer Look: Loop Programming Techniques • Interactive loop control • Variable is used to control the loop repetitions • Provides more flexibility at run-time
A Closer Look: Loop Programming Techniques • Program 5.16 • #include <iostream> • #include <iomanip> • using namespace std; • // this program displays a table of numbers, their squares and cubes • // starting from the number 1. The final number in the table is • // input by the user • int main() • { • int num, final; • cout << "Enter the final number for the table: "; • cin >> final; • cout << "NUMBER SQUARE CUBE\n"; • cout << "------ ------ ----\n"; • for (num = 1; num <= final; num++) • cout << setw(3) << num • << setw(8) << num*num • << setw(7) << num*num*num << endl; • return 0; • }
Nested Loops • Nested loop: A loop contained within another loop • All statements of the inner loop must be completely contained within the outer loop; no overlap allowed • Different variables must be used to control each loop • For each single iteration of the outer loop, the inner loop runs through all of its iterations
Nested Loops Figure 5.9 For each i, j loops.
Nested Loops • Program 5.16 • #include <iostream> • using namespace std; • int main() • { • const int MAXI = 5; • const int MAXJ = 4; • inti, j; • for(i = 1; i <= MAXI; i++) // start of outer loop <------+ • { // | • cout << "\ni is now " << i << endl; // | • // | • for(j = 1; j <= MAXJ; j++) // start of inner loop | • cout << " j = " << j; // end of inner loop | • } // end of outer loop <-------+ • cout << endl; • return 0; • }
do while Loops • do while loop is a posttest loop • Loop continues while the condition is true • Condition is tested at the end of the loop • Syntax: do statement; while (expression); • All statements are executed at least once in a posttest loop
do while Loops Figure 5.10 The do while loop structure.
do while Loops Figure 5.11 The do statement’s flow of control.
Validity Checks • Useful in filtering user-entered input and providing data validation checks • Can enhance with if-else statement do { cout << “\nEnter an identification number: ”; cin >> id_num; } while( id_num < 1000 || id_num > 1999 );
Common Programming Errors • Making the “off by one” error: loop executes one too many or one too few times • Using the assignment operator (=) instead of the equality comparison operator (==) in the condition expression • Testing for equality with floating-point or double-precision operands; use an epsilon value instead
Common Programming Errors • Placing a semicolon at the end of the for clause, which produces a null loop body • Using commas instead of semicolons to separate items in the for statement • Changing the value of the control variable • Omitting the final semicolon in a do statement
Summary • Loop: A section of repeating code, whose repetitions are controlled by testing a condition • Three types of loops: • while • for • do while • Pretest loop: Condition is tested at beginning of loop; loop body may not ever execute; ex., while, forloops
Summary • Posttest loop: Condition is tested at end of loop; loop body executes at least once; ex., do while • Fixed-count loop: Number of repetitions is set in the loop condition • Variable-condition loop: Number of repetitions is controlled by the value of a variable