introduction to computers and programming lecture 8: more loops new york university

34
Introduction to Computers and Programming Lecture 8: More Loops New York University

Post on 20-Dec-2015

222 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Introduction to Computers and Programming Lecture 8: More Loops New York University

Introduction to Computers and Programming

Lecture 8: More LoopsNew York University

Page 2: Introduction to Computers and Programming Lecture 8: More Loops New York University

Road Map

• Sentinels• Sentinel Controlled Loops• Case Study: Sentinel Controlled Loop• Case Study: Nested Control Structures• do/while Loop• Summary of looping covered so far

• Reading– Chapter 3: 3.3.1, 3.3.2

Page 3: Introduction to Computers and Programming Lecture 8: More Loops New York University

review

• What are three ways to rewrite:x = x + 1;

• What are the three elements of a while loop?• What is the difference between pre and post

increment operators?• Are you guaranteed to execute the body of a while

loop at all?• What is an infinite loop?• True or False: You never want to use an infinite

loop?

Page 4: Introduction to Computers and Programming Lecture 8: More Loops New York University

4

Review

• Given:char c = 'a';

c++;

What is the value of variable c?• What method do you use to extract characters

from a String?– How would you use that method to get the first character

from a String?

• How are characters stored in memory?• What is the difference between the character '0'

and the integer 0?

Page 5: Introduction to Computers and Programming Lecture 8: More Loops New York University

Sentinels

Page 6: Introduction to Computers and Programming Lecture 8: More Loops New York University

Sentinel-controlled repetition

• Counter Controlled Repetition:– Simply means that we use a counter to tell you when to stop

repeating a statement or group of statements

– The examples from last class were counter-controlled repetition

• However, what if we want the user or the input to decide when to end the program?– Use a sentinel

Page 7: Introduction to Computers and Programming Lecture 8: More Loops New York University

Understanding Sentinels

• Sentinel: a special value that indicates the “end of data entry.”

• Also known as signal value, dummy value, or flag value

• For example:– -1 means end of data.– 0 means end of data.– "END" means ends of data– Depends on the specific application you are building.

• With a sentinel, we have an indefinite repetition, because the number of repetitions is unknown at the time we write the program (or start the loop).

2000 Prentice Hall, Inc. All rights reserved. Modified by Evan Korth

Page 8: Introduction to Computers and Programming Lecture 8: More Loops New York University

Using Sentinels

• How are they used?– Programmer picks a value that would never be encountered

for normal data

– User enters normal data and then when done, enters the unusual value

– The loop will stop when seeing the unusual value

Page 9: Introduction to Computers and Programming Lecture 8: More Loops New York University

Using Sentinels cont’d

• For example, if entering age for people, could pick a sentinel of –1

• No one would expect to be –1 year old.

• Good practice is to remind the user in each iteration of the loop what the sentinel value is– For example,

System.out.println (" Enter age of current resident or –1 to end" );

Page 10: Introduction to Computers and Programming Lecture 8: More Loops New York University

/* A sentinel controlled loop */

/* A simple census taker */

import javax.swing.JOptionPane;

public class Sentinel

{

public static void main(String [] args)

{

int currentAge = 0 ;

String currentAgeAsString;

/* priming */

currentAgeAsString = JOptionPane.showInputDialog ("Enter age of resident: ") ;

currentAge = Integer.parseInt (currentAgeAsString);

/* testing: keep going until input is sentinel value */

while (currentAge != -1)

{

/* do some calculations with age, e.g. AVERAGE */

/*updating: get the next value from the user */

currentAgeAsString = JOptionPane.showInputDialog ("Enter age of resident: ") ;

currentAge = Integer.parseInt (currentAgeAsString);

}

System.exit (0);

}

}

Page 11: Introduction to Computers and Programming Lecture 8: More Loops New York University

Good Programming tips

• Pick a sentinel value that you are CERTAIN will never be confused with normal data

• Style: Remind user each iteration what the sentinel is

• Y2K-like problem– Programmers often used 9999 as a sentinel to end a loop

– Worry that on September 9, 1999 (sometimes abbreviated 9999) programs would erroneously stop executing before they were supposed to.

Page 12: Introduction to Computers and Programming Lecture 8: More Loops New York University

Case Study: Using Sentinel Controlled Loops

Page 13: Introduction to Computers and Programming Lecture 8: More Loops New York University

Formulating Algorithms with Top-Down, Stepwise Refinement

• Problem becomes: Develop a class-averaging program that will process an arbitrary number of grades each time the program is run.

– Unknown number of students

– How will the program know to end?

• Use sentinel value – Loop ends when user inputs the sentinel value

– Sentinel value chosen so it cannot be confused with a regular input (such as -1 in this case)

2000 Prentice Hall, Inc. All rights reserved.

Page 14: Introduction to Computers and Programming Lecture 8: More Loops New York University

Formulating Algorithms with Top-Down, Stepwise Refinement

• Top-down, stepwise refinement – Begin with a pseudocode representation of the top:

Determine the class average for the quiz

