CS303ELoops1 CS 303E Lecture 8: Loops Self-referentially, short for GNU's not UNIX, a...

43
CS303E Loops 1 CS 303E Lecture 8: Loops lf-referentially, short for GNU's not UNIX, Unix-compatible software system developed the Free Software Foundation (FSF). Which uld be expanded to GNU’s not UNIX’s not UNIX, ich could be expanded to NU's not UNIX’s not UNIX’s not UNIX, which uld be expanded to…….

Transcript of CS303ELoops1 CS 303E Lecture 8: Loops Self-referentially, short for GNU's not UNIX, a...

Page 1: CS303ELoops1 CS 303E Lecture 8: Loops Self-referentially, short for GNU's not UNIX, a Unix-compatible software system developed by the Free Software Foundation.

CS303E Loops 1

CS 303E Lecture 8:

LoopsSelf-referentially, short for GNU's not UNIX, a Unix-compatible software system developed by the Free Software Foundation (FSF). Which could be expanded to GNU’s not UNIX’s not UNIX,which could be expanded to GNU's not UNIX’s not UNIX’s not UNIX, whichcould be expanded to…….

Page 2: CS303ELoops1 CS 303E Lecture 8: Loops Self-referentially, short for GNU's not UNIX, a Unix-compatible software system developed by the Free Software Foundation.

CS303E Loops 2

Iteration – a Basic OperationExample of iteration – building a fence:

Move tools and materials to starting point.

Install first fence post.

Repeat until finished:

Move to position of next fence post.

Install next fence post.

Install fencing between new post

and previous post.

LoopBody ofloop isrepeated.

Initialization

Terminationcondition

Page 3: CS303ELoops1 CS 303E Lecture 8: Loops Self-referentially, short for GNU's not UNIX, a Unix-compatible software system developed by the Free Software Foundation.

CS303E Loops 3

while Loop — Syntax

while ( boolean_expression )statement;

or

while ( boolean_expression ){ statement;

. . .}

Continuationcondition

Loop body

Page 4: CS303ELoops1 CS 303E Lecture 8: Loops Self-referentially, short for GNU's not UNIX, a Unix-compatible software system developed by the Free Software Foundation.

CS303E Loops 4

Syntax and Semantics ofwhile Statements

while (<Boolean expression>) <statement>

while (<Boolean expression>){ <statement 1> . <statement n>}

?

statement

true

false

Page 5: CS303ELoops1 CS 303E Lecture 8: Loops Self-referentially, short for GNU's not UNIX, a Unix-compatible software system developed by the Free Software Foundation.

CS303E Loops 5

while Loop for Building Fence

Move tools and materials to starting point.

Install first fence post.

while (not finished)

{ Move to position of next fence post;

Install next fence post;

Install fencing between new post

and previous post;

}

Continuationcondition

Page 6: CS303ELoops1 CS 303E Lecture 8: Loops Self-referentially, short for GNU's not UNIX, a Unix-compatible software system developed by the Free Software Foundation.

CS303E Loops 6

Loops — two basic patternsCount-controlled loop: Number of iterations is determined before

the loop starts. Counts each iteration in a counter variable. Stops when the desired number of iterations

has been performed.

Event-controlled loop: Before each iteration, checks to see whether

some event has occurred. Continues until that event occurs. Number of iterations not known beforehand.

Page 7: CS303ELoops1 CS 303E Lecture 8: Loops Self-referentially, short for GNU's not UNIX, a Unix-compatible software system developed by the Free Software Foundation.

CS303E Loops 7

Count-controlled loop pattern

counter = initialValue;other initialization;while ( counter <= finalValue ){ do computation;

increment counter;}

Number of iterations is:finalValue – initialValue + 1

Page 8: CS303ELoops1 CS 303E Lecture 8: Loops Self-referentially, short for GNU's not UNIX, a Unix-compatible software system developed by the Free Software Foundation.

CS303E Loops 8

Designing Correct Loops Initialize all variables properly

• Plan how many iterations, then set the counter and the limit accordingly

Check the logic of the termination condition

Update the loop control variable properly

