0% found this document useful (0 votes)
751 views

Selection Control Structure

The document discusses selection control structures in programming. It covers the basic IF statement and its variations like simple selection, combined selection, and nested IF statements. Examples are provided to illustrate how to use selection structures to write algorithms that process customer records, calculate employee pay, and sort characters. The case structure is also introduced as an alternative to nested IF statements for testing multiple conditions.

Uploaded by

faris_39
Copyright
© © All Rights Reserved
Available Formats
Download as DOC, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
751 views

Selection Control Structure

The document discusses selection control structures in programming. It covers the basic IF statement and its variations like simple selection, combined selection, and nested IF statements. Examples are provided to illustrate how to use selection structures to write algorithms that process customer records, calculate employee pay, and sort characters. The case structure is also introduced as an alternative to nested IF statements for testing multiple conditions.

Uploaded by

faris_39
Copyright
© © All Rights Reserved
Available Formats
Download as DOC, PDF, TXT or read online on Scribd
You are on page 1/ 18

Simple Program Design

"Chapter 4: Selction control


structures"
Chapter Outline
Selection control structures
The selection control structure
Algorithms using selection
The case structure
Chapter summary
Programming problems

The selection control structure allows computers to


make decisions.

The selection control structure


The selection control structure in pseudocode to
illustrate a choice between two or more actions,
depending on whether a condition is true or false.
This condistion is expressed with one of the following
relational operators:

< less than


> greater than
= equal to
<= less than or equal to
>= greater than or equal to
<> not equal to
In the IF statement, a choice is made between two alternate paths,
based on a decision about whether the 'condition' is true or false.
Here are some of the variations on the If statement.
1 Simple selection (simple IF statement)
The simple selection choose between two alternative
paths based on the condition being either ture or
false. Its pseudocode form is: IF, THEN, ELSE and
ENDIF.
IF account_balance < $300 THEN
service_charge = $5.00
ELSE
service_charge = $2.00
ENDIF
2 Simple selection with null false branch (null
ELSE statement)
A simple selection can have a NULL ELSE branch. In
that case the selection is choosing between
executing or bypassing an action.
IF student_attendance = part_time THEN
add 1 to part_time_count
ENDIF
Here, the part_time_count field will be altered only if the student's
attendance pattern is part time.
3 Combined selection (combined IF statement)

The IF statement can have a multiple condition


connected together by by the logical operators AND
and/or OR. The AND between conditions requires
both conditons to be true before executing the THEN
branch.
IF student_attendance = part_time
AND student_gender = female THEN
add 1 to fem_part_time_count
ENDIF
In the above IF, the student must be both part time and female to be
added to the count.
If student_attendance = part_time
OR student_gender = female THEN
add 1 to fem_part_time_count
ENDIF
In the above IF, the student will be added to the count if they are
part time OR if they are female.
IF record_code = '23'
OR update_code = delete
AND account_balance = zero THEN
delete customer record
ENDIF
The above IF is more compicated. The record will be delete if the
record code is 23 OR (if the update code is delete AND the account
balance is zero).
IF (record_code = '23'
OR update_code = delete)
AND account_balance = zero THEN
delete customer record
ENDIF

At first the above IF looks just like the previous IF. However, the
( ) changes how we interpret it. The record will be deleted if the
account blance is zero, AND one of the following is true: The
record code is 23 OR the update code is delete.) So, the record is
delete IF the record code is 23 AND the account balance is zero.
OR, the record will also be deleted IF the update code is delete and
the account balance is zero.
The NOT operator

The NOT operator turns the result of a condition


upside down! If the condition would have been true,
NOT makes it false. If the condition would have been
false, NOT makes it true. Usually, it is better to
reword the condition so you don't need the word
NOT, since the NOT is confussing. For example:
IF NOT (record_code = '23') THEN
update customer record
ENDIF
The above IF updates the customer record if the record code isn't
23. You can get rid of the NOT by replacing the = operator with <>
operator (which is not equal to).
Now consider the following:
IF NOT (record_code = '23'
AND update_code = delete) THEN
update customer record
ENDIF
The above IF means IF the record code is not equal 23 update the
customer record, OR IF update code is not equal delete update the
customer record. It could be rewritten as:
IF record_code <> '23'
OR update_code <> delete THEN
update customer record
ENDIF

