Professional Documents
Culture Documents
06 CBCP2101 - Topic02
06 CBCP2101 - Topic02
2
LEARNING OUTCOMES
By the end of this topic, you should be able to:
1. Solve problems by using two algorithm representative techniques;
2. Test the algorithm execution process with step-by-step detailing; and
3. Build an algorithm.
INTRODUCTION
Topic 1 introduced two main phases in developing a program. One of which was
the problem-solving phase, which involves the use of algorithms. In this topic,
we will focus entirely on algorithms, from the aspect of representation up to its
implementation. (From a historical point of view, it was the famous
mathematician Alkhwarizmi (Algorithm) who first introduced the concept of
algorithms.)
This means that the steps will lead to an end or stop. At every step, the
subsequent action should uniquely be determined by the instructions and data
obtained at that time.
In order to represent algorithms by using flow charts, we can use the following
as a guide:
(d) Test the flow chart by tracing each symbol, comparing it with the expected
output.
Based on the guide given above, let us examine the flow chart on starting a car
engine, as shown in Figure 2.2.
ACTIVITY 2.1
Sketch a flow chart for the process of going for a tutorial session.
Pseudo-code or false codes are instructions that mimic the program code
(actual program instructions).
Whilst flow charts use diagrams, pseudo-codes are written using phrases or
words. To represent algorithms by using pseudo-codes, we need to follow the
rules of writing pseudo-codes as follows:
(a) Every step in an algorithm should not have more than two actions.
(c) The word End or Stop is used to show that the process has ended.
(d) The action that is allowed includes declaring variable names to identify the
set of variables that have a corresponding data type. Types of data might be
in the form of integer, real, character or others.
(h) The relational operators below are used to state the relationship between
two values:
(i) < Less than
(ii) <= Less than or equals to
(iii) > More than
(iv) >= More than or equals to
(v) ! = Not equal
(vi) == Equal
Example 2.1
Change lb unit to kg.
SELF-CHECK 2.1
(b) Identify and list the sub-problems. Each problem must be solved, in order
to get the results needed.
(c) For every sub-problem, identify and list the steps that must be taken to
solve it.
Output is the result that is needed. The format of how the output is to be
displayed, has also to be identified, during the construction of the algorithm. One
of the most common format used for displaying output information are tables.
Below is the input and output that have been identified in some problems.
Example 2.2
Determine whether a given year is a leap year or not.
Input: A year
Output: Message „Leap Year‰ or „Not Leap Year‰
Example 2.3
Calculate the average marks for the course TM 20200.
Example 2.4
Given the buying and selling price of an item, determine whether the
company made a profit, broke even or made a loss.
When the input and output are known, we will need to build a list of formulae
that will relate one to the other. Based on Example 2.4, the general formula
obtained is:
To test your understanding of input and output, answer the following question.
SELF-CHECK 2.2
Before proceeding further, take a short break, as the next section will need your
full attention.
Example 2.5
Given the name of a student, calculate the number of ÂaÊs in the name.
Solution:
The name of a student can be made up of more than one word. To count the
number of ÂaÊs in it, we need to get each letter and compare them. We need to
have a variable to act as a counter, to track the number of ÂaÊs that exist. The
letter ÂaÊ can exist in upper case or lower case. For example, in the name
„Najwa Amani‰ there are four ÂaÊs.
Step 2 and 4 can be done easily. However step 3 requires refinement. Step 3 looks
like a sub-problem that is easily solved, but if it is to be solved using a computer;
we will need to have detailed steps on how this will be done. Notice how the
refinement is done, by using the guide given next.
Now that you understand the refinement concept, here is the complete
explanation on algorithm, re-written for Example 2.5.
1. Start.
2. Input studentÊs name: studName.
3. Count the number of ÂaÊs in studName.
3.1 Set n = 1 and totalA = 0
3.2 Until there are characters to be read, execute the following steps.
After which, continue to step 4.
3.2.1 Read n-character
3.2.2 If n-character is the same as ÂAÊ or ÂaÊ, add 1 to totalA.
3.2.3 Increase n by 1.
4 Report „Number of ÂaÊs is totalA‰.
5. End.
In this easy example, the number of levels refined is only up to two levels. One of
the main steps which is step 3, is refined to be step 3.1 and 3.2. Then 3.2 is further
refined into steps 3.2.1, 3.2.2 and 3.2.3. For more complex problems, the level of
refinement may increase, with each step being detailed and executable. Below are
a few guidelines in summarising the solution:
(b) Sub-problems that have similar processes must be looked at together. This
will prevent overlapping and arrangements can be made for modules or
sub-problems to provide an overall solution.
(c) All sub-problems can be represented in the same way. Therefore, when all
the solutions to sub-problems are combined to create the original problem,
the result from the combination is easier to understand.
step a
If <Condition true>
Start_If
step 1
step 2
:
step k
End_If
Step k+1
If the condition is met, step 1 till step k will be executed. Then, step k + 1 is
executed. Alternatively, if the condition is not met, step k + 1 will be executed
without executing step 1 to step k.
Step 1 to step k is also known as the start_if and end_if block. Here we will see
that step k+1 will always be executed whether the condition is met or not met.
Step a which is put before the start_if and end_if block will always be executed
because the testing of the condition is after step a.
Note: Notice the indentations for steps in the block start_if ă end_if are indented
a little bit. This is to show that the steps are dependent on the results that are
obtained from the testing of the condition that is done.
Syntax that is given above can be pictured as a flow chart, as shown in Figure 2.5:
Example 2.6
Determine if the customers deserve to get a discount of RM10.00 from the
total payment charged. Customers will be categorised as deserving if the
total payment is RM60.00.
Note: Words that are written in italics like total_payment are variable names that
are recommended. Variables are words that can receive any type of value. You
are also free to use any other name as a variable. But it is good if the variable
name can reflect the task. As given above, total_payment refers to the total
payment that is charged to the customer.
Let us now trace the algorithm. Let us say the total_payment is RM80.00. Testing
done in step 3.0 is true because 80 > 60. Therefore, the control of the program will
enter the start_if-end_if block. This means that the total_payment will see a
deduction of 10. Then, the control of the program will exit from the block and
execute step 6.0. Therefore, the value of total_payment reported is RM70.00.
ACTIVITY 2.2
What if the total payment is RM48.00? Use the algorithm in Example 2.6
as a reference.
Figure 2.6: Flow chart for Example 2.6, single selection structure
Example 2.7
Determine the requirement of a student to sit for the examination based on
the number of lab sessions attended. The percentage of attendance at the lab
must be 80%. If it is less than that value, the student is categorised as not
qualified.
ACTIVITY 2.3
SELF-CHECK 2.3
If <true condition>
Start
step 1
step 2
:
step k
End_If
If_Not
Start
step k+1
step k+2
:
step n
End_If_Not
step n+1
The If < true condition > steps in, the start_if - end_if block will be executed.
Then, step n+1 will be executed ignoring the steps in the start_if_not - end_if_not
block.
However if the condition is not true or not met, the start_if_not - end_if_not
would be executed without executing the steps in the start_if - end_if. Step n+1
will still be executed whether the condition is met or not. This case is the same as
in the single selection.
A general form of a flow chart for the dual selection is shown in Figure 2.7 below.
Let us take a look at the example for a dual selection structure below:
Example 2.8
Determine the payment that will be charged to a customer for parking their
car in a car park. The payment rate charges are, if total time parked is 2
hours or less, the payment charged is RM2.00; but if the total time parked is
more than 2 hours, then RM6.00 is charged.
Assume:
in_time = 9.00
out_time = 13.00
total_time = 13.00-9.00 = 4
Testing at step 5.0 will be false because 4 is larger than 2. This will cause the
control of the program to execute the start_if_not - end_if_not block. At the last
step, total_payment will be reported as 6. See Figure 2.8 for the example above.
Figure 2.8: Flow chart for Example 2.8: Dual selection structure
ACTIVITY 2.4
Now, can you try to solve the problem by using in_time 8.00 and out_time
17.00? Use Example 2.8 as a reference.
Example 2.9
Determine the payment that is charged to the customers who parked their
cars in the parking lot. The payment rates charged are RM2.00 for the first
hour and RM1.00 for each subsequent hour.
In the algorithm above, if total_time > 1, and let us say the total_time is 2, then,
the start_if-end_if block (step 6.0 to 7.0) will not be executed. However, the
start_if_not-end_if_not block (step 9.0 to 10.0) will be executed.
In step 9.3, total_time now becomes 3; because 1 plus 2 is 3. Here the value 2 is
for the payment rate for the first hour. You need to remember that the payment
for the first hour is different from the subsequent hours. Total payment reported
in step 11.0 is 3.
ACTIVITY 2.5
Now try with the previous data which has the in_time 9:30 and out_time
4.30. Use the algorithm given in Example 2.9 as a reference.
SELF-CHECK 2.4
2.3.3 Multi-selection
This is the last selection structure. In multi-selection we are allowed to choose
only one statement block from a number of blocks that exist. The number of
statement blocks depends on the number of conditions. If there are n conditions,
then there are n+1 statement blocks, because we have a last statement block that
is not tied to any of the conditions. In the general form below, the statement
blocks are from step q till r.
If <true condition1>
Start
step 1
step 2
⁄
step k
End_If1
If_Not
If<true condition2>
Start
step k+1
step k+2
⁄
step m
End_If2
⁄
⁄
If_Not
If<true condition h>
Start
step n + 1
step n + 2
⁄
step p
End_Ifh
If_Not
step q
step q+1
⁄
step r
End_If_Not
Figure 2.9 shows the flow chart for the general structure of multi-selection.
Example 2.10
Input an integer number and determine whether that number is negative,
positive or zero. Print the results.
Let us trace the example above. Suppose that the value of N is 7. Testing at step
3.0 will be false because 7 is larger than 0. Step 4.0 till step 5.0 are ignored. When
testing at step 7.0 is executed, the result is true. Therefore, it will print „N is
positive‰.
ACTIVITY 2.6
Trace the value of 10 based on the algorithm above. What is the printed
result?
Example 2.11
Input bus passengerÊs age to determine the price of the tickets. If the age of
the passenger is 55 and above or between 6 to 12 years, then the ticket price is
50% of the normal ticket price. If the passengerÊs age is between 12 and 18
years, then the ticket price is only 75% of the normal ticket price. It is free for
passengers less than 6 years old.
From the question given, we can conclude that there are five groups of
passengers, as shown in Table 2.1 below:
Figure 2.10 is a flow chart that shows a multi-selection structure. Trace Figure
2.10 and compare it with the conditions stated in Example 2.11. The flow chart is
as follows:
For a loop controlling counter, the three components are put in special places,
such as:
start_for
step 1
step 2
Loop Body
step n
End_for
If the counter value is still less than the last value, the step in the start_for-
end_for block, which is steps 1 till n will be executed. This block is also known as
the loop body.
After the last step in the loop is executed, the value of the counter is updated
according to the increment that is stated. Notice however that the increment is
not necessarily done by adding 1 to the counter. The increment can be 2 or 3 and
so on. After the counter has been updated, the test is done again and the
execution of the loop body repeats until the condition that is set on the counter is
no longer fulfilled.
The loop ends and the control will get out of the loop. The step after the end_for
will be executed. Figure 2.12 shows the general flow chart for the counter
controlled loop.
Example 2.12
In Example 2.12, the start_for - end_for block will be executed five times.
Therefore, we need to trace the algorithm above while looking at Table 2.2.
i i < 10 Total
0
1 True 1 (0+1)
3 (1+2) True 4 (1+3)
5 (3+2) True 9 (4+5)
7 (5+2) True 16 (9+7)
9 (7+2) True 25 (16+9)
11 (9+2) False 25
The loop will stop when the counter i is more than 10, that is, when the
value i is 11. At this stage, the value of total will be 25.
(i) The counter starts at a larger value and will decrease to a smaller
value according to the decrement rate stated.
(ii) The condition for repetition is > or >= with the last value.
You need to remember that the initial_value must be a large value. After
the last step is executed, the value of the counter will be decreased
according to the rate specified. Just as in the increasing counter control
loop, the rate is not necessarily 1. Look at Example 2.13:
Example 2.13
Notice that in step 3.0, the initial_value is a large number that will be
decreased by 2 to its initial_value. Next, we look at Table 2.3 to trace the
loop:
i>=1 Total
0
9 True 9 (0+9)
7 (9-2) True 16 (9+7)
5 (7-2) True 21 (16+5)
3 (5-2) True 24 (21+3)
1 (3-2) True 25 (24+1)
-1 (1-2) False 25
The loop will stop when the condition is not fulfilled, that is when the
value of i is -1. At that instant, the total is 25. The end result of total in the
example with the increasing counter and the total in the example with the
decreasing counter is the same.
ACTIVITY 2.7
Figure 2.13: General Form and Flow Chart of Loop Structure with condition tested first
Example 2.14
Figure 2.14: General form and flow chart of loop structure with condition tested later
Example 2.15
In Example 2.15, the end result of total is the same as the loop before this,
which is 15. Notice in the tracing below, the number of tests for the
condition in the condition controlled loop for this form is one less than the
condition in the condition controlled loop in the form before this.
Example 2.16
Read one set of studentsÊ marks where if the marks are negative then the
input ends. Calculate the average marks.
In example 2.16, a negative mark input will end the loop because the test
condition (step 4.0) becomes false. In the example above, the number 999 can be a
sentry value because the maximum mark is 100. To make the number 999 as a
sentry value, step 4.0 in the algorithm has to be changed to Until mi = 999, that is,
when the mark mi is 999, then the statement becomes false and automatically
exits the loop.
ACTIVITY 2.8
For the algorithm in Example 2.16, what if the negative value is a valid
data?
Sentry value can also be of a type character. We can change the example above
and use the character „t‰ as a sentry value. Consider the changes made in
algorithm 2.16(B) below.
You have now learnt three types of control structures. Take a short break before
moving on to the next section.
2.4.4 Structuring
This method is used to solve problems by designing structure charts. The
benefits of using the structure chart are as follows:
(a) Able to identify the number of modules or sub-problems that are created
by breaking up the problem;
(b) Able to give input that is needed by a module or sub-problem that can be
shown in the chart; and
(c) Able to determine the output that is obtained from one module that can be
used in other modules.
(a) Problem
Solve the problem of calculating the gross pay and net pay for workers that
is made up of basic pay and overtime pay. The normal working hours are
40 hours. The rate for working overtime is twice the normal rate. If the
workerÊs pay exceeds RM500 per week, a tax of RM50 is deducted.
(b) Analysis
To calculate the pay, the information needed are the hours worked and the
hourly rate. The net pay of a worker can be obtained by deducting tax from
the pay if the pay exceeds RM500.
Taxable_Pay = 500.00
Tax = 50.00
Maximum_Hours = 40.0
Overtime_Rate = 2.0
Input:
Hours_Worked (float type)
Hourly_Rate (float type)
Output:
Gross_Pay (float type)
Net_Pay (float type)
Relevant Formula:
Normal_Pay = Work_Hours x Hourly_Rate
Overtime_Pay = Overtime_Hours x Overtime_Rate x Hourly_Rate
Gross_Pay = Normal_Pay + Overtime_Pay
Net_Pay = Gross_Pay - Tax
(d) Design
Initial Algorithm:
1.0 Start
2.0 Read Hours_Worked and Hourly_Rate.
3.0 Calculate Gross_Pay.
4.0 Calculate Net_Pay.
5.0 Print Gross_Pay and Net_Pay.
6.0 End
Step 3.0 and step 4.0 can be refined. Normally, our operation uses
refinement to get the calculated gross pay and net pay.
ANALYSIS
The first step in solving a problem is to determine what you are asked to do. Are
you supposed to convert measurement from km to miles, or vice versa? The
problem states clearly that you need to convert miles to km. Therefore, the
problem input is distance in miles and the problem output is distance in km.
Then, you will need to know the relationship between miles and km. Based on
the metric table, one mile is equal to 1.609km.
DESIGN
Next step, formulate an algorithm to represent this problem. Think logically of
the three major steps in a proper sequence.
Algorithm
Now you will need to decide if this algorithm can be refined further. Step 1
(getting data) and step 3 (displaying value) are basic steps and cannot be refined
anymore. Step 2 however, can be refined with additional detail. You can add the
information as step 2.1, indented under step 2.
The above steps are known as pseudo-code. You might be interested in drawing
a flowchart to represent the same algorithm. Take a look at the following
flowchart to get an idea of designing algorithms for programming tasks.
After finishing with this algorithm, you may want to do a desk checking before
proceeding with its implementation. How is that done? Let us say, step 1 gets a
distance of 10.0 miles and step 2.1 should convert the measurement to 1.609 X
10.0. You should then get 16.09 km as the result to be displayed in step 3.
Remember these values as you are going to use them in the implementation
phase later on.
One technique of interaction between a program and its user is, using the menu.
The menu is a list of items that can be selected by the user. Once the menu is
displayed, the program will wait for the user to input his or her choice. After the
user has chosen the item, the program will continue processing based on that
item.
The program will display a menu to get the type of conversion required. Once
that is done, it will ask the user for the input to be converted, do the calculation
and then display the result. After that, the program will display the menu again
and the process will continue until the user decides to stop the program.
ANALYSIS
The following formula is used to do the conversions:
1 hour = 60 minutes
1 feet = 0.3048 metres
1 Celsius = (5/9) * (Fahrenheit ă 32)
DESIGN
The menu to be displayed by the program is based on the selection listed in Table
2.6:
Table 2.6: Menu
Users choose the type of conversion by entering the corresponding code. If the
user enters a 0, the program ends. If the user enters any value other than the
above, it will be ignored. This means, the program will re-display the menu and
the user has to choose again.
Variable Explanation
choice Users choice from the menu
minutes Value of minutes input by the user
hours Keeps the converted value from minutes to hours
feet Value of feet input by the user
metres Keeps the converted value from feet to metres
fahrenheit Value of Fahrenheit input by the user
celsius Keeps converted value from Fahrenheit to Celsius
1.0 Start
2.0 Do
2.1 Display the menu
2.2 Input the choice from the user
2.2.1 IF (1 <= choice and choice <= 3)
Start_IF
Do the conversion and display the result
End_IF
3.0 Until (choice NOT 0)
4.0 End
Step 2.2.1 involves calculation that will perform the conversion and then display
the results. The calculation that is carried out depends on the type of choice
specified by the user in Step 2.2. Thus, Step 2.2.1 needs to be refined further, to
reflect the userÊs choice. The following is the refined and complete pseudo-code
after refining Step 2.2.1 above:
1.0 Start
2.0 Do
2.1 Display the menu
2.2 Input the choice from the user
2.2.1a IF (choice==1)
Start_IF
Input minutes from the user
Calculate hours
Display hours and minutes
End_IF
2.2.1b IF (choice==2)
Start_IF
Refined
Input feet from the user
steps
Calculate metres
Display feet and metres
End_IF
2.2.1c IF (choice==3)
Start_IF
Input fahrenheit from the user
Calculate celsius
Display fahrenheit and celsius
End_IF
3.0 Until (choice NOT 0)
4.0 End
The flow chart for the above pseudo-code is given below in Figure 2.17:
SELF-CHECK 2.5
(b) Input the values of length and width for a residential area in
feet measurement. Also enter the values of length and width
for the building of a house in feet measurement. Assume the
difference of a grassy area between them. Calculate the time
needed to cut grass at the rate of 2 square feet per second.
(b) You have been asked to input your name and then print it
five times.
CATEGORY BMI
Underweight less than 18.5
Normal 18.5 ă 24.9
Overweight class 1 25.0 ă 29.9
Obesity class 2a 30.0 ă 34.9
Obesity class 2b 35.0 ă 39.9
Obesity class 3 40.0 and above
(d) Create a pseudo-code for this problem. Accept two integer values as
input, for example, 3 and 7. Print all the integer numbers between
them, including those two numbers. If the first number is smaller
than the second number, then print the numbers in ascending order.
If otherwise, print the numbers in descending order.
For example:
Input: 3 7
Output: 3 4 5 6 7
Input: 7 3
Output: 7 6 5 4 3
Pseudo-code or false codes are instructions that mimic the program code
(actual program instructions).
Input is all the information that is relevant and needed to execute a process.
Single selection involves testing one condition only. The choice given
depends on whether the condition is met or not.
The dual selection structure involves testing for two conditions. Choices that
are given are the same as single-selection, that is, whether the condition is
met or not.
Algorithm Semantic
Flow chart Syntax
Pseudo-code