79
REPETITIVE STRUCTURES CSE1222: Lecture 7 The Ohio State University 1

CSE1222: Lecture 7The Ohio State University1. logExample.cpp // example of log(k) for k = 1,2,..,8... int main() { cout

Embed Size (px)

Citation preview

Page 1: CSE1222: Lecture 7The Ohio State University1. logExample.cpp // example of log(k) for k = 1,2,..,8... int main() { cout

REPETITIVE STRUCTURES

CSE1222: Lecture 7 The Ohio State University 1

Page 2: CSE1222: Lecture 7The Ohio State University1. logExample.cpp // example of log(k) for k = 1,2,..,8... int main() { cout

logExample.cpp// example of log(k) for k = 1,2,..,8. . .int main(){ cout << "log(1) = " << log(1.0) << endl; cout << "log(2) = " << log(2.0) << endl; cout << "log(3) = " << log(3.0) << endl; cout << "log(4) = " << log(4.0) << endl; cout << "log(5) = " << log(5.0) << endl; cout << "log(6) = " << log(6.0) << endl; cout << "log(7) = " << log(7.0) << endl; cout << "log(8) = " << log(8.0) << endl;

return 0;}

CSE1222: Lecture 7 The Ohio State University 2

Page 3: CSE1222: Lecture 7The Ohio State University1. logExample.cpp // example of log(k) for k = 1,2,..,8... int main() { cout

logExample.cpp... cout << "log(1) = " << log(1.0) << endl; cout << "log(2) = " << log(2.0) << endl; cout << "log(3) = " << log(3.0) << endl; cout << "log(4) = " << log(4.0) << endl; cout << "log(5) = " << log(5.0) << endl; cout << "log(6) = " << log(6.0) << endl; cout << "log(7) = " << log(7.0) << endl; cout << "log(8) = " << log(8.0) << endl;...

> logExample.exelog(1) = 0log(2) = 0.693147log(3) = 1.09861log(4) = 1.38629log(5) = 1.60944log(6) = 1.79176log(7) = 1.94591log(8) = 2.07944

CSE1222: Lecture 7 The Ohio State University 3

Page 4: CSE1222: Lecture 7The Ohio State University1. logExample.cpp // example of log(k) for k = 1,2,..,8... int main() { cout

Repetition Structures (Loops) Motivation:

If we want to repeat essentially the same code say 1000 times we should not have to write 100 lines of code!

We need a new statement to help us execute repetitive code

CSE1222: Lecture 7 The Ohio State University 4

Page 5: CSE1222: Lecture 7The Ohio State University1. logExample.cpp // example of log(k) for k = 1,2,..,8... int main() { cout

logWhile.cpp// example of while loop for log(k) for k = 1,2,..,8. . .int main(){ int k(0);

k = 1; while (k <= 8) { cout << "log(" << k << ") = " << log(double(k)) << endl; k++; } return 0;}

CSE1222: Lecture 7 The Ohio State University 5

Page 6: CSE1222: Lecture 7The Ohio State University1. logExample.cpp // example of log(k) for k = 1,2,..,8... int main() { cout

logWhile.cpp... k = 1; while (k <= 8) { cout << "log(" << k << ") = " << log(double(k)) << endl; k++; }...

> logWhile.exelog(1) = 0log(2) = 0.693147log(3) = 1.09861log(4) = 1.38629log(5) = 1.60944log(6) = 1.79176log(7) = 1.94591log(8) = 2.07944

CSE1222: Lecture 7 The Ohio State University 6

Page 7: CSE1222: Lecture 7The Ohio State University1. logExample.cpp // example of log(k) for k = 1,2,..,8... int main() { cout

while Loops

The while statement syntax:

while (conditional expression){ statement1; statement2; ...}

CSE1222: Lecture 7 The Ohio State University 7

Page 8: CSE1222: Lecture 7The Ohio State University1. logExample.cpp // example of log(k) for k = 1,2,..,8... int main() { cout

How while Loops Work1. First test the conditional expression

If it is true, then execute the statement(s)

within the loop structure is/are executed

2. After the statement(s) are executed, we try to repeat the process

If the condition is still true, then we will executethe statement(s) againThus, while the condition is true, keep repeating

3. If the condition ever evaluates to false, then stop the while statement; the program continues execution after the while statement

CSE1222: Lecture 7 The Ohio State University 8

Page 9: CSE1222: Lecture 7The Ohio State University1. logExample.cpp // example of log(k) for k = 1,2,..,8... int main() { cout

Control Flow of a while Loop

TRUE

FALSE

Statement 1

Code after loop

Code prior to loop

Return tolooping condition

...

Condition is true?

CSE1222: Lecture 7 The Ohio State University 9

Page 10: CSE1222: Lecture 7The Ohio State University1. logExample.cpp // example of log(k) for k = 1,2,..,8... int main() { cout

logWhile.cpp… while (k <= 8) { cout << "log(" << k << ") = " << log(double(k)) << endl; k++; } return 0;}

The variable k , which appears in the conditional expression, is called a loop variable

