Why Is Repetition Needed? Repetition allows efficient use of variables. It lets you process many values using a small number of variables. For example, to add five numbers: Inefficient way: Declare a variable for each number, input each number and add them. Efficient way: Create a loop that reads a number into a variable and adds it to another variable that contains the running total of the numbers.
Example: Inefficient Way of Adding Five Numbers
Example: Efficient Way of Adding Five Numbers
Three Kinds of Loops
for Loop for loop: also called a counted loop. Syntax of the for statement:
for Loop (cont.) The initial statement is executed only once, when execution of the for loop begins. The loop condition is checked at the beginning of each repetition. If it is true, the loop is repeated. If it is false, control passes to the first statement after the end of the loop. The update statement is executed at the end of each repetition.
for Loop (cont d.)
for Loop (cont d.)
for Loop (cont d.)
for Loop (cont d.) The following is a legal (but infinite) for loop: for (;;) cout << "Hello" << endl; The following is also legal, but probably not what the programmer wanted:
for Loop (cont d.)
for Loop (cont d.)
for Loop (cont d.) As expressions, they can, however, make use of the comma operator (,): This operator is an expression separator, and can separate multiple expressions where only one is generally expected. For example, using it, it would be possible for a for loop to handle two counter variables, initializing and increasing both: for ( n=0, i=100 ; n!=i ; ++n, --i ){// whatever here...} This loop will execute 50 times if neither n or i are modified within the loop:
for Loop (cont d.) Example: A for loop with no increment #include <iostream> using namespace std; int main() { int x; } for(x=0; x!= 123; ) { cout << "Enter a number: "; cin >> x; } return 0;
for Loop (cont d.) Example: The body of a for loop can be empty #include <iostream> using namespace std; int main() { int i; int sum = 0; // sum the numbers from 1 through 10 for(i=1; i <= 10; sum += i++) ; } cout << "Sum is " << sum; return 0;
while Loop Syntax of the while statement: statement can be simple or compound. expression acts as a decision maker and is usually a logical expression. statement is called the body of the loop. The parentheses are part of the syntax.
while Loop (cont d.) 18
while Loop (cont d.) 19
while Loop (cont d.) The variable i in Example 5-1 is called the loop control variable (LCV). Infinite loop: continues to execute endlessly. Infinite loops are generally undesirable. They re avoided by including statements in the loop body that assure the exit condition is eventually false. 20
while Loop (cont d.)
Four Common Ways of Using while Loops There are many ways to use while loops. The following slides discuss four common ways. These differ mainly in the value that is used for the loop control variable: Counter-controlled while loops Sentinel-controlled while loops Flag-controlled while loops EOF-controlled while loops
Case 1: Counter-Controlled while Loops Use a counter-controlled while loop when you know exactly how many times the statements need to be executed.
Case 2: Sentinel-Controlled while Loops In a sentinel-controlled while loop, the condition checks to see whether a variable is equal to a special value called the sentinel value.
Example 5-5: Telephone Digits Example 5-5 provides an example of a sentinelcontrolled loop. The program converts uppercase letters to their corresponding telephone digit.
Case 3: Flag-Controlled while Loops Flag-controlled while loop: uses a bool variable to control the loop.
Number Guessing Game Example 5-6 implements a number guessing game using a flag-controlled while loop. It also uses the function rand of the header file cstdlib to generate a random number. rand() returns an int value between 0 and 32767 To convert to an integer >= 0 and < 100: rand() % 100
Case 4: EOF-Controlled while Loops EOF stands for end-of-file. An EOF-controlled while loop reads data from a file until it encounters a special end-of-file character that is automatically included at the end every file on a disk.
eof Function The function eof can determine the end of file status. eof is a member of data type istream. Syntax for the function eof: where istreamvar is an input stream variable, such as cin.
More on Expressions in while Statements The expression in a while statement can be complex. Example: while ((noofguesses < 5) && (!isguessed)) { }...
do while Loop Syntax of a do...while loop: The statement executes first, and then the expression is evaluated. As long as expression is true, loop continues. To avoid an infinite loop, body must contain a statement that makes the expression false.
do while Loop (cont d.) The statement can be simple or compound. Loop always iterates at least once.
do while Loop (cont d.)
do while Loop (cont d.)
do while Loop (cont d.)
Choosing the Right Kind of Loop All three loops have their place in C++. If you can determine in advance the number of repetitions needed, the for loop is the best choice. If you cannot determine in advance the number of repetitions needed, and it could be zero, use a while loop. If you cannot determine in advance the number of repetitions needed, and it is at least one, use a do...while loop.
break and continue Statements break and continue alter the flow of control. break statement is used for two purposes: To skip the remainder of a switch structure. To exit early from a loop. Can eliminate the use of certain (flag) variables. After break executes, the program continues with the first statement after the structure.
Example: Using break in a while Loop
break and continue Statements (cont d.) continue is used in while, for, and do while structures. When executed in a loop, it skips the remaining statements in the loop and proceeds with the loop s next iteration.
Example: Using continue in a while Loop
Nested Loops To create the following pattern: * ** *** **** ***** We can use the following code: for (i = 1; i <= 5 ; i++) { for (j = 1; j <= i; j++) cout << "*"; cout << endl; }
Debugging Loops Loops are harder to debug than sequence and selection structures. While debugging, insert temporary cout statements in your loop so that you can see how the values of variables are changing as the loop repeats. Most common error associated with loops is off-byone.
Programming Example: Fibonacci Number Consider the following sequence of numbers: 1, 1, 2, 3, 5, 8, 13, 21, 34,... This is called a Fibonacci sequence. Given the first two numbers of the sequence (say, a 1 and a 2 ) n th number a n, n >= 3, of this sequence is given by: a n = a n-1 + a n-2
Programming Example: Fibonacci Number (cont d.) Fibonacci sequence n th Fibonacci number a 2 = 1 a 1 = 1 Determine the n th number a n, n >= 3
Programming Example: Fibonacci Number (cont d.) Suppose a 2 = 6 and a 1 = 3 a 3 = a 2 + a 1 = 6 + 3 = 9 a 4 = a 3 + a 2 = 9 + 6 = 15 Write a program that determines the n th Fibonacci number, given the first two numbers.
Programming Example: Input and Output Input: first two Fibonacci numbers and the desired Fibonacci number. Output: n th Fibonacci number.
Programming Example: Problem Analysis Algorithm: and Algorithm Design Get the first two Fibonacci numbers. Get the position, n, of the desired number in the sequence. Calculate the next Fibonacci number. Add the previous two elements of the sequence. Repeat Step 3 until the n th Fibonacci number is found. Output the n th Fibonacci number.
Programming Example: Variables
Programming Example: Main Algorithm Prompt the user for the first two numbers that is, previous1 and previous2. Read (input) the first two numbers into previous1 and previous2. Output the first two Fibonacci numbers. Prompt the user for the position of the desired Fibonacci number.
Programming Example: Main Algorithm (cont d.) Read the position of the desired Fibonacci number into nthfibonacci. if (nthfibonacci == 1) The desired Fibonacci number is the first Fibonacci number; copy the value of previous1 into current. else if (nthfibonacci == 2) The desired Fibonacci number is the second Fibonacci number; copy the value of previous2 into current.
Programming Example: Main Algorithm (cont d.) else calculate the desired Fibonacci number as follows: Initialize counter to 3 to keep track of which Fibonacci numbers we re currently calculating. Calculate the next Fibonacci number, as follows: current = previous2 + previous1; Assign the value of previous2 to previous1. Assign the value of current to previous2. Increment counter. Repeat until Fibonacci number is calculated.
Programming Example: Main Algorithm (cont d.) Here s the code that implements the algorithm s loop. while (counter <= nthfibonacci) { current = previous2 + previous1; previous1 = previous2; previous2 = current; counter++; }
Programming Example: Main Algorithm (cont d.) Output the nthfibonacci number, which is current.