Ch04b Looping Subtasks
Ch04b Looping Subtasks
1
Looping Subtasks
▪ We will examine some basic algorithms that use the
while and if constructs. These subtasks include
⚫ Reading unknown quantity of data
⚫ Counting things
⚫ Accumulating (summing) totals
⚫ Searching for specific values
⚫ Finding extreme values
2
Looping Subtasks
▪ Examples will be based upon common models:
Priming Read or Input Count
Initialize program state Initialize program state
Read the first value (priming read) While (input count OK)
While (data exists) update program state as needed
update program state as needed Output final state
read next value(s)
Output final state
3
Counter-Controlled Repetition
▪ Number of items is known before loop
4
Sentinel-Controlled Repetition
▪ One way to handle an arbitrary number of
input values is to have the user enter a
special value to indicate the end of input.
▪ Such a value is a sentinel value.
⚫ Indicates end of valid input
25
⚫ Loop ends when sentinel value is read 43
⚫ Must choose a sentinel value that cannot be 67
confused with a regular input value. 96
12
58
44
-1
5
Sentinel-Controlled Priming Read
▪ For sentinel-controlled loops
1. Read before the loop (priming read)
2. Test input to make sure it is not the sentinel value
3. Process
4. Read again at the bottom of the loop
▪ Use the following model:
read before entering the loop
while (value_read != SENTINEL)
{
// process
…
read at bottom of loop
(before entering loop again)
}
6
Sentinel-Controlled Loop
using Priming Read
25
43
67
96
12
58
44
-1
7
Sentinel-Controlled Loop
using Input Count
25
43
67
96
12
58
44
-1
8
Example of sentinel-controlled loop
25 43
67 96
12 58
44 99
-1
9
Processing an arbitrary number of pairs
▪ Sometimes it is not possible
to find a sentinel value
▪ We can use
⚫ End-of-input controlled loops
➢ Uses return from scanf
➢ Can be fooled by invalid data
⚫ End-of-file controlled loops
➢ Uses function feof
10
End of Data
▪ Hardware & Software
End-Of-File
⚫ Keyboard
➢ Ctrl-d (Does not work on Mac!)
25 43
67 96
12 58
44 99
Ctrl-d The End Is Here!
11
Example: End-of-input controlled loop
using items read & priming read
25
43
67
96
12
58
44
12
Example: End-of-input controlled loop
using just items read
25
43
67
96
12
58
44
13
Example: End-of-input controlled loop
using number of items read
25 43
67 96
12 58
44 99
14
Detecting End-of-File
▪ Function: feof
⚫ Syntax: feof(file-pointer)
➢ Returns true or false
➢ Standard input: feof(stdin)
⚫ Use in a while loop -
while (!feof(stdin))
15
Example: End-of-file controlled loop
25
43
67
96
12
58 End of File
44
16
Example: end-of-file controlled loop
25 43
67 96
12 58 End of File
44 99
17
Looping Subtask: Counting
▪ Example: Find the number of scores in a file
⚫Here the program state that must be maintained
is a counter that maintains the number of scores
that have been read so far.
▪ Steps
⚫Declare an int variable for the count
⚫Initialize the count to zero
⚫Increment the count
in the body of the loop
18
Looping Subtask: Counting
19
Looping Subtask: Counting
20
Looping Subtask: Counting
21
Looping Subtask: Counting
22
Counting Example
▪ What if we want to print the number of passing scores
(scores >= 70)?
⚫ We need a mechanism that allows us to count only if the
score is greater than or equal to 70
⚫ Use if stmt
23
Looping Subtask: Counting
24
Counting Example
▪ What if we want to print the number of passing scores
(scores >= 70) and the number of failing scores?
⚫ Use if -else
25
Looping Subtask: Counting
26
Looping Subtask:
Accumulation (Summing)
27
Accumulating Example
28
Counting & Accumulating Example
▪ Problem
⚫ A class of ten students took a quiz.
⚫ The grades (integers in the range 0 to 100) for this quiz
are available to you.
⚫ Determine the class average on the quiz.
29
Counting & Accumulating Example
▪ Pseudocode:
Set total to zero
Set grade counter to one
While grade counter is less than or equal to ten
Input the next grade
Add the grade into the total
Add one to the grade counter
Set the class average to the total divided by ten
Print the class average
30
Looping Subtasks: Searching
31
Searching Exercise
Write a C program that
1. Reads a target score at the beginning of the file
2. Reads a set of scores and determines if the target
score is in the set of scores
3. If found prints
Target ## was found
otherwise prints
Target ## was not found
32
Looping Subtasks: Searching
33
Searching Improvement
▪ Stop searching if target has been found
34
Looping Subtasks: Finding Extremes
▪ Finding Extreme Values (e.g. maximum, minimum)
⚫ Need a variable (such as maxValue) to remember the
most extreme value encountered so far
25
43 96 is the max
67 12 is the min
96
12
58
44
35
Looping Subtasks: Finding Extremes
▪ Finding Extreme Values (e.g. maximum, minimum)
⚫ Initialize the maxValue (minValue) to some value
➢ maxValue: Lower value than any data
➢ minValue: Higher value than any data
➢ Or for both: The first data value
⚫ For each data item
➢ Compare the current value to maxValue (or minValue)
➢ If the current value is > maxValue (< minValue), replace maxValue
(minValue) with the current value.
36
Extremes Exercise
Write a C program that
1. Reads a set of scores from a file
2. Determines and prints the maximum score
37
Looping Subtasks: Finding Extremes
38
Programming in C
THE EN D
39