It is an important variable because its value determines whether the loop stops or keeps going

The condition is the most difficult part of writing a loop

CSE1222: Lecture 7 The Ohio State University 10

Page 11: CSE1222: Lecture 7The Ohio State University1. logExample.cpp // example of log(k) for k = 1,2,..,8... int main() { cout

While Examplecount = 1;while (count <= 10){

cout << count << “ “;count++; //increment count!

}

Output is “1 2 3 4 5 6 7 8 9 10”

The behavior of the loop is determined by the loop variable(s): Initialization of the loop variable Use in the condition determines continuation or end of the loop Update of the loop variable

CSE1222: Lecture 7 The Ohio State University 11

Page 12: CSE1222: Lecture 7The Ohio State University1. logExample.cpp // example of log(k) for k = 1,2,..,8... int main() { cout

Control Flow of the Example Program

TRUE

FALSE

coutcounter

Code after loop

counter = 1;

counter++

counter<= 10 ?

CSE1222: Lecture 7 The Ohio State University 12

Page 13: CSE1222: Lecture 7The Ohio State University1. logExample.cpp // example of log(k) for k = 1,2,..,8... int main() { cout

Repetition Structures 2

Motivation 2:

Allow repetition of code based on input

For example, a program should be able to output n lines of cout statements where n is a user input

CSE1222: Lecture 7 The Ohio State University 13

Page 14: CSE1222: Lecture 7The Ohio State University1. logExample.cpp // example of log(k) for k = 1,2,..,8... int main() { cout

logWhile2.cpp...int main(){ int n(0), k(0);

cout << "Enter number of logarithms to compute: "; cin >> n;

k = 1; while (k <= n) { cout << "log(" << k << ") = " << log(double(k)) << endl; k++; } return 0;}

CSE1222: Lecture 7 The Ohio State University 14

Page 15: CSE1222: Lecture 7The Ohio State University1. logExample.cpp // example of log(k) for k = 1,2,..,8... int main() { cout

logWhile2.cpp... cout << "Enter number of logarithms to compute: "; cin >> n;

k = 1; while (k <= n) { cout << "log(" << k << ") = " << log(double(k)) << endl; k++; }...

> logWhile2.exeEnter number of logarithms to compute: 5log(1) = 0log(2) = 0.693147log(3) = 1.09861log(4) = 1.38629log(5) = 1.60944

CSE1222: Lecture 7 The Ohio State University 15

Page 16: CSE1222: Lecture 7The Ohio State University1. logExample.cpp // example of log(k) for k = 1,2,..,8... int main() { cout

logWhile2.cpp... cout << "Enter number of logarithms to compute: "; cin >> n;

k = 1; while (k <= n) { cout << "log(" << k << ") = " << log(double(k)) << endl; k++; }...

What happens here?

> logWhile2.exeEnter number of logarithms to compute: -3

???

CSE1222: Lecture 7 The Ohio State University 16

Page 17: CSE1222: Lecture 7The Ohio State University1. logExample.cpp // example of log(k) for k = 1,2,..,8... int main() { cout

Repetition Structures 3

If a program receives incorrect input, it can repeatedly prompt for the correct input

CSE1222: Lecture 7 The Ohio State University 17

Page 18: CSE1222: Lecture 7The Ohio State University1. logExample.cpp // example of log(k) for k = 1,2,..,8... int main() { cout

logWhile3.cpp// example of while loop to prompt for correct input...int main(){ double x(0.0);

cout << "Enter number: "; cin >> x;

while (x <= 0) { cout << "Input must be positive." << endl; cout << "Enter number: "; cin >> x; } cout << "log(" << x << ") = “ << log(x) << endl; return 0;}

CSE1222: Lecture 7 The Ohio State University 18

Page 19: CSE1222: Lecture 7The Ohio State University1. logExample.cpp // example of log(k) for k = 1,2,..,8... int main() { cout

logWhile3.cpp... cout << "Enter number: "; cin >> x;

while (x <= 0) { cout << "Input must be positive." << endl; cout << "Enter number: "; cin >> x; }

cout << "log(" << x << ") = " << log(x) << endl;...

> logWhile3.exeEnter number: -4.5Input must be positive.Enter number: 0Input must be positive.Enter number: 4.5log(4.5) = 1.50408

CSE1222: Lecture 7 The Ohio State University 19

Page 20: CSE1222: Lecture 7The Ohio State University1. logExample.cpp // example of log(k) for k = 1,2,..,8... int main() { cout

logWhileError.cpp// example of a while loop with a logical error. . .int main(){ int k(0);

k = 1; while (k <= 8) { cout << "log(" << k << ") = " << log(double(k)) endl; }

return 0;}

CSE1222: Lecture 7 The Ohio State University 20

Try running this program

Page 21: CSE1222: Lecture 7The Ohio State University1. logExample.cpp // example of log(k) for k = 1,2,..,8... int main() { cout