4 Nested selection (nested IF statement)


A nested selection (IF) occurs when either the true of
false branch of one If has another IF statement init.
Linear nested IF statements

The linear nested IF statement is used when a field is


being tested for various values and a different action
is to be taken for each value.
IF record_code = 'A' THEN
increment counter_A
ELSE
IF record_code = 'B' THEN
increment counter_B
ELSE
IF record_code = 'C' THEN
increment counter_C
ELSE
increment error_counter
ENDIF
ENDIF
ENDIF
Non-linear IF statements

A non-linear nested IF occurs when a number of


different conditions need to be satisfied before a
particular action can occur. A compound condition
would make these easier to read
IF student_attendance = part_time THEN

IF student_gender = female THEN


IF student_age > 21 THEN
add 1 to mature_fem_pt_students
ELSE
add 1 to young_fem_pt_students
ENDIF
ELSE
add 1 to male_pt_students
ENDIF
ELSE
add 1 to full_time_students
ENDIF
Notice some of the ELSEs are not right next to their THEN
statements. This can be made easier to follow by rearraning it into
a linear nested IF, as shown below.
IF student_attendance = full_time THEN
add 1 to full_time_students
ELSE
IF student_gender = male THEN
add 1 to male_pt_students
ELSE
IF student_age > 21 THEN
add 1 to mature_fem_pt_students
ELSE

add 1 to young_fem_pt_students
ENDIF {age >}
ENDIF {gender = male}
ENDIF {full time}

Algorithms Using Selection


Now, we will look at some algorithms the
require selection constructures.
Example 4.1 Read three characters
The first problem is: sort three characters and
print them out in ascending order.
A Defining diagram
Here is the IPO chart.

B Solution algrithm
Here is the algorithm
Read_three_characters
Prompt the operator for char_1, char_2,
char_3
Get char_1. char_2, char_3
IF char_1 > char_2 THEN
temp = char_1
char_1 = char_2
char_2 = temp

ENDIF
IF char_2 > char_3 THEN
temp = char_2
char_2 = char_3
char_3 = temp
ENDIF
IF char_1 > char_2 THEN
temp = char_1
char_1 = char_2
char_2 = temp
ENDIF
output to the screen char_1, char_2, char_3
END
C Desk checking
Now we choose some test data (characters)

Now, calculate the expected answers


(alpabetize them)

Now, we walk the data through the algorithm,


one instruction at a time.
1. Prompt the operator for char 1, char 2, and
char 3, by displaying the message "please
enter three character". Oops! The desk check
table doesn't show the prompt. You need to

add a column for it!


2. Get the three characters by reading them
into variable char 1, char 2, and char 3. char 1
= k, char 2 = b, char 3 = g.
3. Is char 1 > char 2? Yes, so switch the values,
by first moving the value in char 1 to the
variable temp. Then move the value in char 2
to char 1, finally move the value in temp to the
variable char 1. This makes char 1 = b, and
char 2 = k.
4. Now, is char 2 > char 3? Yes, so switch the
values, by moving the value of char 2 into
temp, them move the value of char 3 to char 2,
and finally move the value in temp to char 3.
Now, char 2 = g and char 3 = k.
5. Is char 1 > char 2? No! so skip the next
instructions inside of this IF.
6. Output the three characters by printing b g k
in the output area. Oops! That is missing. Add
it.
7. Repeat the first six steps using the second
data set.
This desk checking chart is shown below.

Example 4.2 Process customer record

The problem is to calculate the sales tax and


total amount due for different tax codes. The
tax code enter must be validated.
A Defining diagram
Here is the IPO chart.

B Solution algorithm
Here is the algorithm.
Process_customer_record
Read cust_name, purch_amt, tax_code
IF tax_code = 0 THEN
sales_tax = 0
ELSE
IF tax_code = 1 THEN
sales_tax = purch_amt * 0.03
ELSE
IF tax_code = 2 THEN
sales_tax =
purch_amt * 0.05
ELSE
sales_tax =
purch_amt * 0.07
ENDIF