Page 9: CS303ELoops1 CS 303E Lecture 8: Loops Self-referentially, short for GNU's not UNIX, a Unix-compatible software system developed by the Free Software Foundation.

CS303E Loops 9

Count controlled loop exampleSpecification: Sum the squares of the first 10 positive

integers.

Algorithm:int sum = 0; // initialize sum so far

int count = 1; // initialize counter

while ( count <= 10 ) // 10 = final value

{ sum = sum + (count * count); // do computation

count = count + 1; // increment counter

}

sumField.setNumber(sum);

Page 10: CS303ELoops1 CS 303E Lecture 8: Loops Self-referentially, short for GNU's not UNIX, a Unix-compatible software system developed by the Free Software Foundation.

CS303E Loops 10

Off-by-One Errorint counter = 1;while (counter <= 10){ //Executes 10 passes <do something> counter++;}

int counter = 1;while (counter < 10){ //Executes 9 passes <do something> counter++;}

Page 11: CS303ELoops1 CS 303E Lecture 8: Loops Self-referentially, short for GNU's not UNIX, a Unix-compatible software system developed by the Free Software Foundation.

CS303E Loops 11

Example – Sum powers of 2

Specification: Sum the first max powers of 2: 2 + 4 + 8 + . . .

Algorithm in pseudo-code:

1. Get value for max;

2. Set count to 1, sum to 0, power to 1;

3. While ( count <= max )

{ a. Multiply power by 2; // 2, 4, 8, . . .

b. Increment sum by power; // 2 + 4 + 8 + . . .

c. Increment count by 1; // 1, 2, . . ., max

}

4. Display sum;

Page 12: CS303ELoops1 CS 303E Lecture 8: Loops Self-referentially, short for GNU's not UNIX, a Unix-compatible software system developed by the Free Software Foundation.

CS303E Loops 12

Code – Sum powers of 2

Specification: Sum the first max powers of 2: 2 + 4 + 8 + . . .

Code:

max = maxField.getNumber();

int count = 1, sum = 0, power = 1;

while ( count <= max )

{ power = power * 2; // 2, 4, 8, . . .

sum = sum + power; // 2 + 4 + 8 + . . .

count = count + 1; // 1, 2, . . ., max

}

sumField.setNumber (sum);

Page 13: CS303ELoops1 CS 303E Lecture 8: Loops Self-referentially, short for GNU's not UNIX, a Unix-compatible software system developed by the Free Software Foundation.

CS303E Loops 13

Tracing the loop

Suppose max = 5.

We want to calculate sum = 2 + 4 + 8 + 16 + 32.

max count power sum

Before loop starts: 5 1 1 0

After iteration 1: 5 2 2 2

After iteration 2: 5 3 4 6

. . .

After iteration 5: 5 6 32 62

Page 14: CS303ELoops1 CS 303E Lecture 8: Loops Self-referentially, short for GNU's not UNIX, a Unix-compatible software system developed by the Free Software Foundation.

CS303E Loops 14

Exercises

Sum the odd numbers from 1 to 10. Summing from 1 to N is easy. (Thanks to

Gauss)

2)1(1

nnin

i

Page 15: CS303ELoops1 CS 303E Lecture 8: Loops Self-referentially, short for GNU's not UNIX, a Unix-compatible software system developed by the Free Software Foundation.

CS303E Loops 15

Infinite Loopint counter = 1;while (counter <= 10){// Executes 5 passes <do something> counter = counter + 2;}

int counter = 1;while (counter != 10){// Runs forever <do something> counter = counter + 2;}

In general, avoid using != in loop termination conditions.

Page 16: CS303ELoops1 CS 303E Lecture 8: Loops Self-referentially, short for GNU's not UNIX, a Unix-compatible software system developed by the Free Software Foundation.

CS303E Loops 16

Event-controlled loop patterninitialization;while ( event has not occurred ){ do work; }Work must eventually cause event to occur.

HelloWorld in an Event Driven Programming World

while(true){System.out.print(“Hello World!! “);

}

Page 17: CS303ELoops1 CS 303E Lecture 8: Loops Self-referentially, short for GNU's not UNIX, a Unix-compatible software system developed by the Free Software Foundation.

CS303E Loops 17

Example – Sum powers of 2

Specification: Sum the powers of 2 up to a power <= limit.

Algorithm in pseudo-code:

1. Get value for limit;

2. Set sum to 0, power to 2;

3. While ( power <= limit )

{ a. Increment sum by power; // 2 + 4 + 8 + . . .

b. Multiply power by 2; // 4, 8, 16, . . .

}

4. Display sum;

Page 18: CS303ELoops1 CS 303E Lecture 8: Loops Self-referentially, short for GNU's not UNIX, a Unix-compatible software system developed by the Free Software Foundation.

CS303E Loops 18

Code – Sum powers of 2

limit = inputField.getNumber();

sum = 0;

power = 2;

while ( power <= limit )

{ sum = sum + power; // 2 + 4 + 8 + . . .

power = power * 2; // 4, 8, 16, . . .

}

outputField.setNumber (sum);

Page 19: CS303ELoops1 CS 303E Lecture 8: Loops Self-referentially, short for GNU's not UNIX, a Unix-compatible software system developed by the Free Software Foundation.

CS303E Loops 19

Mixing the two types of loops

Specification: Sum the first powers of 2, so long as power <= limit but not more than 10 powers.

max = maxField.getNumber();

limit = limitField.getNumber();

sum = 0; power = 2; count = 1;

while ( power <= limit && count <= max )

{ sum = sum + power; // 2 + 4 + 8 + . . .

power = power * 2; // 4, 8, 16, . . .

count = count + 1; // 2, 3, 4, . . .

}

outputField.setNumber (sum);

Page 20: CS303ELoops1 CS 303E Lecture 8: Loops Self-referentially, short for GNU's not UNIX, a Unix-compatible software system developed by the Free Software Foundation.

CS303E Loops 20

CS 303E Lecture 9:Loops II

"An apprentice carpenter may want only a hammer and saw, but a master craftsman employs many precision tools. Computer programming likewise requires sophisticated tools to cope with the complexity of real applications,and only practice with these tools will build skill in their use."- Robert L. Kruse, Data Structures and Program Design

Page 21: CS303ELoops1 CS 303E Lecture 8: Loops Self-referentially, short for GNU's not UNIX, a Unix-compatible software system developed by the Free Software Foundation.

CS303E Loops 21

Prime Numbers

Write a program to determine if a given number is prime.

Analysis / Design (algorithm)

Page 22: CS303ELoops1 CS 303E Lecture 8: Loops Self-referentially, short for GNU's not UNIX, a Unix-compatible software system developed by the Free Software Foundation.

CS303E Loops 22

Prime Number Implementation

Page 23: CS303ELoops1 CS 303E Lecture 8: Loops Self-referentially, short for GNU's not UNIX, a Unix-compatible software system developed by the Free Software Foundation.

CS303E Loops 23

Other Loops

Java provides syntax for two other types of loops

do - while loop for loop Any of these could be rewritten as a while loop.

Page 24: CS303ELoops1 CS 303E Lecture 8: Loops Self-referentially, short for GNU's not UNIX, a Unix-compatible software system developed by the Free Software Foundation.

CS303E Loops 24

do-while Loop Syntax

do

{ //body of loop

First_Statement;

...

Last_Statement;

} while(Boolean_Expression); Initialization code may precede loop body

Page 25: CS303ELoops1 CS 303E Lecture 8: Loops Self-referentially, short for GNU's not UNIX, a Unix-compatible software system developed by the Free Software Foundation.

CS303E Loops 25

do-while Loop

Loop test is after loop body so the body must execute at least once (minimum of at least one iteration)

May be either count controlled or event controlled loop• Good choice for event controlled loop

Something in body of loop should eventually cause Boolean_Expression to be false

Page 26: CS303ELoops1 CS 303E Lecture 8: Loops Self-referentially, short for GNU's not UNIX, a Unix-compatible software system developed by the Free Software Foundation.

CS303E Loops 26

do-while Exampleint count = 1;int number = 10;do //Display integers 1 - 10 on one line

{ System.out.print(count + “, “ ); count++;}while(count <= number);

Note System.out.print() is used and not System.out.println() so the numbers will all be on one line

Page 27: CS303ELoops1 CS 303E Lecture 8: Loops Self-referentially, short for GNU's not UNIX, a Unix-compatible software system developed by the Free Software Foundation.

CS303E Loops 27

for loop

for — A simpler count-controlled loop.The following two loops are equivalent:

i = 1;while ( i <= n ) for ( i = 1; i <= n; i = i+1 )

{ work { work i = i + 1; }}

Still need while for event-controlled loops and mixed loops (count- and event-controlled).

Page 28: CS303ELoops1 CS 303E Lecture 8: Loops Self-referentially, short for GNU's not UNIX, a Unix-compatible software system developed by the Free Software Foundation.

CS303E Loops 28

for Loop Syntax and Semanticsfor (initialization statement; termination condition; update statement) loop body statement(s)

terminationcondition

loop bodystatement(s)

true

falseinitializationstatement

updatestatement

Page 29: CS303ELoops1 CS 303E Lecture 8: Loops Self-referentially, short for GNU's not UNIX, a Unix-compatible software system developed by the Free Software Foundation.

CS303E Loops 29

for Example

Compute and output first 10 integers and their squares:

for (int i = 1; i <= 10; i++) System.out.println(i + " " + i*i + "\n");

initialization statement int i = 1; termination condition i <= 10update statement i++ (or i = i + 1)

Page 30: CS303ELoops1 CS 303E Lecture 8: Loops Self-referentially, short for GNU's not UNIX, a Unix-compatible software system developed by the Free Software Foundation.

CS303E Loops 30

for loop Initialization, loop test, and loop counter change are part of the

syntax. Contrast with while loop.

Execution sequence:1. Initialization- executes only the first iteration of the loop

2. Boolean_Expression - the loop test

3. loop body - execute only if loop test is true

4. After_Loop_Body - typically changes the loop counter

5. Boolean_Expression - Repeat the loop test (step 2), etc.

Page 31: CS303ELoops1 CS 303E Lecture 8: Loops Self-referentially, short for GNU's not UNIX, a Unix-compatible software system developed by the Free Software Foundation.

CS303E Loops 31

Another for Example

Count down from 9 to 0for(int count = 9; count >= 0; count--)

{

System.out.print("T = " + count);

System.out.println(" and counting");

}

System.out.println("Blast off!");

Page 32: CS303ELoops1 CS 303E Lecture 8: Loops Self-referentially, short for GNU's not UNIX, a Unix-compatible software system developed by the Free Software Foundation.

CS303E Loops 32

Testing Loops

Check with small values or boundary values (1, 0, -1, limit).

Find a formula for the n-th iteration. Display a trace if things aren’t working.

• System.out.println(“x = “ + x + “ y = “ + y);where x and y are the variables of concern.

Page 33: CS303ELoops1 CS 303E Lecture 8: Loops Self-referentially, short for GNU's not UNIX, a Unix-compatible software system developed by the Free Software Foundation.

CS303E Loops 33

A Tester Programimport BreezyGUI.*;

public class Tester{

public static void main(String[] args){ int counter = 1; while (counter <= 10){ System.out.println("Counter = " + counter); counter = counter + 2; } GBFrame.pause(); }

}

A non-GUI program for trying things out quickly.

Page 34: CS303ELoops1 CS 303E Lecture 8: Loops Self-referentially, short for GNU's not UNIX, a Unix-compatible software system developed by the Free Software Foundation.

CS303E Loops 34

Text Areas Another window component.

TextArea areaName = addTextArea (

“initial value”, row, col, width, height); Like a text field, except has scroll bars and can

display any width and number of rows of text. May want width and/or height > 1. A part of the Java awt, as is Label, TextField,

Button. BreezyGUI just makes them easier to use

Page 35: CS303ELoops1 CS 303E Lecture 8: Loops Self-referentially, short for GNU's not UNIX, a Unix-compatible software system developed by the Free Software Foundation.

CS303E Loops 35

TextArea methods

setText (aString) -- void (no value returned).

getText () -- returns String.

append (aString) -- void (no value returned).

Appends aString to the end of the TextArea.

Remember, to go to next line you need \n

Page 36: CS303ELoops1 CS 303E Lecture 8: Loops Self-referentially, short for GNU's not UNIX, a Unix-compatible software system developed by the Free Software Foundation.

CS303E Loops 36

Output 10 Numbers to a Text Area

TextArea outputArea = addTextArea("", 1,1,2,5);

for (int i = 1; i <= 10; i++) outputArea.append(i + "\n");

Page 37: CS303ELoops1 CS 303E Lecture 8: Loops Self-referentially, short for GNU's not UNIX, a Unix-compatible software system developed by the Free Software Foundation.

CS303E Loops 37

Output 10 Numbers to a Text Area

TextArea outputArea = addTextArea("", 1,1,2,5);

for (int i = 1; i <= 10; i++) outputArea.append(i + "\n");

// or

String outputStr = "";for (int i = 1; i <= 10; i++) outputStr = outputStr + i + "\n";outputArea.setText(outputStr);

Page 38: CS303ELoops1 CS 303E Lecture 8: Loops Self-referentially, short for GNU's not UNIX, a Unix-compatible software system developed by the Free Software Foundation.

CS303E Loops 38

Method Format.justifyFormat is part of the BreezyGUI package

Justify data (left, right, or centered) in a field of width characters, with precision decimal places.

String justify (char alignment, // ‘l’ | ‘c’ | ‘r’type data, // data to be justifiedint width, // field widthint precision) // decimal places (double only)

type = String or char or long or double

Page 39: CS303ELoops1 CS 303E Lecture 8: Loops Self-referentially, short for GNU's not UNIX, a Unix-compatible software system developed by the Free Software Foundation.

CS303E Loops 39

Format.justify

Format.justify(<a letter>, <a string>, <columns>)

Format.justify(<a letter>, <an int>, <columns>)

Format.justify(<a letter>, <a double>, <columns>, <precision>)

These methods return String objects.

Page 40: CS303ELoops1 CS 303E Lecture 8: Loops Self-referentially, short for GNU's not UNIX, a Unix-compatible software system developed by the Free Software Foundation.

CS303E Loops 40

Format.justifyFormat.justify(<a letter>, <a string>, <columns>)

Format.justify(<a letter>, <an int>, <columns>)

Format.justify(<a letter>, <a double>, <columns>, <precision>)

Format.justify('l', 34, 4) "34 "

Format.justify('r', 34, 4) " 34"

Format.justify('c', 34, 4) " 34 "

Format.justify('r', 34.346, 7, 2) " 34.35"

Page 41: CS303ELoops1 CS 303E Lecture 8: Loops Self-referentially, short for GNU's not UNIX, a Unix-compatible software system developed by the Free Software Foundation.

CS303E Loops 41

The Two Versions

while (counter <= 20){ sum = sum + counter; output.append(Format.justify('r', counter, 5) + Format.justify('r', sum, 10) + "\n"); counter++;}

while (counter <= 20){ sum = sum + counter; output.append(counter + " " + sum + "\n"); counter++;}

Page 42: CS303ELoops1 CS 303E Lecture 8: Loops Self-referentially, short for GNU's not UNIX, a Unix-compatible software system developed by the Free Software Foundation.

CS303E Loops 42

Justification of Text Output

Page 43: CS303ELoops1 CS 303E Lecture 8: Loops Self-referentially, short for GNU's not UNIX, a Unix-compatible software system developed by the Free Software Foundation.

CS303E Loops 43

Some practical considerationswhen using loops

The most common loop errors are unintended infinite loops and off-by-one errors in counting loops

Sooner or later everyone writes an unintentional infinite loop• To get out of an unintended infinite loop enter ^C (control-C)

Loops should tested thoroughly, especially at the boundaries of the loop test, to check for off-by-one and other possible errors• "Tracing" a variable (outputting its value each time through the

loop) is a common technique to test loop counters and troubleshoot off-by-one and other loop errors