Counting
Problem
Given a set of nstudent’s examination marks (in the range 0 to 100) make a count
of the number of students that passed the examination. A pass is awarded for
all marks of 50 and above.
Algorithm
description
Prompt then read the number of marks to be processed
Initialize
count to zero.
~ While there are still marks to be processed
repeatedly do
(a) Read next mark.
(b) If it is a pass
(i.e.≥50)then add one to count.
Write
out total number of passes.
Pascal
implementation
Program passacount (input, output);
Conts passmark=50;
Var count {contains number of passes on
terminitation},
i {current number of marks processed},
m {current mark},
n {total number of marks to be processed}: integer;
begin {count the number of passed
(>=50) in a set of marks}
writeln (‘enter a number of marks n on a separate line followed by
the marks’);
readln (n);
assert : n >=0}
count := 0;
i := 0;
{invariant: count = number of marks in the first I read that are
>= passmark ᴧ i=<n}
While i<n do
Begin {read next mark, test it for pass
and update count if necessary}
i := i + 1;
read (m);
if eoln (input) then readln;
if m >= passmark then count := count +1
end;
{assert: count = number of passes in the set of n marks read}
Writeln (‘number of passes =’,
count)
End.
Notes on
design
1. Initially,
and each time through the loop, the variable count represents the number of
passes so far encountered. On termination (when i=n) count represents the total
number of passes in the set. Because i is incremented by 1 with each iteration,
eventually the condition i<n will be violated and the loop will terminate.
2. It
was possible to use substitution to improve on the original solution to the
problem. The simplest and most efficient solution to a problem is usually the
best all-round solution.
3. An
end-of-line test is included to handle multiple lines of data.
Applications
All forms of counting.
Tidak ada komentar:
Posting Komentar