ENDIF
ENDIF
total_amt = purch_amt + sales_tax
Print cust_name, purch_amt, sales_tax,
total_amt
END
C Desk checking
Now we think up some test data.

Now, try doing the calculations by hand to get


the expected results.

Now, we desk check the algorithm, by


executing the instructions one by one, using
the incomplete desk check table below.

PLEASE NOTE! The test data only test two of


the four tax codes! You need at least two more
test cases, that check out the other two tax
codes, to completely desk check this algorithm.
ANOTHER NOTE! The algorithm DID NOT
validated the tax code. It will accept any tax
code, and if it isn't 0, 1, or 2, it assums it is 3.
Try feeding it a bad tax code of 10 and see
what happends.
Example 4.3 Calculate employee's pay
Now, your are asked to calculate the weekly
paycheck and print out the amount along with
the input data used in the calculations.
A Defining diagram
Here is the IPO chart for this problem.

B Solution algorithm
First here is how a boolean variable works.

Here is the IPO chart for this problem.


Compute_employee_pay
Set valid_input_fields to true
Set error_message to blank
Read emp_no, pay_rate, hrs_worked
IF pay_rate > $25 THEN
error_message = 'Pay rate exceeds
$25.00'
valid_input_fields = false
Print emp_no, pay_rate, hrs_worked,
error_message
ENDIF
IF hrs_worked > 60 THEN
error_message='Hours worked
exceeds limit of 60'
valid_input_fields = false
Print emp_no, pay_rate, hrs_worked,
error_message
ENDIF
IF valid_input_fields THEN

IF hrs_worked <= 35 THEN


emp_weekly_pay = pay_rate
* hrs_worked
ELSE
overtime_hrs = hrs_worked 35
overtime_pay = overtime_hrs
* pay_rate * 1.5
emp_weekly_pay = (pay_rate
* 35) + overtime_pay
ENDIF
Print emp_no, pay_rate, hrs_worked,
emp_weekly_pay
ENDIF
END
C Desk checking
It would take at least five test cases to try out
all the paths in the above algorithm! However,
here is the two test cases from the book.

Here is the expected results for the above test


data.

Here is the desk checking table. Of course it is


missing a column to show what should be
printed!

The Case Structure


The case control structure is another way of
expressing a linear nested IF statement. It is
easier to read than deeply nested IFs.
Here is a nested IF that test for 4 conditions. It
is complicated. Think about how a 10 condition
nested IF would look.
IF record_code = 'A' THEN
increment counter_A
ELSE
IF record_code = 'B' THEN

increment counter_B
ELSE
IF record_code = 'C' THEN
increment counter_C
ELSE
increment error_counter
ENDIF
ENDIF
ENDIF
Here is the general form of a CASE statement.
CASE OF single variable
value_1 :statement block_1
value_2 :statement block_2
.
.
.
value_n :statement block_n
value_other: statement block_other
ENDCASE
It has a variable of type integer, whose value determines
which statement block to execute. The value_other is
executed if none of the specified values are found. The
CASE statement can test many, many conditions. The
Tovin the Maze Solving Robot program has a CASE
statement with over 100 conditions being tested!
Here is the four condition If from above
replaced with a CASE statement.
CASE OF record_code
'A' :increment counter_A
'B' :increment counter_B

'C' :increment counter_C


other :increment error_counter
ENDCASE
Example 4.4 Process customer record
Get a customer's record, calculate and print
out their bill.
A Defining diagram
Here is the IPO chart for this program.

B Solution algorithm
Here is algorithm
Process_customer_record
Read cust_name, purch_amt, tax_code
CASE OF tax_code
0: sales_tax = 0
1: sales_tax = purch_amt * 0.03
2: sales_tax = purch_amt * 0.05
3: sales_tax = purch_amt * 0.07
ENDCASE
total_amt = purch_amt + sales_tax
Print cust_name, purch_amt, sales_tax,
total_amt
END
C Desk checking

Here are two sets of test data. NOTE: You need


two more sets of do to test out all of the IF
branches!

Here are the expected results for the given test


data.

Here is the desk checking table. Of course it


doesn't show what is printed.

You might also like