Lecture 4 Looping. Building on the foundation Now that we know a little about cout cin math...

Preview:

Citation preview

Lecture 4

Looping

Building on the foundation

Now that we know a little about cout cin math operators boolean operators making decisions using if statements

Advantages of Computers

Computers are really quick

Computers don't get bored

They can do the same thing over and over and be “happy”

Loops

What is the effect of a loop?

{ some C++ code; some C++ code; some C++ code; some C++ code; some C++ code; some C++ code; some C++ code;}

as long as some condition is true

While loopswhile ( num < 10 ) { cout << “num = ” << num << endl; num = num + 1;}

False

BoolExp

True

Code Block

While loopswhile ( num < 10 ) cout << “Hello there \n” ;

As before if there is only one line in the body of the loop, the { } are not needed.

But....what is the problem?

False

BoolExp

Code Block

True

While loopswhile ( num < 10 ) cout << “Hello there \n” ;

As before if there is only one line in the body of the loop, the { } are not needed.

But....what is the problem?

Infinite Loop:a loop that doesn't end

False

BoolExp

Code Block

True

What is a difference between if and while

Which of the following is the if (left or right)?

False

BoolExp

Code Block

True False

BoolExp

Code Block

True

What is a difference between if and while

Which of the following is the if (left or right)?

False

BoolExp

Code Block

True

FalseBoolExp

Code Block

True

if while

Class Exercise

ask the user for 10 integers

return to the user the total of the 10 integers and their average

Please enter 10 numbersnum 1: 23num 2: 56.....num 10: -34

The total of your 10 numbers is: 345The average for the 10 numbers is: 34

Things to think about:

What part needs to be repeated?

This will go in the loop body

How many variables do you need?

Answer

int num = 1, total = 0, temp;

cout << “Please enter 10 numbers \n”

while ( num <= 10 ) {cout << “num “ << num << “:” ;cin >> temp ;total = total + temp;num = num + 1;

}

cout << “The total of your 10 numbers is: “ << total << endl;cout << “The average of your 10 number is: << ( total / 10 ) << endl;

Counter Controled Loop Counter Controled Loop uses a variable (num) to count

and control when the loop stops

int num = 1, total = 0, temp;

cout << “Please enter 10 numbers \n”

while ( num <=10 ) {cout << “num “ << num << “:” ;cin >> temp ;total = total + temp;num = num + 1;

}

cout << “The total of your 10 numbers is: “ << total << endl;

Another Class Exercise

Most of the time our DOS screen is 80 characters wide

To help with making a “pretty” display, make a loop that will print 80 numbers across the screen.....but always print from 1 to 10 ( 0 will represent a 10)

123456789012345...................................67890

Answer

int count = 1, output = 1;

while ( count <= 80 ) {cout << output ;count = count + 1;output = output + 1;

if (output > 9 ) // reset output to 0 if over 9output = 0;

}

Another Answer

int count = 1, output = 1;

while ( count <= 80 ) {cout << output ;count = count + 1;

// reset output to 0 if over 9output = ( output > 9 ? 0 : output + 1 );

}

Another Answer

int num = 1 ;

while ( num <= 80 ) {cout << ( num % 10 ) ;num = num + 1;

}

While loops You can put any kind

of code in the code block.....

False

BoolExp

Code Block

True

While loops You can put any kind

of code in the code block.....

...even other loops

False

BoolExp

Code Block

True

False

BoolExp

Code Block

True

False

BoolExp

Code Block

True

False

BoolExp

Code Block

True

In everyday life we have an embedded loop: ????

Embedded loops(a loop inside of another loop)

False

BoolExp

Code Block

True

False

BoolExp

Code Block

True

hours

minutes

In everyday life we have an embedded loop: Time

Embedded loops(a loop inside of another loop)

Creating Some Time Output

int hour = 0, min;