– Divide top into smaller tasks and list them in order: Initialize variablesInput, sum and count the quiz gradesCalculate and print the class average

• Many programs have three phases:– Initialization: initializes the program variables

– Processing: inputs data values and adjusts program variables accordingly

– Termination: calculates and prints the final results

2000 Prentice Hall, Inc. All rights reserved.

Page 15: Introduction to Computers and Programming Lecture 8: More Loops New York University

Formulating Algorithms with Top-Down, Stepwise Refinement

• Refine the initialization phase from Initialize variables to:

Initialize total to zeroInitialize counter to zero

• Refine Input, sum and count the quiz grades to Input the first grade (possibly the sentinel)While the user has not as yet entered the sentinel Add this grade into the running total Add one to the grade counter Input the next grade (possibly the sentinel)

2000 Prentice Hall, Inc. All rights reserved.

Page 16: Introduction to Computers and Programming Lecture 8: More Loops New York University

Formulating Algorithms with Top-Down, Stepwise Refinement

• Refine Calculate and print the class average toIf the counter is not equal to zero Set the average to the total divided by the counter Print the averageelse Print “No grades were entered”

2000 Prentice Hall, Inc. All rights reserved.

Page 17: Introduction to Computers and Programming Lecture 8: More Loops New York University

17

Initialize total to zeroInitialize counter to zero

Input the first grade (possibly the sentinel)

While the user has not as yet entered the sentinel Add this grade into the running totalAdd one to the grade counterInput the next grade (possibly the sentinel)

If the counter is not equal to zeroSet the average to the total divided by the counterPrint the average

elsePrint “No grades were entered”

Fig. 4.8 Class-average problem pseudocode algorithm with sentinel-controlled repetition.

2003 Prentice Hall, Inc. All rights reserved.

Page 18: Introduction to Computers and Programming Lecture 8: More Loops New York University

2003 Prentice Hall, Inc.All rights reserved.

Outline18

Average2.java

1 // Fig. 4.9: Average2.java2 // Class-average program with sentinel-controlled repetition.3 import java.text.DecimalFormat; // class to format numbers4 import javax.swing.JOptionPane;5 6 public class Average2 {7 8 public static void main( String args[] )9 {10 int total; // sum of grades11 int gradeCounter; // number of grades entered12 int grade; // grade value13 14 double average; // number with decimal point for average15 16 String gradeString; // grade typed by user17 18 // initialization phase19 total = 0; // initialize total20 gradeCounter = 0; // initialize loop counter21 22 // processing phase23 // get first grade from user 24 gradeString = JOptionPane.showInputDialog(25 "Enter Integer Grade or -1 to Quit:" );26 27 // convert gradeString to int 28 grade = Integer.parseInt( gradeString ); 29

Page 19: Introduction to Computers and Programming Lecture 8: More Loops New York University

2003 Prentice Hall, Inc.All rights reserved.

Outline19

Average2.java

Line 31

Line 45

30 // loop until sentinel value read from user31 while ( grade != -1 ) { 32 total = total + grade; // add grade to total33 gradeCounter = gradeCounter + 1; // increment counter34 35 // get next grade from user 36 gradeString = JOptionPane.showInputDialog(37 "Enter Integer Grade or -1 to Quit:" );38 39 // convert gradeString to int 40 grade = Integer.parseInt( gradeString ); 41 42 } // end while43 44 // termination phase45 46 47 // if user entered at least one grade...48 if ( gradeCounter != 0 ) {49 50 // calculate average of all grades entered51 average = (double) total / gradeCounter; 52 53 // display average with two digits of precision54 JOptionPane.showMessageDialog( null,55 "Class average is " + average ,56 "Class Average", JOptionPane.INFORMATION_MESSAGE );57 58 } // end if part of if...else59

loop until gradeCounter equals sentinel value (-1)

Page 20: Introduction to Computers and Programming Lecture 8: More Loops New York University

2003 Prentice Hall, Inc.All rights reserved.

Outline20

Average2.java

60 else // if no grades entered, output appropriate message61 JOptionPane.showMessageDialog( null, "No grades were entered",62 "Class Average", JOptionPane.INFORMATION_MESSAGE );63 64 System.exit( 0 ); // terminate application65 66 } // end main67 68 } // end class Average2

Page 21: Introduction to Computers and Programming Lecture 8: More Loops New York University

Case Study: Nested Control Structures

Page 22: Introduction to Computers and Programming Lecture 8: More Loops New York University

Nested control structures

• Problem – A college has a list of test results (1 = pass, 2 = fail) for 10

students

– Write a program that analyzes the results • If more than 8 students pass, print "Raise Tuition"

• Notice that– The program must process 10 test results

• Counter-controlled loop will be used

– Two counters can be used• One for number of passes, one for number of fails

– Each test result is a number—either a 1 or a 2• If the number is not a 1, we assume that it is a 2

2003 Prentice Hall, Inc. All rights reserved.

Page 23: Introduction to Computers and Programming Lecture 8: More Loops New York University

Nested control structures

• Top level outlineAnalyze exam results and decide if tuition should be raised