probability.cpp...int main(){ double p(0.0);

cout << "Enter probability player A wins 1 game: "; cin >> p;

while (p < 0.0 || p > 1.0) { cout << "Input must be in range [0:1]." << endl; cout << "Enter probability player A wins 1 game: "; cin >> p; }

cout << "Probability player A loses all 5 games = " << pow((1-p), 5.0) << endl;

return 0;}

CSE1222: Lecture 7 The Ohio State University 21

Page 22: CSE1222: Lecture 7The Ohio State University1. logExample.cpp // example of log(k) for k = 1,2,..,8... int main() { cout

> probability.exeEnter probability player A wins: 2Input must be in range [0:1].Enter probability player A wins: -1Input must be in range [0:1].Enter probability player A wins: 0.2Probability player A loses all 5 games = 0.32768>

CSE1222: Lecture 7 The Ohio State University 22

...while (p < 0.0 || p > 1.0) { cout << "Input must be in range [0:1]." << endl; cout << "Enter probability player A wins 1 game: "; cin >> p; }...

Page 23: CSE1222: Lecture 7The Ohio State University1. logExample.cpp // example of log(k) for k = 1,2,..,8... int main() { cout

temperature.cpp// print a table converting fahrenheit to celsius... int fahrenheit(0), min_fahrenheit(0), max_fahrenheit(0); int STEP_SIZE(10);

cout << "Enter min and max fahrenheit: "; cin >> min_fahrenheit >> max_fahrenheit;

fahrenheit = min_fahrenheit; // loop until fahrenheit is greater than max_fahrenheit while (fahrenheit <= max_fahrenheit) { // convert fahrenheit to celsius float celsius = (fahrenheit - 32.0) * 5.0/9.0;

cout << "farenheit = " << fahrenheit << “ celsius = " << celsius << endl;

fahrenheit += STEP_SIZE; // increment by STEP_SIZE }...

CSE1222: Lecture 7 The Ohio State University 23

Page 24: CSE1222: Lecture 7The Ohio State University1. logExample.cpp // example of log(k) for k = 1,2,..,8... int main() { cout

temperature.cpp... int STEP_SIZE(10);... fahrenheit = min_fahrenheit; // loop until fahrenheit is greater than max_fahrenheit while (fahrenheit <= max_fahrenheit) { // convert fahrenheit to celsius float celsius = (fahrenheit - 32.0) * 5.0/9.0;

cout << "farenheit = " << fahrenheit << “ celsius = " << celsius << endl; fahrenheit += STEP_SIZE; // increment by STEP_SIZE }...

> temperature.exeEnter min and max fahrenheit: 20 60farenheit = 20 celsius = -6.66667farenheit = 30 celsius = -1.11111farenheit = 40 celsius = 4.44444farenheit = 50 celsius = 10farenheit = 60 celsius = 15.5556

CSE1222: Lecture 7 The Ohio State University 24

Page 25: CSE1222: Lecture 7The Ohio State University1. logExample.cpp // example of log(k) for k = 1,2,..,8... int main() { cout

temperature.cpp... int STEP_SIZE(10);... fahrenheit = min_fahrenheit; // loop until fahrenheit is greater than max_fahrenheit while (fahrenheit <= max_fahrenheit) { // convert fahrenheit to celsius float celsius = (fahrenheit - 32.0) * 5.0/9.0;

cout << "farenheit = " << fahrenheit << “ celsius = " << celsius << endl; fahrenheit += STEP_SIZE; // increment by STEP_SIZE }...

> temperature.exeEnter min and max fahrenheit: 25 60farenheit = 25 celsius = -3.88889farenheit = 35 celsius = 1.66667farenheit = 45 celsius = 7.22222farenheit = 55 celsius = 12.7778

CSE1222: Lecture 7 The Ohio State University 25

Page 26: CSE1222: Lecture 7The Ohio State University1. logExample.cpp // example of log(k) for k = 1,2,..,8... int main() { cout

temperature2.cpp...