while ( hour < 24 ) { min = 0; while ( min < 60 ) { cout << hour << ':' << min << endl;

min = min + 1; } // end of minute loop hour = hour + 1; } // end of hour loop

Now What is the Output?int hour = 0, min;

while ( hour < 24 ) { min = 0; while ( min < 60 ) { cout << (hour < 10 ? '0' : “” ) << hour; cout << ':' ; cout << (min < 10 ? '0' : “” ) << min << endl; min = min + 1; } // end of minute loop hour = hour + 1; } // end of hour loop

Infinite loops

Common Infinite Loops

while ( ch = ‘y’ ) {........

}

Remember: non-zero numbers true zero false

Infinite loops )

Common Infinite Loops

while ( ch = ‘y’ ) {........

}

Remember: non-zero numbers true zero false

or

int i = 0while ( i < 10 ) {

....

.... // forgot i++;}

Looping Control Structures

Three different commands

while statement

do-while statement

......

The Do-While Statement

Syntax

do code block

while (bool expr);

BoolExp

Code Block

True

False

Using a do while loop

char reply;

do { ......... // some code cout << "Do you want to continue?(y):";

cin >> reply;

} while(reply == 'y');

Why use a .......?

What is the advantage of a

while:

do...while:

Why use a .......?

What is the advantage of a

while: body will execute 0 – N times

do...while: body will execute 1 – N times

Looping Control Structures

Three different commands

while statement

do-while statement

for statement

Common use of loop

int cnt = 0; // initialize

while ( cnt < 10 ) { // check ......;// do something.......body of loop......;cnt++; // update

}

The for loop

Syntaxfor (initialization ; bool expression ; update

action)

body of the loop

Examplefor (int i = 0; i < 3; i++) { cout << "i is " << i << endl;}

Bool Exp

Body

truefalse

Initialization

Update Action

Executed onceat the beginning

of the forloop'sexecution The Bool Exp is

evaluated at thestart of each

iteration of theloop

Execution Example

for (int i = 0; i < 3; ++i) {cout << "i is " << i << endl;

}cout << "all done" << endl;

i 0

Execution Example

for (int i = 0; i < 3; ++i) {cout << "i is " << i << endl;

}cout << "all done" << endl;

i 0

Execution Example

for (int i = 0; i < 3; ++i) {cout << "i is " << i << endl;

}cout << "all done" << endl;

i 0

i is 0

Execution Example

for (int i = 0; i < 3; ++i) {cout << "i is " << i << endl;

}cout << "all done" << endl;

i 0

i is 0

Execution Example

for (int i = 0; i < 3; ++i) {cout << "i is " << i << endl;

}cout << "all done" << endl;

i 1

i is 0

Execution Example

for (int i = 0; i < 3; ++i) {cout << "i is " << i << endl;

}cout << "all done" << endl;

i 1

i is 0

Execution Example

for (int i = 0; i < 3; ++i) {cout << "i is " << i << endl;

}cout << "all done" << endl;

i 1

i is 0i is 1

Execution Example

for (int i = 0; i < 3; ++i) {cout << "i is " << i << endl;

}cout << "all done" << endl;

i 1

i is 0i is 1

Execution Example

for (int i = 0; i < 3; ++i) {cout << "i is " << i << endl;

}cout << "all done" << endl;

i 2

i is 0i is 1

Execution Example

for (int i = 0; i < 3; ++i) {cout << "i is " << i << endl;

}cout << "all done" << endl;

i 2

i is 0i is 1

Execution Example

for (int i = 0; i < 3; ++i) {cout << "i is " << i << endl;

}cout << "all done" << endl;

i 2

i is 0i is 1i is 2

Execution Example

for (int i = 0; i < 3; ++i) {cout << "i is " << i << endl;

}cout << "all done" << endl;

i 2

i is 0i is 1i is 2

Execution Example

for (int i = 0; i < 3; ++i) {cout << "i is " << i << endl;

}cout << "all done" << endl;

i 3

i is 0i is 1i is 2

Execution Example

for (int i = 0; i < 3; ++i) {cout << "i is " << i << endl;

}cout << "all done" << endl;

i 3

i is 0i is 1i is 2

Execution Example

for (int i = 0; i < 3; ++i) {cout << "i is " << i << endl;

}cout << "all done" << endl;

i 3

i is 0i is 1i is 2all done

Embedding for loops

Just like while loops, for loops can also be embedded inside other loops

in fact, due to there compactness (information being easier to read) many embedded loops will be for loops

int cntr1 =0, cntr2 =0, cntr3 =0,cntr4 =0, cntr5 =0;cntr1++;

for (int i = 1; i <= 10; ++i) {cntr2++;

for (int j = 1; j <= 20; ++j) { cntr3++;

}

cntr4++;}

cntr5++;

cout << “cntr1: “ << cntr1 << endl << “cntr2: “ << cntr2 << endl << “cntr3: “ << cntr3 << endl << “cntr4: “ << cntr4 << endl

<< “cntr5: “ << cntr5 << endl;

What is the output?

Answer:

cntr1: 1cntr2: 10cntr3: 200cntr4: 10cntr5: 1Press any key to continue

Class Exercise Write code to display a grid.

For each position, display the location’s row and column number. Put two blanks between each location.

Ex:1,1 1,2 1,3 .... 1,92,1 2,2 .... 2,9 ....8,1 8,2 .... 8,99,1 9,2 9,3 .....9,9

One solution to grid exercise

for(int row = 1; row < 10; row++ ){

for(int col = 1; col < 10; col++) {cout << row << ‘,’ << col << “ “;

} // end of col loop

cout << endl;

} // end of row loop

Another use of break break can be used to exit a loop

// in some game

while ( life > 0 ) {........ // play game

cout << “Do you want to quit(q):”;cin >> userResponse;if (userResponse == ‘q’ )

break;

} // end while loop not the best example

A better solution

// in some game

userResponse = ‘c’;

while ( life > 0 && userResponse != ‘q’ ) {// play game

....cin >> userResponse;

} // end while loop

The best solution

// in some game

do {// play game

....cin >> userResponse;

} while ( life > 0 && userResponse != ‘q’ );

Another use of break break will only exit out of one loop (if embedded)

for ( int row = 1; row < 10; row++ ) {

for ( int col = 1; col < 10; col++) {// do something

if ( ???? ) break; // this will stop the col loop} // col loop

} // row loop

Continue, the brother of break

the key word, continue, will cause execution to skip to the boolean expression

while( something == true ) {// do somethingif ( x > 0 )

continue; // skip to end of block// do some more....

} // end of while

Continue, the brother of break

the key word, continue, will cause execution to skip to the boolean expression

while( something == true ) {// do somethingif ( x > 0 )

continue; // skip to end of block// do some more....

} // end of while

Using break and continue in loops

First look for a solution that does not use break or continue

Only use break and continue

if it is the only solution or

it makes the code easier to understand

Note: always avoid using goto.... there is almost always a better way

Sentinel Controled Loops Continue doing the loop until a special value (the sentinel) is encounter

Sentinel Controled Loops Continue doing the loop until a special value (the sentinel) is encounter

Example: Before we asked the user for 10 numbers

and then we told the user total of the 10 numbers average of the 10 numbers

Sentinel Controled Loops Continue doing the loop until a special value (the sentinel) is encounter

Example: Before we asked the user for 10 numbers

and then we told the user total of the 10 numbers average of the 10 numbers

Now we want the user to enter as many numbers as they want a negative number is the signal that they are

done ( the sentinel )

quiz

int count = 1, total = 0, input = 0;

cout << “Please enter some positive numbers that I will average \n”;cout << “Enter a negative number to signal that you are done \n”;

while ( input >= 0 ) {cout << “# “ << count << “:” ;cin >> input;total = total + input;count = count + 1;

}

count = count – 1;

if ( count > 0 ) { cout << “The total of your “ << count ; cout << “ numbers is: “ << total << endl; cout << “The average of your “ << count cout << “ number is: << ( total / count ) << endl;}

try it with:57 -1

try it with:57 -1

Will this work?Will this work?