• First RefinementInitialize variables

Input the ten quiz grades and count passes and failures

Print a summary of the exam results and decide if tuition should be raised

• Refine Initialize variables to Initialize passes to zero

Initialize failures to zero

Initialize student counter to one

2003 Prentice Hall, Inc. All rights reserved.

Page 24: Introduction to Computers and Programming Lecture 8: More Loops New York University

Nested control structures

• Refine Input the ten quiz grades and count passes and failures to

While student counter is less than or equal to tenInput the next exam resultIf the student passed Add one to passeselse Add one to failuresAdd one to student counter

• Refine Print a summary of the exam results and decide if tuition should be raised to

Print the number of passesPrint the number of failuresIf more than eight students passed

Print “Raise tuition”

2003 Prentice Hall, Inc. All rights reserved.

Page 25: Introduction to Computers and Programming Lecture 8: More Loops New York University

25

Initialize passes to zeroInitialize failures to zeroInitialize student to one 

While student counter is less than or equal to ten Input the next exam result

If the student passed Add one to passes

else Add one to failures

  Add one to student counter

Print the number of passesPrint the number of failures

If more than eight students passed Print “Raise tuition”

Fig 4.10 Pseudocode for examination-results problem.

2003 Prentice Hall, Inc. All rights reserved.

Page 26: Introduction to Computers and Programming Lecture 8: More Loops New York University

2003 Prentice Hall, Inc.All rights reserved.

Outline26

Analysis.java

Line 19

Line 29

1 // Fig. 4.11: Analysis.java2 // Analysis of examination results.3 import javax.swing.JOptionPane;4 5 public class Analysis {6 7 public static void main( String args[] ) 8 {9 // initializing variables in declarations10 int passes = 0; // number of passes 11 int failures = 0; // number of failures12 int studentCounter = 1; // student counter 13 int result; // one exam result14 15 String input; // user-entered value16 String output; // output string17 18 // process 10 students using counter-controlled loop19 while ( studentCounter <= 10 ) {20 21 // prompt user for input and obtain value from user22 input = JOptionPane.showInputDialog(23 "Enter result (1 = pass, 2 = fail)" );24 25 // convert result to int26 result = Integer.parseInt( input );27 28 // if result 1, increment passes; if...else nested in while29 if ( result == 1 ) 30 passes = passes + 1;

Loop until student counter is greater than 10

Nested control structure

Page 27: Introduction to Computers and Programming Lecture 8: More Loops New York University

2003 Prentice Hall, Inc.All rights reserved.

Outline27

Analysis.java

31 32 else // if result not 1, increment failures 33 failures = failures + 1; 34 35 // increment studentCounter so loop eventually terminates36 studentCounter = studentCounter + 1; 37 38 } // end while39 40 // termination phase; prepare and display results41 output = "Passed: " + passes + "\nFailed: " + failures;42 43 // determine whether more than 8 students passed44 if ( passes > 8 )45 output = output + "\nRaise Tuition";46 47 JOptionPane.showMessageDialog( null, output,48 "Analysis of Examination Results",49 JOptionPane.INFORMATION_MESSAGE );50 51 System.exit( 0 ); // terminate application52 53 } // end main54 55 } // end class Analysis

Page 28: Introduction to Computers and Programming Lecture 8: More Loops New York University

do/while Loop

Page 29: Introduction to Computers and Programming Lecture 8: More Loops New York University

The do/while Repetition Structure

• The do/while repetition structure – Similar to the while structure

– Condition for repetition tested after the body of the loop is performed

• All actions are performed at least once

– Format:do {

statement(s);

} while ( condition );

 

Page 30: Introduction to Computers and Programming Lecture 8: More Loops New York University

4.8 The do/while Repetition Structure

• Flowchart of the do/while repetition structure

true

false

action(s)

condition

Page 31: Introduction to Computers and Programming Lecture 8: More Loops New York University

31

public class DoWhileTest

{

public static void main(String args[])

{

int counter;

counter = 1;

do

{

System.out.println ("counter: "+ counter);

counter ++;

} while (counter <= 10);

}

}

Page 32: Introduction to Computers and Programming Lecture 8: More Loops New York University

Summary of Looping

Page 33: Introduction to Computers and Programming Lecture 8: More Loops New York University

Summary of Looping

• Two broad types of loops:– Counter-controlled repetition

• A counter controls the number of repetitions.

• Also known as a definite repetition, because we know in advance how many times the loop will be executed.

– Sentinel-controlled repetition• A sentinel controls the number of repetitions

• Also known as indefinite repetition, because we do not know in advance how many times the loop will be executed.

• In either case, watch out for infinite loops!• If your program requires some kind of loop, first

determine which kind of loop you want.

Page 34: Introduction to Computers and Programming Lecture 8: More Loops New York University

Summary of Looping

• Once you know which kind of loop you want, determine which while loop you want:– While loops

• condition is tested first; then action occurs.

• While loops are much more common than do/while loops.

– Do/while loops• action is run first; then, condition is tested.

• Use this if you want to make sure that your loop is guaranteed to be run at least once.