int STEP_SIZE(5);... fahrenheit = min_fahrenheit; while (fahrenheit <= max_fahrenheit) { float celsius = (fahrenheit - 32.0) * 5.0/9.0; cout << "farenheit = " << fahrenheit << “ celsius = " << celsius << endl; fahrenheit += STEP_SIZE; // increment by STEP_SIZE }...

> temperature2.exeEnter min and max fahrenheit: 25 60farenheit = 25 celsius = -3.88889farenheit = 30 celsius = -1.11111farenheit = 35 celsius = 1.66667farenheit = 40 celsius = 4.44444farenheit = 45 celsius = 7.22222farenheit = 50 celsius = 10farenheit = 55 celsius = 12.7778farenheit = 60 celsius = 15.5556

CSE1222: Lecture 7 The Ohio State University 26

Page 27: CSE1222: Lecture 7The Ohio State University1. logExample.cpp // example of log(k) for k = 1,2,..,8... int main() { cout

temperatureError.cpp// print a table converting fahrenheit to celsius... int fahrenheit(0), min_fahrenheit(0), max_fahrenheit(0); int STEP_SIZE(10);

cout << "Enter min and max fahrenheit: "; cin >> min_fahrenheit >> max_fahrenheit;

fahrenheit = min_fahrenheit; // loop until fahrenheit does not equal max_fahrenheit while (fahrenheit != max_fahrenheit) // Note != instead of <= { // convert fahrenheit to celsius float celsius = (fahrenheit - 32.0) * 5.0/9.0;

cout << "farenheit = " << fahrenheit << “ celsius = " << celsius << endl; fahrenheit += STEP_SIZE; // increment by STEP_SIZE }...

CSE1222: Lecture 7 The Ohio State University 27

Page 28: CSE1222: Lecture 7The Ohio State University1. logExample.cpp // example of log(k) for k = 1,2,..,8... int main() { cout

sinWhile.cpp (Error)…int main(){ double x(0.0); double increment(0.1);

cout.setf(ios::fixed); while (x != 1.0) { cout << x << ": " << sin(x) << " " << cos(x) << endl; x += increment; }

return 0;}

CSE1222: Lecture 7 The Ohio State University 28

Page 29: CSE1222: Lecture 7The Ohio State University1. logExample.cpp // example of log(k) for k = 1,2,..,8... int main() { cout

FOR LOOPS

CSE1222: Lecture 7 The Ohio State University 29

Page 30: CSE1222: Lecture 7The Ohio State University1. logExample.cpp // example of log(k) for k = 1,2,..,8... int main() { cout

logFor.cpp// example of for loop for log(k) for k = 1,2,..,8

#include <iostream>#include <cmath>using namespace std;

int main(){ for (int k = 1; k <= 8; k++) { cout << "log(" << k << ") = " << log(double(k)) << endl; }

return 0;}

CSE1222: Lecture 7 The Ohio State University 30

Page 31: CSE1222: Lecture 7The Ohio State University1. logExample.cpp // example of log(k) for k = 1,2,..,8... int main() { cout

logFor.cpp... for (int k = 1; k <= 8; k++) { cout << "log(" << k << ") = " << log(double(k)) << endl; }...

> logFor.exelog(1) = 0log(2) = 0.693147log(3) = 1.09861log(4) = 1.38629log(5) = 1.60944log(6) = 1.79176log(7) = 1.94591log(8) = 2.07944

CSE1222: Lecture 7 The Ohio State University 31

Page 32: CSE1222: Lecture 7The Ohio State University1. logExample.cpp // example of log(k) for k = 1,2,..,8... int main() { cout

for Loop Syntax

for (initialize; condition; alter)

{statement1;statement2;statement3;statement4;...

}

CSE1222: Lecture 7 The Ohio State University 32

Page 33: CSE1222: Lecture 7The Ohio State University1. logExample.cpp // example of log(k) for k = 1,2,..,8... int main() { cout

for Loop Syntax (2) Initializing list

A statement to set the starting value(s) of variables (normally a loop counter)

Expression The looping condition

Altering list Statement that is executed at the end of every loop traversal Normally determines how the counter is manipulated after each

pass through the loop

Important note: At the end of a pass through the loop, the statements in the altering list is executed BEFORE the loop expression is evaluated

CSE1222: Lecture 7 The Ohio State University 33

Page 34: CSE1222: Lecture 7The Ohio State University1. logExample.cpp // example of log(k) for k = 1,2,..,8... int main() { cout

How for Loops Work1. First, the initialization statements are executed

2. Then the conditional expression is tested. If it is true, then the statement(s) within the loop structure is/are executed.

3. Once the end of those statements is reached, then altering statements are executed, and the process is repeated.

4. If the expression ever evaluates to false, then the loop statement is exited, and the program continues beyond the loop.

CSE1222: Lecture 7 The Ohio State University 34

Page 35: CSE1222: Lecture 7The Ohio State University1. logExample.cpp // example of log(k) for k = 1,2,..,8... int main() { cout

Control Flow of a for Loop

TRUE

FALSE

Statement 1

Code after loop

InitializeStatement;

Return tolooping condition

...

Altering statement;

Code prior to loop

Condition is true?

CSE1222: Lecture 7 The Ohio State University 35

Page 36: CSE1222: Lecture 7The Ohio State University1. logExample.cpp // example of log(k) for k = 1,2,..,8... int main() { cout

for Loop Example for (int k = 1; k <= 8; k++) { cout << "log(" << k << ") = " << log(double(k)) << endl; }

// the while-loop equivalent: int k(0); . . . k = 1; while (k <= 8) { cout << "log(" << k << ") = " << log(double(k)) << endl; k++; }

CSE1222: Lecture 7 The Ohio State University 36

Page 37: CSE1222: Lecture 7The Ohio State University1. logExample.cpp // example of log(k) for k = 1,2,..,8... int main() { cout

for Loop Example2// Compute n logarithms:

for (int k = 1; k <= n; k++) { cout << "log(" << k << ") = " << log(double(k)) << endl; }

// the while-loop equivalent: int k(0); . . . k = 1; while (k <= n) { cout << "log(" << k << ") = " << log(double(k)) << endl; k++; }

CSE1222: Lecture 7 The Ohio State University 37

Page 38: CSE1222: Lecture 7The Ohio State University1. logExample.cpp // example of log(k) for k = 1,2,..,8... int main() { cout

(Too) Clever for Loop Example double x(0.0); cout << “Enter Number: “; for (cin >> x; x <= 0; cin >> x) // a while loop is better { cout << "Input must be positive." << endl; cout << "Enter number: "; }

// the while-loop equivalent: double x(0.0); cout << “Enter number: “; cin >> x; while (x <= 0) { cout << "Input must be positive." << endl; cout << "Enter number: "; cin >> x; } cout << "log(" << x << ") = " << log(x) << endl;

CSE1222: Lecture 7 The Ohio State University 38

Page 39: CSE1222: Lecture 7The Ohio State University1. logExample.cpp // example of log(k) for k = 1,2,..,8... int main() { cout

for Loops for loops and while loops are

interchangeable

A for loop is a pre-test loop

Whether to use a while or a for loop is a question of style and readability

Use for loops to count from a to bUse while loops to iterate until some condition is

satisfied

CSE1222: Lecture 7 The Ohio State University 39

Page 40: CSE1222: Lecture 7The Ohio State University1. logExample.cpp // example of log(k) for k = 1,2,..,8... int main() { cout

for Loop Example4 for (int k = 1; k <= 8; k++) { cout << "log(" << k << ") = " << log(double(k)) << endl; } cout << k << endl; // SYNTAX ERROR

// Variable k can be declared before the for-loop int k(0); for (k = 1; k <= 8; k++) { cout << "log(" << k << ") = " << log(double(k)) << endl; } cout << k << endl; // What is the value of k?

CSE1222: Lecture 7 The Ohio State University 40

Page 41: CSE1222: Lecture 7The Ohio State University1. logExample.cpp // example of log(k) for k = 1,2,..,8... int main() { cout

Using Nested Loops A loop inside of another loop Extremely useful and very common

for (int i = 1; i <= 5; i++){ cout << “i is now “ << i << endl;

//inner (nested) loop for (int j = 1; j <= 4; j++) {

cout << “j is now “ << j << endl; }

} //What is the output?

CSE1222: Lecture 7 The Ohio State University 41

Page 42: CSE1222: Lecture 7The Ohio State University1. logExample.cpp // example of log(k) for k = 1,2,..,8... int main() { cout

TRUE

TRUE

FALSE

cout“i is now..”

Code after loop

int i = 1;

i++;

int j = 1;

cout“j is now..”

j++;

FALSE

i <= 5?

j <= 4?

CSE1222: Lecture 7 The Ohio State University 42

Page 43: CSE1222: Lecture 7The Ohio State University1. logExample.cpp // example of log(k) for k = 1,2,..,8... int main() { cout

Nested for loops: square.cpp// print a square of x's... int length(0);

cout << "Enter square edge length: "; cin >> length;

for (int row = 1; row <= length; row++) { // print length x's for (int col = 1; col <= length; col++) { cout << "x"; } cout << endl; // print newline to finish row }...

CSE1222: Lecture 7 The Ohio State University 43

Page 44: CSE1222: Lecture 7The Ohio State University1. logExample.cpp // example of log(k) for k = 1,2,..,8... int main() { cout

Nested for loops: square.cpp... for (int row = 1; row <= length; row++) { // print length x's for (int col = 1; col <= length; col++) { cout << "x"; } cout << endl; // print newline to finish row }...

> square.exeEnter square edge length: 6xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

CSE1222: Lecture 7 The Ohio State University 44

Page 45: CSE1222: Lecture 7The Ohio State University1. logExample.cpp // example of log(k) for k = 1,2,..,8... int main() { cout

Nested for loops: diagonal.cpp// print a diagonal of x's... int length(0);

cout << "Enter diagonal length: "; cin >> length;

for (int row = 1; row <= length; row++) { // print (row-1) spaces for (int col = 1; col <= row-1; col++) { cout << " "; } cout << "x" << endl; // print x on diagonal }...

CSE1222: Lecture 7 The Ohio State University 45

Page 46: CSE1222: Lecture 7The Ohio State University1. logExample.cpp // example of log(k) for k = 1,2,..,8... int main() { cout

Nested for loops: diagonal.cpp... for (int row = 1; row <= length; row++) { // print (row-1) spaces for (int col = 1; col <= row-1; col++) { cout << " "; } cout << "x" << endl; // print x on diagonal }...

> diagonal.exeEnter diagonal length: 6x x x x x x

CSE1222: Lecture 7 The Ohio State University 46

Page 47: CSE1222: Lecture 7The Ohio State University1. logExample.cpp // example of log(k) for k = 1,2,..,8... int main() { cout

squareError.cpp// version of square.cpp with errors... int length(0);

cout << "Enter square edge length: "; cin >> length;

for (int row = 1; row <= length; row++); { // print length x's for (int col = 1; col <= length; col++); { cout << "x"; } cout << endl; // print newline to finish row }...

CSE1222: Lecture 7 The Ohio State University 47

Page 48: CSE1222: Lecture 7The Ohio State University1. logExample.cpp // example of log(k) for k = 1,2,..,8... int main() { cout

do-while loops A do-while loop checks the condition at the

end of the loop

Example: char c(‘n’); do {

... //rest of the program cout << “Do you wish to continue: “;

cin >> c; } while (c == ‘y’ || c == ‘Y’);

See text for more details.

CSE1222: Lecture 7 The Ohio State University 48

Page 49: CSE1222: Lecture 7The Ohio State University1. logExample.cpp // example of log(k) for k = 1,2,..,8... int main() { cout

Conclusion on Loops

Loops are generally used for repetition of a section of code

There are three basic types:while, for, and do-whilewhile and for are pretest (entrance

controlled)do-while is posttest (exit controlled)

CSE1222: Lecture 7 The Ohio State University 49

Page 50: CSE1222: Lecture 7The Ohio State University1. logExample.cpp // example of log(k) for k = 1,2,..,8... int main() { cout

Common Programming Errors (1)

Use == when comparing for equivalence in while, for, and do-while statements!

(Same as using == in if-statements)

Precision problem: double x, y;. . . “while (x != y)” may always be true even

though mathematically x should equal y

CSE1222: Lecture 7 The Ohio State University 50

Page 51: CSE1222: Lecture 7The Ohio State University1. logExample.cpp // example of log(k) for k = 1,2,..,8... int main() { cout

Common Programming Errors (1)For each statement, what is the output?

for (int i = 1; i < 7; i++) { cout << i << endl; }

for (int i = 1; i <= 7; i++) { cout << i << endl; }

for (int i = 0; i <= 7; i++){ cout << i << endl; }

for (int i = 0; i < 7; i++)

{ cout << i << endl; }

CSE1222: Lecture 7 The Ohio State University 51

Page 52: CSE1222: Lecture 7The Ohio State University1. logExample.cpp // example of log(k) for k = 1,2,..,8... int main() { cout

Common Programming Errors (1)For each statement, what is the output?

for (int i = 1; i < 7; i++) { cout << i; }

for (int i = 1; i < 7; i++){

cout << “Row “ << i;for (int j = 1; j < 4; j++){ cout << “ Col “ << j << endl; }

}

CSE1222: Lecture 7 The Ohio State University 52

Page 53: CSE1222: Lecture 7The Ohio State University1. logExample.cpp // example of log(k) for k = 1,2,..,8... int main() { cout

Common Programming Errors (2) Do not place a semicolon at the

end of a for statement:int i;for (i = 1; i <= 10; i++);{ cout << “i = “ << i << endl; }

What does this output?

CSE1222: Lecture 7 The Ohio State University 53

Page 54: CSE1222: Lecture 7The Ohio State University1. logExample.cpp // example of log(k) for k = 1,2,..,8... int main() { cout

Common Programming Errors (3) Use semicolons, not commas, to separate

items in a for statement:for (i=0, i<10, i++) //invalidfor (i=0; i<10; i++) //valid

Do not forget the semicolon at the end of the while statement in a do-while loopdo {

...} while(x > 0);

CSE1222: Lecture 7 The Ohio State University 54

Page 55: CSE1222: Lecture 7The Ohio State University1. logExample.cpp // example of log(k) for k = 1,2,..,8... int main() { cout

LOOP PROGRAMMING

TECHNIQUES

CSE1222: Lecture 7 The Ohio State University 55

Page 56: CSE1222: Lecture 7The Ohio State University1. logExample.cpp // example of log(k) for k = 1,2,..,8... int main() { cout

Interactive Input with a loopint main(){

double x(0.0), total(0.0), average(0.0);const int NUM_INPUTS(4);

total = 0.0;for (int i = 0; i < NUM_INPUTS; i++){

// ask user for a numbercout << "Enter a number: ";cin >> x;

total = total + x;}

average = total / NUM_INPUTS;cout << "The average of the entered values is: "

<< average << endl;}

CSE1222: Lecture 7 The Ohio State University 56

Page 57: CSE1222: Lecture 7The Ohio State University1. logExample.cpp // example of log(k) for k = 1,2,..,8... int main() { cout

Selection within a Loopint main(){

double x(0.0), postot(0.0), negtot(0.0);const int NUM_INPUTS(5);

// NOTE: postot and negtot initialized to 0.for (int i = 1; i <= NUM_INPUTS; i++){

cout << "Enter a number: ";cin >> x;

// Selection: Separate positive from negative inputs.if (x > 0)

{ postot = postot + x; }else

{ negtot = negtot + x; }}

cout << "The positive total is " << postot << endl;cout << "The negative total is " << negtot << endl;

return(0);}

CSE1222: Lecture 7 The Ohio State University 57

Page 58: CSE1222: Lecture 7The Ohio State University1. logExample.cpp // example of log(k) for k = 1,2,..,8... int main() { cout

Selection within a Loop (2)int main(){

double x(0.0), postot(0.0), negtot(0.0);

cout << "Enter a number: ";cin >> x;

// NOTE: postot and negtot initialized to 0.while (x != 0.0){

// Selection: Separate positive from negative inputs.if (x > 0)

{ postot = postot + x; }else

{ negtot = negtot + x; }

cout << "Enter a number: ";cin >> x;

}

cout << "The positive total is " << postot << endl;cout << "The negative total is " << negtot << endl;

. . .

CSE1222: Lecture 7 The Ohio State University 58

Page 59: CSE1222: Lecture 7The Ohio State University1. logExample.cpp // example of log(k) for k = 1,2,..,8... int main() { cout

Evaluating Functions of One Variable// Calculates several values for y = 10x² + 3x

- 2int main(){

int x(0), y(0), xmin(0), xmax(0);

cout << "Minimum and maximum x values: ";cin >> xmin >> xmax;

for (x = xmin; x <= xmax; x++){

y = 10 * pow(x, 2) + 3 * x – 2; cout << "x = " << x

<< " f(x) = " << y << endl; }

}

CSE1222: Lecture 7 The Ohio State University 59

Page 60: CSE1222: Lecture 7The Ohio State University1. logExample.cpp // example of log(k) for k = 1,2,..,8... int main() { cout

Prompting for Correct Inputint main(){

const int MAX_AGE(125);int age(0);

cout << “Enter your age (1-“ << MAX_AGE << “):”;cin >> age;

while (age <= 0 || age > MAX_AGE){

cout << “Invalid input. Try again.” << endl;

cout << “Enter your age (1-“ << MAX_AGE << “):”;cin >> age;

}}

CSE1222: Lecture 7 The Ohio State University 60

Page 61: CSE1222: Lecture 7The Ohio State University1. logExample.cpp // example of log(k) for k = 1,2,..,8... int main() { cout

Summation: Sum of Cubes...int main(){

long sum(0);int n(0);

cout << “Enter number of terms in the summation: “;cin >> n;

for (int i = 1; i <= n; i++) {

sum += i*i*i; }

cout << “1^3 + 2^3 + 3^3 + ... + “ << n << “^3 = “ << sum << endl;

return 0;}

CSE1222: Lecture 7 The Ohio State University 61

Page 62: CSE1222: Lecture 7The Ohio State University1. logExample.cpp // example of log(k) for k = 1,2,..,8... int main() { cout

Summation Over Two Variables Input: n

Compute

CSE1222: Lecture 7 The Ohio State University 62

Page 63: CSE1222: Lecture 7The Ohio State University1. logExample.cpp // example of log(k) for k = 1,2,..,8... int main() { cout

Summation Over Two Variables Compute

Table of (i-j) (where j ≤ i):

CSE1222: Lecture 7 The Ohio State University 63

(i-j) j=0 j=1 j=2 j=3 ...

i=0 0 ...

i=1 1 0 ...

i=2 2 1 0 ...

i=3 3 2 1 0 ...

... ... ... ... ... ...

Page 64: CSE1222: Lecture 7The Ohio State University1. logExample.cpp // example of log(k) for k = 1,2,..,8... int main() { cout

Summation Over Two Variables

Input: n

Compute Algorithm:

1. sum ← 0;

2. for i ← 0 to n do

3. for j ← 0 to i do

4. sum ← sum + (i-j);

CSE1222: Lecture 7 The Ohio State University 64

Page 65: CSE1222: Lecture 7The Ohio State University1. logExample.cpp // example of log(k) for k = 1,2,..,8... int main() { cout

Algorithm

From “Programming and Problem Solving with C++” By Nell Dale:

An algorithm is “a step-by-step procedure for solving a problem”.

CSE1222: Lecture 7 The Ohio State University 65

Page 66: CSE1222: Lecture 7The Ohio State University1. logExample.cpp // example of log(k) for k = 1,2,..,8... int main() { cout

Summation Over Two Variables

Input: n

Compute Algorithm:

1. sum ← 0;

2. for i ← 0 to n do

3. for j ← 0 to i do

4. sum ← sum + (i-j);

CSE1222: Lecture 7 The Ohio State University 66

Page 67: CSE1222: Lecture 7The Ohio State University1. logExample.cpp // example of log(k) for k = 1,2,..,8... int main() { cout

Summation over two variables...int main(){ long sum(0); // Initialize sum to zero int n(0);

cout << "Enter max value of i: "; cin >> n;

for (int i = 0; i <= n; i++) { for (int j = 0; j <= i; j++) { sum = sum + (i-j); } }

cout << "sum_{i=0}^n sum_{j=0}^i (i-j) = " << sum << endl;

return 0;}

CSE1222: Lecture 7 The Ohio State University 67

Page 68: CSE1222: Lecture 7The Ohio State University1. logExample.cpp // example of log(k) for k = 1,2,..,8... int main() { cout

Printing a table using nested loops

Input: n

Output: Table of 1/(i-j)2 for i = 1,...,n and j = 1,...,n.

Don’t print anything when i = j. Why?

CSE1222: Lecture 7 The Ohio State University 68

Page 69: CSE1222: Lecture 7The Ohio State University1. logExample.cpp // example of log(k) for k = 1,2,..,8... int main() { cout

Printing a table using nested loops

Input: n

Output: Table of 1/(i-j)2 for i = 1,...,n and j = 1,...,n.

Algorithm:

1. for i ← 1 to n do

2. for j ← 1 to n do

3. if (i ≠ j) print 1/(i-j)2

4. else print "******"

5. print newline; (Why?)

CSE1222: Lecture 7 The Ohio State University 69

Page 70: CSE1222: Lecture 7The Ohio State University1. logExample.cpp // example of log(k) for k = 1,2,..,8... int main() { cout

Printing a table using nested loops...int main(){ int numRows(0); int diff(0);

cout << "Enter number of table rows: "; cin >> numRows;

cout.setf(ios::fixed); // fixed precision output

...

CSE1222: Lecture 7 The Ohio State University 70

Page 71: CSE1222: Lecture 7The Ohio State University1. logExample.cpp // example of log(k) for k = 1,2,..,8... int main() { cout

Printing a table using nested loops...for (int i = 1; i <= numRows; i++) { for (int j = 1; j <= numRows; j++) { if (i != j) { diff = i-j; cout << " " << 1.0/(diff*diff); } else { cout << " ****** "; } } cout << endl; // end row }...

CSE1222: Lecture 7 The Ohio State University 71

Page 72: CSE1222: Lecture 7The Ohio State University1. logExample.cpp // example of log(k) for k = 1,2,..,8... int main() { cout

> printTable.exeEnter number of table rows: 6 ****** 1.000000 0.250000 0.111111 0.062500 0.040000 1.000000 ****** 1.000000 0.250000 0.111111 0.062500 0.250000 1.000000 ****** 1.000000 0.250000 0.111111 0.111111 0.250000 1.000000 ****** 1.000000 0.250000 0.062500 0.111111 0.250000 1.000000 ****** 1.000000 0.040000 0.062500 0.111111 0.250000 1.000000 ****** >

CSE1222: Lecture 7 The Ohio State University 72

for (int i = 1; i <= numRows; i++){ for (int j = 1; j <= numRows; j++) { if (i != j) { diff = i-j; cout << " " << 1.0/(diff*diff); } else { cout << " ****** "; } } cout << endl; // end row }

Page 73: CSE1222: Lecture 7The Ohio State University1. logExample.cpp // example of log(k) for k = 1,2,..,8... int main() { cout

Problem: Print primes

Print prime numbers between 2 and n.

CSE1222: Lecture 7 The Ohio State University 73

Page 74: CSE1222: Lecture 7The Ohio State University1. logExample.cpp // example of log(k) for k = 1,2,..,8... int main() { cout

Print prime numbers

Input: n

Output: Prime numbers between 2 and n.

Algorithm:

1. for k ← 2 to n do

2. flag_composite ← false;

3. for j ← 2 to k-1 do

4. if (k mod j = 0) then

5. flag_composite ← true;

6. if (flag_composite = false) print k.

CSE1222: Lecture 7 The Ohio State University 74

Page 75: CSE1222: Lecture 7The Ohio State University1. logExample.cpp // example of log(k) for k = 1,2,..,8... int main() { cout

prime.cpp...int main(){ int n(0); bool flag_composite(false);

cout << "Enter n: "; cin >> n;...

CSE1222: Lecture 7 The Ohio State University 75

Page 76: CSE1222: Lecture 7The Ohio State University1. logExample.cpp // example of log(k) for k = 1,2,..,8... int main() { cout

prime.cpp... cout << "Prime numbers:" << endl; for (int k = 2; k <= n; k++) { flag_composite = false; for (int j = 2; j < k; j++) { if (k%j == 0) // if (k mod j == 0) { flag_composite = true; } }

if (!flag_composite) { cout << k << endl; // k is prime } }...

CSE1222: Lecture 7 The Ohio State University 76

Page 77: CSE1222: Lecture 7The Ohio State University1. logExample.cpp // example of log(k) for k = 1,2,..,8... int main() { cout

> prime.exeEnter n: 20235711131719

CSE1222: Lecture 7 The Ohio State University 77

for (int k = 2; k <= n; k++) { flag_composite = false; for (int j = 2; j < k; j++) { if (k%j == 0) // if (k mod j == 0) { flag_composite = true; } }

if (!flag_composite) { cout << k << endl; } // k is prime }

Page 78: CSE1222: Lecture 7The Ohio State University1. logExample.cpp // example of log(k) for k = 1,2,..,8... int main() { cout

Types of Loops

More loopsPretest Loops check the looping condition

first, then begins execution○ while ○ for

Posttest Loops begins execution first, then checks looping condition○ do-while

CSE1222: Lecture 7 The Ohio State University 78

Page 79: CSE1222: Lecture 7The Ohio State University1. logExample.cpp // example of log(k) for k = 1,2,..,8... int main() { cout

Summary while loops:

Repeat until some condition is fulfilled;Pretest loop.

for loops:Used for counting;3 parts: for (initialize; condition; alter){...}

Pretest loop. do-while loops:

Example: “Do you wish to continue?”Posttest loop.

CSE1222: Lecture 7 The Ohio State University 79