2nd Edition The ability to clearly specify each step to create a problem-free computer program is a primary skill needed by programmers. Basic Programming Principles 2nd edition guides beginner programmers through the challenges of planning a computer program by presenting the text in a simple and straightforward manner. It contains many examples and exercises with explanations and answers that promote understanding. New exercises provide opportunities for students to apply the principles of programming and problem-solving, and learning outcomes highlight the key learning areas. It is an update of Basic Programming Principles: Using Visual Basic.Net 2nd edition without reference to the Visual Basic.Net. The book covers: • general programming concepts and calculations • understanding problems and planning solutions • writing algorithms in sequential steps • the selection control structure • iteration using a fixed count and do-loop • functions and procedures • array processing • sequential text files and • introduction to object-oriented programming concepts. Basic Programming Principles 2nd Edition CM Pretorius and HG Erasmus Basic Programming Principles Basic Programming Principles 2nd Edition The book aims to encourage beginner programmers to see all problems as challenges and to seek all possible ways to solve these problems in the most effective, efficient and economical way. Correlie Pretorius and Hetsie Erasmus have been in tertiary education for more than 30 years and understand the anxieties of beginner programmers and the abstract reasoning the subject requires. It has always been their passion to encourage students to become logical thinkers and to assist them to develop problem-solving skills. This book lays a solid foundation for students who are being exposed to programming for the first time. CM Pretorius and HG Erasmus Basic Programming_PRINT_281112.indd 1-3 2012/11/28 11:48 AM Pearson Education South Africa (Pty) ltd Forest Drive, Pinelands, Cape Town www.pearsoned.co.za Copyright © Pearson Education South Africa (Pty) Ltd 2012 All rights reserved. No part of this publication may be reproduced, stored in a retrieval system, or transmitted in any form or by any means, electronic, mechanical, photocopying, recording or otherwise without the prior written permission of the copyright holder. First published 2012 ISBN: 9781775786030 Publisher: Juanita Pratt Managing editor: Amelia van Reenen Editor: Rachel Bey-Miller Proofreader: Careena Koch Indexer: Ellen du Toit Book design: Christopher Davis Typesetting and DTP work: Lizette van Greunen Cover design: Flame Design Cover artwork: Corbis Printed by: Every effort has been made to trace copyright holders. The publishers apologise for any errors or omissions and invite copyright holders to contact us if any have occurred, so that they may be credited. To copy any part of this publication, you may contact DALRO for information and copyright clearance. Any unauthorised copying could lead to civil liability and/or criminal sanctions. Telephone: 086 12 DALRO (from within South Africa); +27 (0)11 712-8000; Telefax: 086 6586 299; Postal address: P.O. Box 31627, Braamfontein, 2017, South Africa; www.dalro.co.za BPP intro.indd 2 2012/11/26 6:53 PM iii Preface In the world of information technology, a thorough knowledge and understanding of problem-solving and basic programming principles are vital necessities. The programming language used to solve the problem does not usually matter to the end user. However, the information needs to be reliable, user friendly and correct in order to assist the end user in the decision-making process. Therefore, the process of problem solving is imperative. This book focuses on the basic principles of problem solving. Various problems have been supplied and the subsequent steps to develop solutions have been provided and discussed in detail. The authors followed a step-wise approach to solving problems, including the following: • • • • The primary purpose in the development of this book was to provide readers with exposure to elementary problem-solving techniques. This text book is suitable for teaching programming concepts and logical constructs without referring to program code, and it includes many design be able to apply them to the syntax of any programming language such as VB.NET, C++, and Delphi. The primary design method used in the text book is that of pseudocode. Alternative methods are discussed in Appendix A, where a clear example of each method is provided. Lecturers may decide to include these alternative methods as part of their lesson planning. A student who is able to develop proper pseudocode should experience no difficulty in drawing a flowchart or a Nassi-Shneiderman diagram. BPP intro.indd 3 2012/11/26 6:53 PM iv Acknowledgements The authors would like to thank all the people who helped to make this book a reality. Without your support, this publication would not have been possible: • encouragement and assistance. • • We would like to dedicate this book to all our students, ex-students and students to come. We hope that this book will equip you to successfully undertake the challenges of computer programming and that it will kindle your enthusiasm for problem solving and programming. We also hope that it will motivate you to work hard to achieve your goals to become a developer in the IT field. structures form the foundation of most program solutions. Enjoy your exciting journey exploring ways of solving problems by making use of the basic control structures! BPP intro.indd 4 2012/11/26 6:53 PM v Contents BPP intro.indd 5 Chapter 1 General concepts and arithmetic Introduction 1 Data hierarchy 1.1 Character 1.2 Field 1.3 Record 1.4 File 1.5 Table 1.6 Database 1.7 Data warehouse 2 Variables 2.1 Naming a variable 2.2 Types of variables 2.3 The value of a variable 3 Constants 4 Using variables in expressions and assignments 5 Arithmetic expressions 5.1 Key words used in arithmetic expressions 5.2 Arithmetic expressions and equations 5.3 Arithmetic operators 5.4 Setting up arithmetic equations 5.5 Examples using variables and constants 1 1 2 2 3 3 3 3 3 4 4 4 5 7 8 8 9 9 10 11 13 14 Chapter 2 Understanding a problem and using a computer to solve it Introduction 1 Problem solving 2 Understanding the problem 3 Data processing 4 The problem-solving approach 4.1 Analyse the problem 4.2 Identify alternative ways to solve the problem 4.3 Select the most effective way to solve the problem 4.4 List all the steps 4.5 Evaluate the algorithm for accuracy 4.6 Pseudocode 4.7 What does pseudocode entail? 4.8 Writing an algorithm 18 18 18 19 23 24 24 25 25 26 26 26 28 29 2012/11/26 6:53 PM vi BPP intro.indd 6 Chapter 3 Write algorithms in sequential steps Introduction 1 Program planning 2 Testing the logic of an algorithm 3 Calculating the outcome of an algorithm 31 31 31 36 46 Chapter 4 The selection control structure: Part 1 Introduction 1 Relational operations 2 Logical operations 3 The simple If statement 3.1 Testing a program that has an If statement 3.2 Examples of simple If statements 4 The If-then-else statement 4.1 Examples of If-then-else statements 5 Compound If statements 6 Data validation 52 52 53 54 57 59 62 66 67 71 77 Chapter 5 The selection control structure: Part 2 Introduction 1 Nested If statements 1.1 Nested If statements in programs 2 The Select Case structure 80 80 81 87 98 Chapter 6 Iteration using a fixed count loop Introduction 1 The For-next loop 2 Nested For statements 110 110 110 128 Chapter 7 Iteration using the Do loop Introduction 1 The Do loop 1.1 Pre-test loop (Do-while statement) 1.2 Post-test loop (Do-loop-until statement) 1.3 Terminating execution of a loop 1.4 Examples of Do-while loops 1.5 Examples of Do-until loops 2. Examples of flowcharts for pre-test and post-test loops 133 133 133 134 135 135 136 142 144 2012/11/26 6:53 PM vii Chapter 8 Arrays Introduction 1 Properties of arrays 1.1 Advantages of using a one-dimensional array 2 Parallel (paired) arrays 3 Two-dimensional arrays 4 Sorting arrays 4.1 The bubble sort method 4.2 The selection sort method 153 153 154 156 169 171 176 177 179 Chapter 9 Function procedures and subprocedures Introduction 1 Modules and modularisation 2 Hierarchy charts 3 Parameters 3.1 Value parameters 3.2 Reference parameters 4 Function procedures 4.1 The function call 4.2 The function 4.3 Calling a function and using a function 5 Subprocedures 5.1 The subprocedure call 5.2 The subprocedure 5.3 Calling an independent subprocedure and using a subprocedure 5.4 Functions and subprocedures without parameters 181 181 182 182 183 183 183 184 184 185 187 193 193 193 Chapter 10 Sequential text files Introduction 1 Input and output files 2 Opening a sequential access file 3 Closing a sequential access file 4 Reading information from a sequential access file 5 Writing information to a sequential access file 6 Reading from and writing to the same sequential file BPP intro.indd 7 194 199 205 205 206 206 207 208 212 214 2012/11/26 6:53 PM 2nd Edition The ability to clearly specify each step to create a problem-free computer program is a primary skill needed by programmers. Basic Programming Principles 2nd edition guides beginner programmers through the challenges of planning a computer program by presenting the text in a simple and straightforward manner. It contains many examples and exercises with explanations and answers that promote understanding. New exercises provide opportunities for students to apply the principles of programming and problem-solving, and learning outcomes highlight the key learning areas. It is an update of Basic Programming Principles: Using Visual Basic.Net 2nd edition without reference to the Visual Basic.Net. The book covers: • general programming concepts and calculations • understanding problems and planning solutions • writing algorithms in sequential steps • the selection control structure • iteration using a fixed count and do-loop • functions and procedures • array processing • sequential text files and • introduction to object-oriented programming concepts. Basic Programming Principles 2nd Edition CM Pretorius and HG Erasmus Basic Programming Principles Basic Programming Principles 2nd Edition The book aims to encourage beginner programmers to see all problems as challenges and to seek all possible ways to solve these problems in the most effective, efficient and economical way. Correlie Pretorius and Hetsie Erasmus have been in tertiary education for more than 30 years and understand the anxieties of beginner programmers and the abstract reasoning the subject requires. It has always been their passion to encourage students to become logical thinkers and to assist them to develop problem-solving skills. This book lays a solid foundation for students who are being exposed to programming for the first time. CM Pretorius and HG Erasmus Basic Programming_PRINT_281112.indd 1-3 2012/11/28 11:48 AM 1 Chapter 1 General concepts and arithmetic Introduction Throughout our lives, we’re confronted with problems we need to solve – for instance, fixing a plug at home, taking action to increase profits at work and even trying to buy everything we need within our budget when we go shopping. Sometimes we solve a problem without consciously going through a formal process. We simply execute a number of steps to come to the solution. In this book, we’ll be solving problems using a computer. These problems will be more in the domain of Mathematics and could be very challenging, requiring careful planning. However, we encourage you to see all problems as opportunities and to try various solutions until you find one that solves the problem in the most efficient, effective and economical way. The first aspect of a computer you need to understand is that a computer is just a dumb machine that can do only what we tell it to do! So the person (programmer) must first work out the steps to solve a problem and then use a compiler to translate the steps into a computer programming language that the ‘dumb machine’ can understand. The programmer then executes the program (the instructions), and the computer produces the solution. Before we can start solving problems or teach you steps/guidelines to follow when planning the solution, you need to understand and know some basic, general concepts. Ed 3 BPP 4th pgs.indb 1 2012/11/26 2:45 PM 2 • BASIC PROGRAMMING PRINCIPLES Outcomes When you have studied this chapter, you should be able to: • understand and know the hierarchy of data structures, • understand what a variable is, • distinguish between data types, • distinguish between a variable and a constant, • write an assignment statement, • understand basic arithmetic operations, • use all arithmetic operators, and • set up and evaluate expressions and equations using variables, constants, operators and the hierarchy of operations. 1 Data hierarchy Data is a collection of facts, such as values, measurements, or readings. Data can be in the form of numbers, words, measurements, observations or even descriptions of things and events. Data can be stored in the memory of the computer on a temporary basis. However, it can also be stored more permanently in various data structures for later use. These data structures can be represented in a hierarchy, from the smaller structures to the larger data structures that are formed by a number of smaller related structures. Data hierarchy refers to the systematic organisation of data from the smallest unit to the largest, as follows: Data warehouse Largest Database ⇑ File and table ⇑ Record ⇑ Field ⇑ Character Smallest Table 1: The data hierarchy 1.1 Character A character can be a single number, letter or special character. Any one stroke that can be typed on a keyboard is a character. Examples are 4, A, % and m. Ed 3 BPP 4th pgs.indb 2 2012/11/26 2:45 PM GENERAL CONCEPTS AND ARITHMETIC • 3 1. 2 Field A field consists of a number of characters, such as a number of persons (120) or a name (John). A field is also known as a data item. The data types of fields are discussed in section 2.2. 1.3 Record Records normally group related fields together, such as a student record, which could contain a student number, the student’s name and surname and the course that the student has enrolled for. Another example is an item in a shop – the record could contain the item number, description and price. 1.4 File A file is a collection of related records such as an employees file that contains records of all the employees employed by a specific company. This file may be used to process monthly salaries, print salary reports and produce summaries. The records in the file are organised and stored in a specific way, for instance, sequentially one after the other. 1.5 Table A table is a structure made up of rows and columns. Each row represents the data of one entity regarding a specific topic, e.g. data about one item in a shop, and each column contains a category of data. For instance, in an Employees table, one employee’s row would contain the same categories of data, such as surname and first name, as the other employees’ rows. However, the data or values in each row would be different. EmployeeID Surname First Name Job title Pay Grade Fulltime? DGS021 Bavuma Charles Foreman 7 True DGS022 September Jontie Carpenter 5 True DGS023 Tanda Goodwill Carpenter 5 False Table 2: A sample table 1. 6 Database A database consists of a number of related files or tables. This organisation depends on the processing methods that need to be applied. For example, a database could consist of three tables – one containing students’ subjects and Ed 3 BPP 4th pgs.indb 3 2012/11/26 2:45 PM 4 • BASIC PROGRAMMING PRINCIPLES results, one containing students’ personal details, and a third containing details about the students’ lecturers. Depending on how a company processes data, they may opt to use files, or tables and databases, or a combination of these. 1.7 Data warehouse A data warehouse is the largest structure used to collect and store data for processing, analysis and reporting. It may consist of several databases. 2 Variables Programmers use the term ‘variable’ to refer to a position or location in the memory of the computer where a value can be stored. Initially, the variable need not contain a value. The word variable indicates that the value of the variable may vary as needed, or as processing is done. You can visualise a variable as a box in memory that contains one and only one specific value at a given time. 2.1 Naming a variable Every variable is given a descriptive name. There is no need for the programmer to know the exact position (address) of the variable, because the compiler will link the given name of the variable to the actual address in memory. When solving a problem, only one name is given to a variable and this exact name is used all the time. When choosing a name for a variable, the programmer must adhere to certain rules. These rules may differ between programming languages, but for the purpose of this book the following apply: 1. The name must be unique. While solving a problem, two variables may not have the same name. 2. The name must be descriptive – for instance, a student’s grade should be called grade, whereas the mark the student gets should be called mark. 3. The name may not contain spaces, but more than one word can be joined to form a name. For instance, the number of pages in a book could be called bookPages and the price of an item could be called itemPrice. The underscore character can also be used to join words in a variable name. 4. A name can contain letters and numbers, such as department23, but cannot contain only numbers. 5. A variable name must start with a letter; it cannot start with a number. 6. A variable name may not contain special characters, such as &, # and @. 7. A variable name should be as short as possible, while remaining descriptive. Ed 3 BPP 4th pgs.indb 4 2012/11/26 2:45 PM GENERAL CONCEPTS AND ARITHMETIC • 5 2.1.1 How to name a variable The convention is to use only lower-case letters in the name of a variable, except where two or more words are joined. In such cases, all the following words start with an upper-case letter, which is known as camel casing. Description Name Name of employee empName Price of car carPrice Author of book author Quantity in stock quantity Age of student stAge Total number of sales totNumSales Table 3: Examples of variable names Questions Do the following variable names comply with the rules? If not, give a reason. • 5thGrade • member of club • abc • 5472 • theAddressOfTheCompanyInTshwane • grade&mark 2.2 Types of variables The following data types are applicable when variables are classified. 2.2.1 Numeric variables Integers An integer variable contains a whole number that has no fractional or decimal part. The number can be positive, negative or zero. Examples of integers are the number of students or the quantity of items in stock. Integer variables are typically used for items that cannot be split. Examples: 15, –2 334, 9 728 Ed 3 BPP 4th pgs.indb 5 2012/11/26 2:45 PM 6 • BASIC PROGRAMMING PRINCIPLES Real numbers A real number variable contains a positive or negative number with a decimal part. Examples of real numbers are the length of a window in metres or centimetres, or an amount of money in Rands and cents. Examples: 12.47, –987.123, 17.00 2.2.2 Non-numeric variables Character A character variable contains a single letter, number or special character, such as $, % or @. The value of a character variable is always enclosed in quotes. Examples: “A”, “G”, “*”, “8” Note that the character “8”, which is declared as a character, is not regarded as numeric and may not be used in calculations. When declared as a character, it can be used as a code – for instance, the group number is “8”. String A string variable consists of two or more characters and must also be enclosed in quotes. Examples: “32 Long Street” or a message, such as “The name is found.” Boolean A Boolean value can only contain a true or false value. In an everyday life situation a Boolean value can be compared with a light switch, which is either on or off. In a computer language, a true value is represented by a non-zero value, whereas a false value is represented by zero. A Boolean variable is used to test if a specific condition is true or false, and is also called a logical variable. Examples: Is the person a club member? Did the student pass an exam? True or false? Ed 3 BPP 4th pgs.indb 6 2012/11/26 2:45 PM GENERAL CONCEPTS AND ARITHMETIC • 7 2.3 The value of a variable A variable need not contain an initial value, but a value can be assigned to a variable according to its data type – for instance, the variable called costPrice must contain a numeric real value. A value can also be assigned to a variable while the statements in the algorithm are being processed. An illustration of this is the scoreboard for a football match displaying the scores of the two teams. A team has only one score at any given time. For example, at the beginning the score will be zero, but after the first goal it will be one. At no time may the scoreboard contain two scores for one team. Before the football match between Bafana Bafana and Brazil, the scoreboard would be: South Africa Brazil 0 0 After Bafana Bafana score their first goal, the scoreboard would change to: South Africa Brazil 1 0 The same rule applies to a variable. When the value of the variable changes, the previous value of the variable is replaced by a new value. Once it’s been replaced, it isn’t possible to retain the previous value in the same variable. Study the following table to understand all the aspects of a variable. Description Variable name Variable type Possible value Name of student stName String “John Smart” Number of books noBooks Integer 234 Price of item price Real number 78.56 Student? (Y/N) student Boolean true (or 1) Code (A – C) code Character “B” Table 4: Examples of variable names, types and values Ed 3 BPP 4th pgs.indb 7 2012/11/26 2:45 PM 8 • BASIC PROGRAMMING PRINCIPLES Exercises Complete the following table: Description Variable name Variable type Possible value Colour of dress Height of person in metres Adult? Age in years Salary in R/c Title of book Player in match? Class code (K, L or M) Name of lecturer Number of computers 3 Constants All the rules of variables apply to constants as well, except that constants have a fixed value that cannot change throughout the entire program. Constants are used in cases where we know that the value will never vary during the execution of the program. A constant may be any data type. Examples: There are always 24 hours in a day. The value of π is always 3.14159. A message or legend to be printed is “The name of the student is”. 4 Using variables in expressions and assignments The assignment symbol (=) is used to assign an initial value or an expression to a variable. Syntax: Variablename = Value or Variablename = Expression Example: totalNumStudents = 20 totalNumStudents = numMales + numFemales Ed 3 BPP 4th pgs.indb 8 2012/11/26 2:45 PM GENERAL CONCEPTS AND ARITHMETIC • 9 The first example, totalNumStudents = 20, means that a variable that contains the total number of students is equal to 20. The second example, however, indicates that the total number of students is equal to the number of male students plus the number of female students. NumMales and numFemales are both names of variables. 5 Arithmetic expressions The majority of computer programs contain arithmetic, so it’s important to study how arithmetic is used to solve problems using a computer. Arithmetic may be needed to calculate the average marks of students, an amount due on an invoice or the net salary of an employee based on his or her gross salary. 5.1 Key words used in arithmetic expressions There are a number of key words that can be used in problem statements containing mathematical operations. Addition Key words Examples Increase by Increase the total by 12. More than Johan earns R50 more than Jack. Combined Sam and Sally’s combined points are 129. Together Sum Together, Thabu and Jabu worked for 18 hours. Calculate the total of the first and the second sets of quantities. What is the sum of the prices of 3 items? Added to The 4th test mark must be added to the final mark. Total of Subtraction Key words Examples Decrease by The final mark must be decreased by 10%. Minus The amount minus the discount is the net amount. Less than Pete earns R20 less than Simon. Difference The difference between my height and your height is 5 cm. Subtract from Subtract 15 from the accumulated points. Between The difference between Thandi’s mark and Rose’s mark is 10. Fewer than Goodman has worked five hours fewer than Samuel. Ed 3 BPP 4th pgs.indb 9 2012/11/26 2:45 PM 10 • BASIC PROGRAMMING PRINCIPLES Multiplication Key words Examples Of A quarter of 100 is 25. Times The final mark is equal to all the marks times 1.5. The wage is the hourly rate multiplied by the number of hours worked. Calculate the product of the number of items and the price per item. The total number must be increased by a factor of 12%. Multiplied by Product of By a factor of Division Key words Examples Per Calculate the kilometres travelled per litre of fuel. Out of Quotient of 15 out of 60 is 25%. If the ratio of girls to boys is 2:3 and there are 25 children, how many girls are there? Divide the number of minutes by 60 to get the number of hours The quotient of 80 and 8 is 10. Percent 50% percent of 250 ml is 125 ml. Ratio Divide by Equals Key words Examples Is/are Will be The sum of 20 and 12 is 32. The difference between my age and my grandmother’s age was 60 years. The total of four numbers will be 300. Equals The sum of 5 and 4 equals 9. Give The prices of items bought give a total of R450. Yields The calculation yields an answer of 36. Sold for The final amount four items were sold for is R84. After an increase of 10% the new calculated amount can be replaced by the sales amount. Was/were Replaced by 5.2 Arithmetic expressions and equations Equations are frequently used in arithmetic calculations, for example: answer = 4 + 7 Ed 3 BPP 4th pgs.indb 10 2012/11/26 2:45 PM GENERAL CONCEPTS AND ARITHMETIC • 11 The calculation to the right of the equal sign is done first, then the result is assigned to the variable on the left of the equal sign, which is ‘answer’ in this case. So after the statement is executed, the variable called answer will contain a value of 11. The equals sign (=) has two meanings: 1. It can be used to assign a value to a variable. total = 0 ~ total is an integer variable noOfStudents = 50 ~ noOfStudents is an integer 2. It can be used to replace the value of a variable. result = number * 2 ~ result and number are both numeric ~ variables sum = sum + points ~ sum and points are both numeric variables The last example, sum = sum + points, will add the value of points to the value of sum to produce a new value for sum. The previous value of sum is increased by the value of the variable points. If sum has a value of 200 and points has a value of 27, the right-hand side of the equation will be 200 + 27 and the new value of sum will be 227. The previous value of sum, which was 200, is now replaced by the new value, which is 227. 5.3 Arithmetic operators An operator is a symbol used within an expression or equation that tells the computer how to process the data. This symbol joins the operands to be processed – for instance, in the calculation 3 * 6, 3 and 6 are operands and * is the operator. The following operators are used to perform arithmetic operations: Operator ^ *, / \ mod +,- Description Exponentiation (to the power of ) Example Result Precedence 2^4 16 1 Multiplication and division Integer division -TRUE - -6 5*7 72 / 8 37 \ 5 FALSE +6 35 9 7 Modulus arithmetic Addition and subtraction 37 mod 5 4+7 14 - 5 2 11 9 Negation 2 3 4 5 6 Table 5: Arithmetic operators and the rules of precedence Ed 3 BPP 4th pgs.indb 11 2012/11/26 2:45 PM 12 • BASIC PROGRAMMING PRINCIPLES Integer division can only be done when dividing an integer value by another integer value because it discards (drops) the decimal part and doesn’t round the answer. Example: 49 \ 10 = 4 Modulus arithmetic is done when the user only wants to know what the value of the remainder is when dividing. Example: 49 mod 10 = 9 The order of precedence in execution is important. When an expression is executed, it is always done: • from left to right and • the operator with the highest order of precedence is done before the others. Note that when operators with the same precedence occur in one expression, they will be executed from left to right. Study this example: 5 – 3 ^ 2 \ 8 + 17 mod 3 * 2 To find the answer to this expression, we need to determine which operator to execute first. The answers in the steps that follow have been underlined. Step 1: The exponentiation (3^2=9) is done first: 5 – 9 \ 8 + 17 mod 3 * 2 Step 2: Multiplication and division are done from left to right (3*2=6): 5 – 9 \ 8 + 17 mod 6 Step 3: Integer division (9\8=1) is done next: 5 – 1 + 17 mod 6 Step 4: Modulus arithmetic (17 mod 6=5) is done before addition or subtraction: 5–1+5 Step 5: Lastly, addition and subtraction are done from left to right, so subtraction is done first because the minus is to the left of the plus: 4+5 9 Parentheses (or brackets) are used to change the order of execution. Calculations in parentheses have a higher priority than any of the operators. However, the operators inside the parentheses are executed according to the same order of precedence. Ed 3 BPP 4th pgs.indb 12 2012/11/26 2:45 PM GENERAL CONCEPTS AND ARITHMETIC • 13 Example: Calculate the value of the variable k where k = a * b ^ (14 – c) mod 4 + 3 \ a, and where a, b and c are integer variables with the following values: a = 3, b = 5, c = 11 Substitute the values of the variables before calculating: k = 3 * 5 ^ (14 – 11) mod 4 + 3 \ 3 = 3 * 5 ^ 3 mod 4 + 3 \ 3 = 3 * 125 mod 4 + 3 \ 3 = 375 mod 4 + 3 \ 3 = 375 mod 4 + 1 =3+1 =4 Note that (14 - 11) is executed before the other operations because it’s in parentheses. 5.4 Setting up arithmetic equations An arithmetic equation is also called an assignment statement in which variables and/or constants are assigned to a variable on the left-hand side of an equation. For example, a = b + c, where a must be a numeric variable that will contain the result, and b and c must also have numerical values, but may be constants or variables. A computer cannot understand mathematical equations in the format that we usually write them. We therefore need to translate the equation into a format the computer can understand. Variables and/or constants on the right-hand side of an equation are always separated by operands. When writing an arithmetic equation, the mathematical rules, as given in Table 5, must be followed. An equation contains only one variable to the left of the equation to store the result. The following equation contains the variables X, A, B, C and D: 2(C + D) X = A3 − 2B + ________ 2 The equation can now be written in computer-related format, as follows: X = A ^ 3 – 2 * B + (2 * (C + D)) / 2 Note how the brackets are used to execute the statements in the correct order. Ed 3 BPP 4th pgs.indb 13 2012/11/26 2:45 PM 14 • BASIC PROGRAMMING PRINCIPLES Example: Rewrite the following mathematical equation in computer-related format as an assignment statement to obtain the value of A: 3A = 2 (C – D ) Divide both sides of the equation by 3 and remember to use brackets on the right-hand side. A = (2 * (C – D)) / 3 Exercises Rewrite the following equations in computer-related format to determine the value of X, where A, B, C, D, E and X are variables: 1. X = AB + C4 C − D − 5D 2. X = ______ E+5 3. X = 17BC − B(E − A) 5.5 Examples using variables and constants The following examples illustrate what you’ve just learnt. In each of the examples, the arithmetic equation to solve the problem is given after the variables and constants have been planned. Note that meaningful names were chosen for variables and constants. Example 1 Kevin works eight hours per day at a pay rate of R11 per hour. He has to pay R12 taxi fare per day. How much money will he take home after a five-day work week? Variables (integer): money Constants (integers): hours = 8 payRate = 11 transport = 12 noDays = 5 Equation: money = (hours * payRate – transport) * noDays The constants already contain values because these values are fixed, but the amount earned, called money, must still be calculated so doesn’t have an initial value. Note that we don’t include the units (the Rand sign R) in any calculation. This also applies to other units such as metres, centimetres, grams, kilograms and so on. Ed 3 BPP 4th pgs.indb 14 2012/11/26 2:45 PM GENERAL CONCEPTS AND ARITHMETIC • 15 Example 2 Thandi has 257 items and wants to pack them in packets of 14 each. How many full packets will she have? Variables (integer): fullPackets Constant (integers): items = 257 noInPacket = 14 Equation: fullPackets = items \ noInPacket To calculate how many will be left, you use the equation: numLeft = items mod noInPacket Example 3 Joseph earns R5.75 per hour. He works eight hours per day, but has to spend R3.60 on bus fare each day. Determine his net income per day. Variable (real number): netIncome Constants (real numbers): tariff = 5.75 busFare = 3.6 noHours = 8 Equation: netIncome = tariff * noHours – busFare Example 4 Bonita bought a number of items at R15.85 each. She received a discount of 7.5%. Calculate the amount she has to pay. Variables (integer): (real numbers): Constants (real numbers): noOfItems firstAmount, amountDue discount = 7.5 priceOfItem = 15.85 The tilde character ( ~ ) is used in the following answer to indicate comments. These comments are not part of the answer; they simply explain various aspects. Possible equations ~ Assume noOfItems contains a value firstAmount = noOfItems * priceOfItem amountDue = firstAmount – (firstAmount * discount / 100) ~ The last statement could have been replaced by amountDue = firstAmount * 0.925 ~ The two arithmetic statements could have been replaced by amountDue = noOfItems * priceOfItem * 0.925 Ed 3 BPP 4th pgs.indb 15 2012/11/26 2:45 PM 16 • BASIC PROGRAMMING PRINCIPLES Exercises Question 1 Complete the following table: Description Variable name Variable type Possible value Number of pencils Average height of person in metres Symbol (A, G, R or T) Employed? Weight of bean in mg Price of bread Gender (M/F) Notice on door Number on door Able to swim? Question 2 Choose suitable variable names for each of the following and assign values where provided: 2.1 The number of marbles in a container 2.2 The amount of money to pay 2.3 Are you registered? 2.4 Height of girl is 1.75 metres 2.5 Name of person 2.6 Code of item is K 2.7 Description of dog is Dachshund 2.8 Number of smarties in a box Choose suitable names for the following constants and assign the correct values: 2.9 Seven days in a week 2.10 A notice contains the words “No Entry” 2.11 Value added tax at 14% Question 3 Rewrite in computer-related format, then calculate the value of x in each of the following equations: 3.1 x = a – bc2 where a = 84, b = 3, c = 4 3.2 x = k mod 5 + m \ n – 3n where k = 34, m = 33, n = 7 3.3 x = a(bc + 4) – c + a mod b/a where a = 2, b = 10, c = 12 Ed 3 BPP 4th pgs.indb 16 2012/11/26 2:45 PM GENERAL CONCEPTS AND ARITHMETIC • 17 Question 4 Calculate the value of x in each of the following statements: 4.1 x = g – 5 + 14 mod h ^ 2, where g = 12 and h = 1 4.2 x = 27 * y \ 4 / 2 – z + 2, where y = 24 and z = 4 4.3 x = a / (b + 2 ^ 2) – 12 + c mod b – 2, where a = 96, b = 2, c = 98 4.4 x = (y – 2 * z) + y / 6 * w \ 2, where w = 10, y = 12, z = 2 4.5 x = 35 mod y – ( z * w + y / 3 ) + y * w, where w = 5, y = 24, z = 3 Question 5 Declare the necessary variables and constants and write arithmetic expressions to solve the problems in each of the following examples. Remember to choose valid and meaningful variable names. 5.1 Sandra bought a number of pairs of socks at R3.50 per pair. What is the amount due? 5.2 Vusi wrote two tests and obtained marks in percentages for the tests. Calculate her average mark. 5.3 Jimmy has some marbles and wants to give each of four children an equal number. How many will each child receive? 5.4 Solly bought a number of items and the amount due is R245.60. He receives a discount of 5%. Calculate the new amount due. 5.5 Determine the price to copy a set of notes when the price for copying the cover page is R1.50 and the price to copy the inner pages is 45 cents per double-sided page. 5.6 Nancy bought a number of items for R5.60 each. She receives a discount of 5% on the amount due. Add 14% sales tax and then calculate the amount due. 5.7 Tony scores points in two competitions – the first competition is for 34 points and the second is for 125 points. Calculate the average percentage scored in the two competitions. 5.8 Julius needs to know the total length of line in metres he has to buy for three washing lines. The 3 lengths are available in centimetres. 5.9 Lesego has baked a batch of biscuits. She puts 15 biscuits in a packet and Sipho receives the remaining biscuits. Write two equations: How many packets of biscuits were packed by Lesego and how many biscuits Sipho received. Ed 3 BPP 4th pgs.indb 17 2012/11/26 2:45 PM 18 Chapter 2 Understanding a problem and using a computer to solve it Introduction This chapter introduces you to the basic goal of this book – understanding problems and how to solve them. We’ll start by introducing problems encountered in everyday life situations, and then move on to problems that can be solved using a computer. Outcomes When you have studied this chapter, you should be able to: • read and analyse a problem to understand exactly what it is that needs to be solved, • understand how a computer processes data, • name the steps to find an excellent and efficient solution for any problem, and • understand what an algorithm is and how it is used to solve a simple problem. 1 Problem solving Before you can learn how to solve a problem using a computer, it’s essential to understand what the problem is! You need to read the problem statement a number of times to ensure that you understand what is being asked before attempting to solve the problem. Ed 3 BPP 4th pgs.indb 18 2012/11/26 2:45 PM UNDERSTANDING A PROBLEM AND USING A COMPUTER TO SOLVE IT • 19 These are the steps you follow to ensure you understand a problem: • read the problem carefully, • understand what the problem entails, and • only then write down the steps to solve the problem. An everyday example would be getting to class in the morning. Write down the steps to take from waking up in the morning until you get to class. The problem statement is very simple, and once you’ve read it you understand what is being asked. However, you now need to write down the steps: 1. Wake up. 2. Get out of bed. 3. Wash. 4. Put on clothes. 5. Make something to eat. 6. Eat. 7. Pick up my bag. 8. Go to class. These are the basic steps. You can include more steps to ensure that nothing is left out. You can also omit some steps, such as making something to eat because you eat later in the morning. Some steps can be swapped around – you might wash after you’ve had breakfast. Others, however, have to be done in a specific order – it’s not possible to go to class before waking up, getting out of bed, or putting on clothes! But, most important, your steps must always be in logical order! These steps are called an algorithm, which is a set of instructions in a specific sequence used to solve a problem. 2 Understanding the problem When a programmer is faced with a problem to solve, the problem is read carefully, and may be read a number of times to be very sure that the problem is understood. Deleting all unnecessary information from the problem statement can help you arrive at the crux of the problem. The examples below illustrate how this is done. Example 1 The Fresh Greengrocer store sells apples at 85 cents each, pears at 65 cents each and oranges at 90 cents each. Tumi has R15 and wants to buy 10 apples and 5 pears. Calculate the amount due. Ed 3 BPP 4th pgs.indb 19 2012/11/26 2:45 PM 20 • BASIC PROGRAMMING PRINCIPLES To be able to calculate the amount due, she only needs to know how many apples and how many pears to buy and what their prices are. The information about the oranges and the amount of money Tumi has aren’t relevant to calculating the amount due. Strike out all the redundant information and rewrite the problem: The Fresh Greengrocer store sells apples at 85 cents each, pears at 65 cents each and oranges at 90 cents each. Tumi has R15 and wants to buy 10 apples and 5 pears. Calculate the amount due. Without all the unnecessary information, the problem becomes: The Fresh Greengrocer store sells apples at 85 cents each and pears at 65 cents each. Tumi wants to buy 10 apples and 5 pears. Calculate the amount due. As you can see, the problem statement is much easier to read and understand. Example 2 Calculate the floor area of the boardroom on the second floor of the building next to the road to Johannesburg. The length of the room is 7 metres and the width is 4 metres. It is the largest room on the second floor. This problem statement can be simplified by deleting the unnecessary information as follows: Calculate the floor area of the boardroom that is on the second floor of the building next to the road to Johannesburg. The length of the room is 7 metres and the width is 4 metres. It is the largest room on the second floor. The problem statement is now much easier to read and understand: Calculate the floor area of the board room. The length of the room is 7 metres and the width is 4 metres. A problem statement must include enough information to enable the programmer to solve the problem. But if some data (values) are missing, the problem must be stated in such a way that the user will be able to supply the missing data. Example 3 The sum of two numbers must be calculated, but the problem statement doesn’t supply the values. The algorithm can ask the user to supply the values of the numbers before calculating the sum. The most important aspect of solving a problem using a computer is writing the algorithm, or steps, to solve it. An algorithm must be written in such a way that is it unambiguous and precise. The computer cannot think for itself – you need to tell the computer exactly what to do. You should never assume that the computer will do something that you haven’t explicitly specified in a step. Ed 3 BPP 4th pgs.indb 20 2012/11/26 2:45 PM UNDERSTANDING A PROBLEM AND USING A COMPUTER TO SOLVE IT • 21 Another essential aspect of understanding a problem statement is understanding the individual words in the statement. This is illustrated in the following examples. Example 4 A mail order company sells CDs and books to customers all over the world. Customers enter the name of a book or CD in the space provided on an online form, and the mail order company immediately lets the customer know if they have the item in stock and what the price is. The system also informs the customer of the packaging and posting costs, and offers insurance on the parcel. Lastly, the customer is informed about the dispatch date as well the estimated arrival date of the parcel. If the customer decides to order the item, his/her details, including name, postal address and credit card details, must be entered on the form. The mail order company then checks the details provided and informs the customer within a very short time whether the transaction is approved or rejected. If approved, the credit card is immediately debited with the amount due. What do they want me to do as the customer? Order an item. How should this be done? I need to access the web page on the Internet, ask for the specific item and then, if I want to order the item, provide the necessary details. What do I need to be able to do this? I need to know if the item is available and if so, provide my details. I must also have enough funds available in my credit card account to pay for the item plus additional costs. Mail order company Item in stock Packaging and posting cost To insure the parcel Dispatch date Credit card Ed 3 BPP 4th pgs.indb 21 A company that uses a catalogue or web page to advertise and sell items; once the customer has ordered and paid for an item, it is posted to the customer. The item is available for purchase The cost of packaging the item and paying the postage. Also called shipping costs. The payment of an additional fee for which the company promises to refund the customer should the parcel not reach the customer. The date that the item will be posted A bank account that can be used to buy items by providing the account details, such as the number, expiry date and security number 2012/11/26 2:45 PM 22 • BASIC PROGRAMMING PRINCIPLES Check the details Transaction approved Transaction rejected Credit card debited with amount The company will contact the bank online to ensure that the credit card details are valid and that there are sufficient funds in the account to cover the purchase The transaction can be completed The transaction cannot continue due to incorrect details or insufficient funds The amount will be deducted from the customer’s account and paid into the mail order company’s account. Table 1: Specific words used in the problem statement Example 5 The employees of a company called Taxi Service have asked for a 7.5% increase on their salaries. Management now needs to know how much the total increase in salaries will be. Get the employee number and current annual salary of every employee, then calculate each employee’s salary with the increase. Calculate and display the total additional cost in salaries on the computer screen. Employee A person who works for Taxi Service Increase in salary An amount of money added to the current salary Annual salary The amount earned per year Total increase The sum of all the salary increases for all employees Current salary The salary that is earned now Table 2: Specific words in the problem statement What do they want me to do? Display the total additional cost in salaries. How should this be done? Calculate the increase in salary for each employee, then add all these amounts together to determine the total additional amount the company will be paying on salaries. What do I need to be able to do this? Get the employee number and current annual salary of every employee and calculate the additional amount that must be added to the salary. Description Variable name Data type Employee number empNumber String Salary Salary Real number Increase Increase Real number Total increase totalInc Real number Table 3: Descriptions of data Ed 3 BPP 4th pgs.indb 22 2012/11/26 2:45 PM UNDERSTANDING A PROBLEM AND USING A COMPUTER TO SOLVE IT • 23 3 Data processing An algorithm is divided into three phases: 1. What data you have available to solve the problem, 2. How you’re going to solve the problem; what steps you’re going to take, and 3. What the required result is. Figure 1 illustrates the phases in an algorithm schematically. Input Processing Output Data Processing Information or Figure 1: The phases in an algorithm Both diagrams clearly indicate that the algorithm must receive data (input) that must be processed to produce meaningful results (output or information). In other words: • Input is processed to produce meaningful output. • Data is processed to produce meaningful information. Example 6 The manager of a company asks a student to do some part-time work for which he will be paid by the hour. The student needs to know how many hours he has to work at what rate of pay before he can calculate the final amount he will receive. In this case, the input (data) to the algorithm are the hours and the hourly rate of pay. The input (data) must be processed to give the output (information), which is the amount the student will receive. It is clear that the input (data) is meaningless unless it is processed, because if the student knows how much he will receive per hour, but does not know how many hours he will work, the pay cannot be calculated! On the other hand, if the student works for 20 hours but the manager hasn’t told him how much he will earn per hour, it is also meaningless. Now it is possible to deduce the following: • Unprocessed data is meaningless. • Information is processed data. • Output is processed data. Ed 3 BPP 4th pgs.indb 23 2012/11/26 2:45 PM 24 • BASIC PROGRAMMING PRINCIPLES Example 7 Let’s look at Example 3 again: Calculate the sum of two numbers and display the result on the screen: Input: Not available in the problem statement. The user has to supply the numbers. Processing: Add the two numbers to determine the sum. Output: The sum as calculated in the processing phase and displayed on the computer screen. Note the following: • The value of the numbers must be available before the sum can be calculated. • It is impossible to display the sum before it has been calculated. From this, it is clear that the steps in an algorithm must always be written in logical order. 4 The problem-solving approach To summarise and formalise what we’ve discussed, the following steps must be taken to find an excellent and efficient solution. 4.1 Analyse the problem You will be given a specification for the problem to be solved. It is extremely important that you understand the problem entirely before you try to solve it. Work through the problem a number of times to make sure that you understand what is expected of you. It is also important that you take the available input, or data, into account, as well as the expected output, or information. It may sometimes be necessary to ask for more information because the end user hasn’t provided enough information to formulate a complete algorithm. For example, a lecturer requests a class list containing student names, student numbers and their final marks, for the subject Principles of Programming 1 with the subject code POP101A. This seems like a reasonable request, but you don’t actually have enough information. For instance, what format does the lecturer have in mind for this report? So you could ask questions such as: • Must the report be in student number sequence or in surname sequence? • What must the format of the name be − for instance, surname and initials or surname and first name? Ed 3 BPP 4th pgs.indb 24 2012/11/26 2:45 PM UNDERSTANDING A PROBLEM AND USING A COMPUTER TO SOLVE IT • • • • • 25 How is the final mark calculated? Is it the average of the year mark and examination mark, or is it based on continuous evaluation? If it’s continuous evaluation, what is the weighting of each test and assignment? How many tests did the students write? Are all the marks available? What must the headings look like? Must the subject name and code appear in the headings? In what format must the date be printed? Must the words FAIL, PASSED or PASSED WITH DISTINCTION be printed next to the final mark? Must the class average be printed at the end of the report? You can see that, as the programmer, you must understand the problem completely before you can start to develop the solution. For complex problems, you can divide the task into smaller subtasks. This will make the size and complexity of every task easier to understand and to handle. 4.2 Identify alternative ways to solve the problem There are usually many ways to solve a given problem; however, some ways may simply be more effective than others. It is important to look at the problem from different angles and to consider different ways to solve it. For instance, if you need to travel from Johannesburg to Cape Town, there are many ways to reach your destination: you can travel by road, rail or air; you could go via Durban or even London! What might some of the considerations be, such as cost and time? Try to think of other ways of travelling from Johannesburg to Cape Town. 4.3 Select the most effective way to solve the problem Suppose you decide to travel by road from Johannesburg to Cape Town. You could go through Kimberley, Bloemfontein or Upington. You need to identify the advantages and disadvantages of each route. The length of each route will affect your choice. Perhaps one route is much shorter than the others, but there are a lot of road works on that route, or the condition of the road is poor. These are the types of conditions that will influence your final decision. The same applies to computer logic. If you can write a solution in 200 steps/statements or in 20 statements, clearly the more effective solution is the 20-statement one. 4.4 List all the steps Now you must present all the steps to solve the problem in an unambiguous way, but not yet in the syntax of a programming language. At this stage you’re planning how the processing must be done. Although you must plan in a structured and unambiguous way, you mustn’t focus on a particular programming language − your plan must be applicable to any language. Ed 3 BPP 4th pgs.indb 25 2012/11/26 2:45 PM 26 • BASIC PROGRAMMING PRINCIPLES Although there are various ways to plan a solution, we will concentrate on writing algorithms in pseudocode to specify the logic of a process. The algorithm is the steps to solve a problem and the pseudocode is the way in which these steps are expressed. 4.5 Evaluate the algorithm for accuracy The next step is to check the logic in your algorithm for accuracy. This is called desk checking. Work through the algorithm using various input values, exactly as the computer would do, to test whether the algorithm produces the correct output. This step is very important. Using a variety of input values will test all possibilities. If you identify any logic errors, you can correct them at this early stage. This will prevent problems when you start coding. 4.6 Pseudocode Pseudocode is a way in which the algorithm steps are written so that they can be followed easily and understood. It is mostly given in simple English. Therefore it is not yet in a computer programming language, but it can be easily converted into a computer language. Planning is never done in a programming language as it may be too technical for the planning stage. Although there is no formal standard for pseudocode, it should already be a structured process because the programming code, which has to be derived from it, must be precise. Example: Peter sells oranges, pears, guavas and apples. Last week he sold 50 apples, 100 pears, 80 oranges and some guavas. This week he sold twice as many items. How many did he sell? So to solve the problem: 1. Ask the question to obtain the number of guavas sold last week. 2. Get the number of guavas. 3. Calculate the total number by adding the four numbers to determine the total number sold last week. 4. Multiply last week’s total by 2 to obtain this week’s total. Looking closely at this example, you can deduce that the number of guavas, last week’s total and this week’s total are the variables used to solve the problem. The four steps taken to solve the problem are called the algorithm. A pseudocode solution is written in one statement per line – or it can also be defined as one task per line. However, if it’s a big task, it needs to be broken down into several smaller tasks. Ed 3 BPP 4th pgs.indb 26 2012/11/26 2:45 PM UNDERSTANDING A PROBLEM AND USING A COMPUTER TO SOLVE IT • 27 The initial pseudocode planning can be done in informal English, as can be seen in the examples that follow. Thereafter, the algorithm can be written in more structured pseudocode, although it will not yet be written in a programming language. Example: You want to print a particular greeting to members of a forum. Initial planning: Obtain member status If the member is new Display standard new message Else Display message for registered members Endif Writing the algorithm in a more structured manner: GreetingModule display “If you are visiting the forum for the first time, enter 1, else enter 2.” enter member if member = 1 then display “Welcome as a guest of this forum.” display “To be able to access all features, you need to register first.” else display “Welcome as a member of this forum.” display “You have access to the following features:” display “Customise your profile” display “Send personal messages” display “Vote in polls” endif end However, planning is never done in a computer language as indicated in the next example. Technical knowledge of language-specific details should follow only after planning the program logic in pseudocode has been completed. You can clearly see that the structured solution in pseudocode is much easier to follow than the program in a programming language, such as the Visual Basic program below. Ed 3 BPP 4th pgs.indb 27 2012/11/26 2:45 PM 28 • BASIC PROGRAMMING PRINCIPLES intMember = Convert.toInt32(txtMember.text) If intMember = 1 Then lblMessage.text = “Welcome as a guest of this forum.” & _ ControlChars.Newline & _ “To be able to access all features, you need to register first” Else lblMessage.text = “Welcome as a member of this forum” & _ ControlChars.Newline & _ “You have access to the following features:” & _ ControlChars.Newline & “Customise your profile” & _ ControlChars.Newline & “Send personal messages” & _ ControlChars.Newline & “Vote in polls” End if 4.7 What does pseudocode entail? There are six basic computer operations: 1. A computer can receive data. • Read − from a file, database, or other source • Enter − via the keyboard, scanner or other input device 2. A computer can produce information. • Write − information to a file or a database for instance • Display − information to the screen 3. A computer can perform arithmetic. • Use actual mathematical symbols or the words for the symbol • Add a number to a total • Total = total + number • +, -, *, / • Calculate and compute are also used. 4. A computer can assign a value to a variable. • Three different cases are identified: • To give variables an initial value • Initialise, set • To assign a value as a result of processing • ?=? • x=5+y • To keep information for later use • Save, store 5. A computer can compare two pieces of information and select one of two alternative actions. if condition then some action else alternative action endif Ed 3 BPP 4th pgs.indb 28 2012/11/26 2:45 PM UNDERSTANDING A PROBLEM AND USING A COMPUTER TO SOLVE IT • 29 6. A computer can repeat a group of actions while condition (is true) some action loop for a number of times some action next number The structured format of these operations will be discussed in detail in the chapters that follow. 4.8 Writing an algorithm Although it’s the focus of this book, writing algorithms in pseudocode isn’t the only way to plan a computer-related solution to a problem. For instance, you can use flowcharts or Nassi Shneidermann diagrams (see Appendix A). Example 8 Determine the weekly wage of an employee when the hours he has worked and the hourly rate, are entered by the user. Prepare the logic to solve the problem: 1. Ask: How many hours did the employee work? 2. Get the number of hours. 3. Ask: What is the hourly rate of pay? 4. Get the hourly rate of pay. 5. Wage = number of hours * hourly rate of pay. 6. Show the wage on the screen. The structured algorithm could be: CalcWage display “How many hours did the employee work?” enter hours display “What is the rate of pay?” enter rate wage = hours * rate display “The wage = R”, wage end Ed 3 BPP 4th pgs.indb 29 2012/11/26 2:45 PM 30 • BASIC PROGRAMMING PRINCIPLES Exercises 1. Name the steps in solving a problem. 2. Write a detailed set of instructions, in sequence, to complete the following three tasks. Your instructions must be complete and in the correct sequence so that a novice can perform the tasks correctly from the instructions. 2.1 Bake a cake 2.2 Make a cup of tea 2.3 Buy a book 3. Study the following problems, delete the redundant information and decide whether enough information has been provided to obtain an answer. Write down the steps to follow to solve each problem: 3.1 The Lucky Company sells tickets at R5 each for a lucky draw. Five friends bought tickets as follows: Jessie, who doesn’t have much money, bought two tickets, Judy bought 20 tickets and Robin spent all her money on 80 tickets because she is very positive that she will win the prize of R1,000,000. Peter and Paul also bought tickets. This lucky draw is very popular and a total of 750 000 tickets were sold. Calculate how much money was spent by the five friends. 3.2 Lesego, who is in charge of all the stock in the company, needs to buy a number of brushes to replenish the stock on hand. Her office is situated at the back of the ground floor of the company’s building. The price of one brush is R19.75. How much money will she have to spend? Display the answer on the screen. 3.3 David has a number of dogs and always buys food for them at the supermarket on the first day of the month. Each dog eats 250 g of dog biscuits per day. How much will David spend on the first day of the month on dog food? Display the answer on the screen. Assume that he is able to buy the dog food per 50 g. 3.4 A college has a computer laboratory available for students to practise their programs. The laboratory opens at 8:00 in the morning and closes at 17:00 in the afternoon from Monday to Friday. Students are anxious to work the maximum time available and are even willing to start earlier in the morning and work later in the afternoons. How much time will be available for every student to practise during the week? Display the answer on the screen. Ed 3 BPP 4th pgs.indb 30 2012/11/26 2:45 PM 31 Chapter 3 Write algorithms in sequential steps Introduction Algorithms contain a combination of three basic control structures – sequence, selection and iteration. In the sequence structure, each step is executed once in sequential order. No steps are left out and no steps are repeated. Once all the steps are executed, the problem is solved. If the problem is not solved, this indicates that there’s a logical error in the algorithm. It may be that a step is written incorrectly, is in the wrong position or has been left out. Outcomes When you have studied this chapter, you should be able to do the following for a problem that can be solved with steps executed in sequential order: • identify all available input data and required output, • draw an IPO chart for the problem statement, • write an algorithm in pseudocode to solve the problem, and • test the logic of the algorithm with test data using a trace table, to predict the output and check that it’s correct. 1 Program planning As you know, you can’t write a program in a programming language unless you understand the problem. You also need to plan how to solve it by identifying the input and output, and setting out the processing logic in an algorithm. Ed 3 BPP 4th pgs.indb 31 2012/11/26 2:45 PM 32 • BASIC PROGRAMMING PRINCIPLES In this section, we'll discuss the planning of various problems that can be solved simply by using steps executed in sequence. Example 1 Problem Enter the name and age of a learner on the keyboard and display the name and age with a legend – which is an applicable explanation or heading to describe the output – on the computer screen. The first step is to read and understand the problem very well, then identify • the available data (input) • what I need (output). Planning As the first part of the planning, you draw up a table that contains a description of each input and output item, together with their type and variable name. Input Output Description Type Variable name Name of learner String name Age of learner Integer age Name of learner String name (same as input) Age of learner Integer age Table 1: Input and output variables for Example 1 Programmers draw up what is known as an Input/Processing/Output (IPO) chart, which enables them to do better and more comprehensive planning, which, in turn, enables the programmer to write complete algorithms without errors. The Input and Output columns in the IPO chart contain only the names of variables, and the Processing column provides an overview of the steps. Input name age Processing Prompt to read input fields Enter input fields Show name and age on screen Output name age Table 2: IPO chart for Example 1 Ed 3 BPP 4th pgs.indb 32 2012/11/26 2:45 PM WRITE ALGORITHMS IN SEQUENTIAL STEPS • 33 The preparation is now done, so it’s possible to write a detailed algorithm that contains every step to solve the problem. Algorithm ShowDetails ~ This program will enter the name and the age of the learner and display it on the screen display “Provide the name of the learner” ~ Display on new line enter name display “Provide the age of the learner” ~ Display on new line enter age ~ Show the details on the screen with appropriate legends display “The name of the learner is ”, name ~ Display on new line display “The age of the learner is ”, age ~ Display on new line end The steps in the algorithm will be processed in the order that they are given, one after the other, to provide the following output on the screen: Provide the name of the learner Provide the age of the learner The name of the learner is John The age of the learner is 18 John 18 In this example, the input data was the name John and the age 18. However, you can use other test data to test this algorithm. In this book, we’re going to write algorithms in a specific way using predetermined words. An algorithm has the following properties: • Every algorithm has a name that describes the function or purpose of the algorithm. This algorithm is for Example 1 is called ShowDetails. The name of an algorithm starts with an uppercase letter. • The last statement or step is always end. • The statements or instructions between the name of the algorithm and the end are called the body of the algorithm. • A ~ (tilde) indicates that a comment, which explains the code, will follow. A comment can be on a separate line or can follow in the same line as an instruction. A comment typically explains difficult code or why you’re including a specific instruction. However, comments can contain any text you wish to include. A comment can be included anywhere in an algorithm. • Display means that a message or the contents of a variable are displayed (shown) on the computer screen. • Enter indicates that data must be entered via the keyboard. • Calculation can also be done using equations. In the algorithm in Example 2, the metre and centimetre variables will get new values. Ed 3 BPP 4th pgs.indb 33 2012/11/26 2:45 PM 34 • BASIC PROGRAMMING PRINCIPLES When the ShowDetails algorithm is processed from beginning to end, the following happens: 1. Words that follow the ~ sign are not executable because they’re comments that explain what is happening or going to happen. In this case, the purpose of the algorithm is explained. 2. The display “Provide the name of the learner” statement means that something must be shown on the computer screen. In this case, the text inside the quotes is displayed. 3. The enter name statement causes the computer to show a prompt on the screen so that the user can use the keyboard to type a name. This name is stored in the variable called name. 4. The next two statements enable the user to enter the age of a person to store in the variable called age. 5. The display “The name of the learner is”, name statement displays the results on the screen as follows − the words in quotes are shown exactly as given, whereas name is a variable so its content is displayed. The output is The name of the learner is John. We have now displayed a constant and the content of a variable. 6. The same rules apply to the next statement, which displays The age of the learner is 18. 7. The comments on the right-hand side indicate that the details in each display statement must be shown on a new line on the screen. 8. Note how the body of the algorithm is indented. Example 2 Problem Enter the distance between two trees in kilometres. Calculate and display the distance in metres and then calculate and display the distance in centimetres. Planning Description Type Variable name Input Distance in km Integer kilometre Output Distance in km Integer kilometre Distance in m Integer metre Distance in cm Integer centimetre Table 3: Input and output variables for Example 2 Ed 3 BPP 4th pgs.indb 34 2012/11/26 2:45 PM WRITE ALGORITHMS IN SEQUENTIAL STEPS Input kilometre Processing Prompt to read kilometre Enter kilometre Output Calculate metre centimetre • 35 kilometre metre Calculate centimetre Display metre Display centimetre Table 4: IPO chart for Example 2 Note that the IPO chart does not contain detailed processing steps. Algorithm ConvertDistance ~ Convert km to metres and centimetres display “Please provide the distance in km. ” ~ Display on new line enter kilometre ~ Do the conversions metre = kilometre * 1000 centimetre = metre * 100 ~ Display the output on one line display kilometre, “ km is equivalent to ” , metre, “m and to ”, centimetre, “cm” end Note the indenting in the algorithm to enhance readability. The input data to test this algorithm will be 3 kilometres. Output: Please provide the distance in km. 3 3 km is equivalent to 3000 m and to 300000 cm If the last display statement is replaced by the following three display statements, the output will change as follows: display “Distance = ”, kilometre, “ km” ~ Display on a new line display “Equivalent distance in cm = ”, centimetre, “ cm” ~ Display on a new line display “Equivalent distance in metres = ”, metre, “ m” ~ Display on a new line Ed 3 BPP 4th pgs.indb 35 2012/11/26 2:45 PM 36 • BASIC PROGRAMMING PRINCIPLES New output: Please provide the distance in km. 3 Distance = 3 km Equivalent distance in cm = 300000 cm Equivalent distance in metres = 3000 m 2 Testing the logic of an algorithm Even when carefully planned and written correctly, programmers can’t assume that their algorithm is error-free and will produce the intended results in a form that is easy to read and understand. It is very important to test this logic for correctness and readability. To achieve the intended results, the programmer compiles a set of test data to test the logic, as we did in Examples 1 and 2. The test data must include a sample of every category of correct data and incorrect data. The test data must also be realistic. At this stage, our test data is simple, but more complicated algorithms will need more test data to ensure that no errors will occur. The logic can also be tested using a trace table, also known as desk checking or a walkthrough table. Example 3 Problem Enter the length and the width of a tennis court in metres, then calculate and display the perimeter and the area of the tennis court. Planning Input Output Description Type Variable name Length of court Real length Width of court Real width Perimeter of court Real perim Area of court Real area Table 5: Input and output variables for Example 3 Ed 3 BPP 4th pgs.indb 36 2012/11/26 2:45 PM WRITE ALGORITHMS IN SEQUENTIAL STEPS Input Processing Output length Prompt for input fields perim width Enter input fields Calculate perimeter and area Display output fields area • 37 Table 6: IPO chart for Example 3 Algorithm CalcTennisCourt ~ Calculate perimeter and area of tennis court display “Please enter length” ~ Display on new line enter length display “Please enter width” ~ Display on new line enter width ~ Do calculations and display perim = 2 * (length + width) area = length * width display “The perimeter of the tennis court is ” , perim , “ metres” display “The area of the tennis court is ” , area , “ square metres” end Trace table The input data to test this algorithm is length = 30 and width = 10. Instruction length width perim area display enter Please enter length 30 display enter calculate perim calculate area Output Please enter width 10 80 300 display display The perimeter of the tennis court is 80 metres The area of the tennis court is 300 square metres Table 7: A trace table for the CalcTennisCourt algorithm Ed 3 BPP 4th pgs.indb 37 2012/11/26 2:45 PM 38 • BASIC PROGRAMMING PRINCIPLES The instructions are listed in the left column, followed by the variables and the output. If, for instance, an alphabetic character is entered for the length, it will not be able to do the calculation and an error will occur. Output: Please enter length 30 Please enter width 10 The perimeter of the tennis court is 80 metres The area of the tennis court is 300 square metres Note that the algorithm can also accept and display real values. The length could have been 30.5 and the width 10.2, which results in 81.4 metres and 311.10 square metres. Example 4 Problem Enter two integers on the keyboard and calculate and show the average of these two integers on the screen. Planning Input Output Description Type Variable name First number Integer num1 Second number Integer num2 Average Real average Table 8: Input and output variables for Example 4 Input Processing Output num1 Prompt for num1 and num2 average num2 Enter num1 and num2 Calculate average Show average on the screen Table 9: IPO chart for Example 4 Ed 3 BPP 4th pgs.indb 38 2012/11/26 2:45 PM WRITE ALGORITHMS IN SEQUENTIAL STEPS • 39 Algorithm CalculateAverage ~ Prompt for and enter two integers display “Enter first number” ~ Display on new line enter num1 display “Enter second number” ~ Display on new line enter num2 ~ Calculate average average = (num1 + num2) / 2 ~ Show average on the screen display “The average of the two numbers is ” , average ~ Display on new line end If the two numbers used as input data were 24 and 40, the output would be: Enter first number 24 Enter second number 40 The average of the two numbers is 32 Example 5 Problem Jason works as a part-time assistant in a bookshop and receives an hourly wage. Enter the number of hours he worked for a specific week, as well as the pay rate per hour. He has to pay R8 towards the recreation club. Calculate and display how much take-home pay he’s earned for the week. Planning Input Output Description Type Variable name Hours worked Integer hours Rate of pay Real rate Weekly wage Real wage Table 10: Input and output variables for Example 5 Ed 3 BPP 4th pgs.indb 39 2012/11/26 2:45 PM 40 • BASIC PROGRAMMING PRINCIPLES Input Processing Output hours Prompt for input fields wage rate Enter hours and rate Calculate wage Display wage on screen Table 11: IPO chart for Example 5 Algorithm CalcWeeklyWage ~ Calculate and display the weekly wage for Jason display “Provide number of hours Jason worked” enter hours display “Provide rate of pay” enter rate ~ Do calculations and display wage = hours * rate – 8 display “Jason earned R ”, wage, “ for the week.” end ~ Display on new line ~ Display on new line ~ Display on new line The input data used to test this algorithm: hours worked = 24 and rate of pay = R12. Output: Provide number of hours Jason worked Provide rate of pay Jason earned R280 for the week. 24 12 Note that the rate can also be a real value, which would result in a real answer. Example 6 Problem Tebogo earns a monthly salary, which she divides at the beginning of each month into amounts according to her needs. She pays R450 on rent for her room and the remainder of the money is divided as follows: 50% for food, 20% for clothes, 15% for transport, 5% for charity and the remaining amount for pocket money. Enter her monthly salary, which is never less than R1,800, on the keyboard and then calculate and display how much money she has available for the various categories. Ed 3 BPP 4th pgs.indb 40 2012/11/26 2:45 PM WRITE ALGORITHMS IN SEQUENTIAL STEPS • 41 Planning Description Type Variable name Input Monthly salary Real salary Intermediate Money to divide Real remainder Output Room Real room Food Real food Clothes Real clothes Transport Real transport Charity Real charity Pocket money Real pocket Table 12: Input and output variables for Example 6 Note that an intermediate variable can be used to assist with the calculations. It is not part of the input or the output. Input Processing Output salary Prompt for salary room Enter salary food Calculate various categories clothes Display output fields transport charity pocket Table 13: IPO chart for Example 6 Ed 3 BPP 4th pgs.indb 41 2012/11/26 2:45 PM 42 • BASIC PROGRAMMING PRINCIPLES Algorithm CalculateMoney display “Provide Tebogo’s monthly salary: ” ~ Enter input enter salary remainder = salary – 450 ~ Do calculations food = remainder * 0.5 clothes = remainder * 0.2 transport = remainder * 0.15 charity = remainder * 0.05 pocket = remainder – (food + clothes + transport + charity) ~ Display results display “Tebogo divided her salary as follows: ” ~ Display on new line display “Room R450.00” ~ Display on new line display “Food R”, food ~ Display on new line display “Clothes R”, clothes ~ Display on new line display “Transport R”, transport ~ Display on new line display “Charity R”, charity ~ Display on new line display “Pocket money R”, pocket ~ Display on new line end This algorithm is tested with a monthly salary of R2 000. Note that the Rand sign (R) is not included in the algorithm, neither is the space – the thousands separator). Output: Provide Tebogo’s monthly salary: 2000 Tebogo divided her salary as follows: Room R450.00 Food R775.00 Clothes R310.00 Transport R232.50 Charity R77.50 Pocket money R155.00 Example 7 At The Friendly Store, items can be bought individually, in which case the full amount is paid. However, customers can also buy items in bulk packages of 50 or 100, in which case a discount per item applies. There’s a 10% discount per item on bulk packages of 50, and a 12.5% discount per item on bulk packages of 100. Ed 3 BPP 4th pgs.indb 42 2012/11/26 2:45 PM WRITE ALGORITHMS IN SEQUENTIAL STEPS • 43 Enter the amount for one item and then display the following: • The amount for a package of 50 items • The saving on one item in a bulk package of 50 • The total savings for a bulk package of 50 • The amount for a package of 100 items • The saving on one item in a bulk package of 100 • The total savings for a bulk package of 100 Choose your own descriptive names for variables. You may assume that the input entered will be valid and correct. Planning Input Intermediate Output Description Type Variable name Price for one item Discount price for one item if 50 are bought Discount price for one item if 100 are bought Price of bulk pack of 50 items Real amtOne Real amt50_One Real amt100_One Real amt50 Real amt100 Real save1 Real save2 Real save50 Real save100 Price of bulk pack of 100 items Amount saved on one item for bulk pack of 50 Amount saved on one item for bulk pack of 100 Total amount saved on bulk pack of 50 Total amount saved on bulk pack of 100 Table 14: Input and output variables for Example 7 Input Processing Output amtOne Prompt for input value amt50 Enter amtOne amt100 Calculate output values save1 Display output save2 save50 save100 Table 15: IPO chart for Example 7 Ed 3 BPP 4th pgs.indb 43 2012/11/26 2:45 PM 44 • BASIC PROGRAMMING PRINCIPLES Algorithm BuyBulkItems display “Enter the price of one item to buy” enter amtOne amt50_One = amtOne * 0.9 amt100_One = amtOne * 0.875 save1 = amtOne – amt50_One save2 = amtOne – amt100_One amt50 = amt50_One * 50 amt100 = amt100_One * 100 save50 = save1 * 50 save100 = save2 * 100 display “A pack of 50 will cost R”, amt50 display “It is a saving of R”, save1, “ per item” display “and a total saving of R”, save50 display “A pack of 100 will only cost R”, amt100 display “This is a massive saving of R”, save2, “ per item” display “and a total saving of R”, save100 end Complete the following trace table: Instruction amtOne Ed 3 BPP 4th pgs.indb 44 amt50 amt100 save1 save2 amt50 amt100 save50 save100 output 2012/11/26 2:45 PM WRITE ALGORITHMS IN SEQUENTIAL STEPS • 45 Example 8 At the EAT-A-LOT restaurant, customers dish up their own food and have the plate weighed in kg (2 decimal positions). The total weight of the plate and the food must be entered. The plate weighs 1.05 kg, which is subtracted from the total weight. The customer has to pay R7.35 per 100 g of food, and 14% VAT is added to the total. Display the weight of the food in kg as well as the amount due. Planning Description Type Variable name Input Weight of food and plate in kg Real weightFoodPlateKG Intermediate Weight of food alone per 100 g Real weightFood100G Output Amount due Real amtDue Weight of food per 100 kg Real weightFoodKG Table 16: Input and output variables for Example 8 Input Processing Output weightFoodPlate Prompt for weight amtDue Enter the weight WeightFoodKG Calculate the amount due Display the output Table 17: IPO chart for Example 8 Algorithm FoodAlgorithm ~ Input display “Enter the weight of plate and food in kg” enter weightFoodPlate ~ Processing weightFoodKG = weightFoodPlateKG – 1.05 weightFood100G = weightFoodKG * 10 amtDue = weightFood100G * 7.35 amtDue = amtDue + amtDue * 0.14 ~ Output display “Your food weighed ”, weightFoodKG, “kg and it will cost R”, amtDue, “, 14% VAT included” end Ed 3 BPP 4th pgs.indb 45 2012/11/26 2:45 PM 46 • BASIC PROGRAMMING PRINCIPLES 3 Calculating the outcome of an algorithm It is often necessary to determine the exact outcome of a set of instructions in an algorithm or program. Usually these statements include tricky calculations so the programmer needs to ensure that the calculation has been done correctly and must also know what result to expect. This could have been done with a trace table, but we only need to test the calculations, not the entire algorithm, so we can use a shorter method. We’ll study two examples to explain this method. Study the following statements. Note the exact output that will be displayed after these statements have been executed. Example 9 FirstExample A=3 B=7 A=B–A+2 C=A^2+B–5*2 display “The value of C is ”, C end Draw a table that contains only the variables used in the calculations: A B C After the first statement is executed, the value of A will be 3. A B C 3 After the next statement the value of B will be 7. Ed 3 BPP 4th pgs.indb 46 2012/11/26 2:45 PM WRITE ALGORITHMS IN SEQUENTIAL STEPS A B • 47 C 3 7 Now the calculation must be done to determine the new value of A. A=B–A+2 Substitute the current values of A and B: A=7–3+2 =6 A gets a new value of 6 to replace the previous value of 3. A B C 3 7 6 Now the calculation must be done to determine the value of C. C= A^2+B–5*2 Substitute the current values of A and B: C= 6^2+7–5*2 = 33 A B C 3 7 6 33 Strike through the 3 in the last 2 tables in order for them to see that A now has a new value. Ed 3 BPP 4th pgs.indb 47 2012/11/26 2:45 PM 48 • BASIC PROGRAMMING PRINCIPLES The last statement: display “The value of C is ”, C will first display the content of the legend followed by the value of the variable as follows: The value of C is 33 This will be the answer to the question because it is the only output displayed by the algorithm. The table assisted us only in calculating the values of the variables as the statements were executed. Example 10 Use the same set of instructions as Example 9, but change the display statement to display “The value of A plus B is ”, A + B Then the output will be: The value of A plus B is 13 The value of A plus B (6 + 7 = 13, as can be seen in the table) will be calculated before the result is displayed. Example 11 Use the same instructions again, but change the display statement to show the values of all three the variables in one line: display “A = ”, A, “ B = ”, B, “ C = ”, C Then the output will be: A = 6 B = 7 C = 33 How did we insert the spaces between the three answers? Exercises Question 1 In each case, indicate the variables used, draw an IPO chart and write an algorithm to solve the problem. Test your algorithm by doing a trace table for every odd-numbered question. Ed 3 BPP 4th pgs.indb 48 2012/11/26 2:45 PM WRITE ALGORITHMS IN SEQUENTIAL STEPS 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 1.10 Ed 3 BPP 4th pgs.indb 49 • 49 Enter the name and price of an item in the shop on the keyboard, then show the information on the computer screen with an appropriate legend. Enter two integers. Calculate and show the sum, difference and product of these two integers on the screen. Enter the number of rows of chairs in the city hall as well as the number of chairs per row. Calculate and display the total number of chairs in the hall. Enter Ridwaan’s height in metres and centimetres. Calculate and display his height only in centimetres (1 metre = 100 centimetres). Nomsa bought a number of the same items at a shop. Enter the quantity she bought and the unit price per item. Calculate the amount due by multiplying the number by the unit price and then adding 14% VAT to the amount. Display the final amount she owes on the computer screen. Jane is a typist who works freelance and she charges the following rates: A page typed in single spacing, R4.75 A page typed in double spacing, R3.50 The user must enter the number of pages she typed in single spacing and the number of pages she typed in double spacing. Calculate the amount that must be paid by the customer. She saves 15% of this amount to buy supplies. Display the net amount she earned for her work. Enter values of the minimum and maximum temperatures for a given day, then calculate the average temperature of the day. Show the answer on the computer screen. Freedom bought a number of eggs. Enter the number of eggs and the cost price of one egg. Unfortunately 5% of the eggs broke, but he sold all the other eggs at cost price + 25%. Calculate and show the total profit on the computer screen. You may assume that there will not be a loss. Enter any integer. Calculate double, half, a third and a quarter of the number and show the result on the screen. The data type of the result must be real. Enter the number of pages in a set of notes as well as the number of students who must receive these notes. Paper is sold in reams of 500 sheets. Enter the price of a ream. You have to add two additional sets of notes – one for the lecturer and the other for the subject file. Also bear in mind that you may have a trial run to see if the notes are printing correctly. Because these notes are printed for educational purposes, the dealer gives a discount of 7.5% on the price of the paper. Calculate and display the total cost as well as the cost per set of notes; disregard the sets for the lecturer and subject, and the paper used for the trial run. You may assume that you need not calculate full reams of paper. 2012/11/26 2:45 PM 50 • BASIC PROGRAMMING PRINCIPLES 1.11 1.12 The basic price for a phone call of three minutes is 50 cents. Enter the duration of a phone call in minutes. For every minute above the basic three minutes, an additional amount of 15 cents per minute is charged. Add 14% VAT. Calculate and display the price of a phone call. You may assume that the call will be more than 3 minutes. Henry rents a trailer to move stock to a store. The basic cost is R200 per day. He also pays a specific amount per kilometre travelled, entered by the owner. The owner also has to enter the kilometres and the number of days that Henry rented the trailer. Determine and show the amount due on the screen. Question 2 Study the following variables with their initial values, and the statements that follow, which are based on the variables and their initial values. Display the exact output that will be displayed after the statements have been executed. Description Data type Variable name Initial value Gross monthly salary Real salary R15234.50 Tax payable Real tax Net monthly salary Real netSal Percentage tax payable Integer taxPerc 32 Statements tax = salary * taxPerc / 100 display “You must pay ”, taxPerc, “% tax on your income” display “Your tax deduction is R”, tax netSal = salary – tax display “Your gross salary is R”, salary display “Your net salary is R”, netSal Question 3 Study the following statements. Display the exact output that will be displayed after these statements have been executed. 3.1 FirstCalculation A=2 B = 13 C=A*3 B=B–A^2 display “A = ”, A display “B = ”, B display “C = ”, C end Ed 3 BPP 4th pgs.indb 50 ~ On new line ~ On new line ~ On new line 2012/11/26 2:45 PM WRITE ALGORITHMS IN SEQUENTIAL STEPS • 51 3.2 SecondCalculation X=4 Y=X+4 Z = Y – 10 * (-X + 7) / 6 display “The sum of X, Y and Z is ”, X + Y + Z end 3.3 ThirdCalculation A=5 B=7 C=A*2–1 B=B+2 display “The value of B = ”, B display “The value of C = ”, C end ~ On new line ~ On new line 3.4 FourthCalculation X = 15 Y = 23 Z=2 Y=X*Z\7 W = X mod 8 display “The value of Y is ”, Y display “The value of W is ”, W end ~ On new line ~ On new line 3.5 FifthCalculation k = 12 m = 30 x = (k – 8) ^ 3 + m * 4 / (k – 6) m=m+2 k = k – 20 display “x = ”, x display “m = ”, m display “k = ”, k end Ed 3 BPP 4th pgs.indb 51 ~ On a new line ~ On a new line ~ On a new line 2012/11/26 2:45 PM 52 Chapter 4 The selection control structure: Part 1 Introduction The complexity of a problem may be of such a nature that it cannot be solved by simply applying statements in sequence. An algorithm may therefore include the possibility of providing for different options that could change the flow of statements in the algorithm. To enable the programmer to include this type of logic in an algorithm, a selection (decision) control statement that is based on relational and logical operators can be included. The selection control structure can be a simple if statement or a more complicated if-then-else statement or compound statement. Outcomes When you have studied this chapter you should be able to: • determine the results of relational conditions, • evaluate expressions that contain logical operators, • write a simple if statement in pseudocode to test a condition, • write an if-then-else statement in pseudocode, • prepare test data to test all possible conditions for a program that contains decision structures, • write algorithms containing • simple if statements, • if-then-else statements, • compound if statements • Boolean variables, • code defensively and do data validation wherever possible. Ed 3 BPP 4th pgs.indb 52 2012/11/26 2:45 PM THE SELECTION CONTROL STRUCTURE: PART 1 • 53 1 Relational operations Computers are able to compare two values. Expressions that compare operands (values or variables) are called relational expressions. The outcome or result of such a comparison always yields a Boolean value – that is, true or false. Examples: 5 > 3 result: true 16 = 5 result: false Pseudocode symbol Description Example = Equal to A=5 < Less than number < 97 > Greater than totalAmount > 100 <= Less than or equal to noStudents <= 50 >= Greater than or equal to weight >= 75 <> Not equal to quantity <> 17 Table 1: The operators used in relational comparisons All these relational operators have equal priority, but the mathematical operators have a higher priority than the relational operators. Examples: Determine whether the following expression is true or false: 1. b <= a - 3 where b = 5 and a = 7 Substitute: 5 <= 7 - 3 Answer to calculation: 5 <= 4 Outcome of relational comparison: false 2. m + 7 > n - 3 * p where m = 4, n = 12 and p = 5 Substitute: 4 + 7 > 12 - 3 * 5 Answer to first calculation: (* has higher priority than +) 4 + 7 > 12 - 15 Answer to second calculation: (from left to right) 11 > 12 - 15 Answer to third calculation: 11 > -3 Outcome of relational comparison: true Ed 3 BPP 4th pgs.indb 53 2012/11/26 2:45 PM 54 • BASIC PROGRAMMING PRINCIPLES Exercises Evaluate the following expressions: 1. a + t <> (a + b) * 4 2. k ^ 2 <= m mod 5 + 29 – n 3. (x \ 8 –2) + 3 > y / 12 mod 2 4. d + 4 * g / 2 < g * 3 + 14 where a = 4, b = 17 and t = 20 where k = 5, m = 63, n = 7 where x = 59, y = 96 where d = 3, g = 24 Note In computing and mathematics, the term ‘evaluate’ is often used to mean ‘find the result’– for example, the equation evaluates to zero or another value, or it evaluates to True or False. 2 Logical operations A logical operator joins two Boolean expressions to yield a Boolean answer, either true or false. Pseudocode symbol Description NOT Yields the opposite AND Both expressions must be True to yield True OR Only one expression must be True to yield True Example Result NOT True NOT False True AND True True AND False False AND True False AND False True OR True True OR False False OR True False OR False False True True False False False True True True False Precedence 1 2 3 Table 2: The operators used in logical operations Example: To illustrate the OR, suppose a person needs either an ID document or a driver’s licence, but not both, to enter an event (outcome to be true). However, to illustrate the AND, if the person needs to provide an ID document as well as a letter of approval before entering the event, both documents must be provided before the person may enter. The order of precedence is indicated in the last column – that is, processing is done in the following order: • from left to right Ed 3 BPP 4th pgs.indb 54 2012/11/26 2:45 PM THE SELECTION CONTROL STRUCTURE: PART 1 • • • • 55 NOT AND OR When different operators are combined in one expression, all the mathematical operators will be processed first, then the relational operators, and finally the logical operators. However, the order can be changed using parentheses. For example, if an OR must be processed before an AND, parentheses can be inserted. Example: Let A, B, C and X be Boolean variable with the following values: A = True, B = False and C = True Evaluate the equation: X = A OR B AND C Substitute: X = True OR False AND True AND is done first: X = True OR FALSE = False Use parentheses: X = (A OR B) AND C = (True OR False) AND True = True AND True = True Tables 3, 4 and 5 illustrate the order of precedence of all operators. Operator ^ */ \ mod +- Description Exponentiation (to the power of ) Negation Multiplication and division Integer division Modulus arithmetic Addition and subtraction Example Result Precedence 2^4 16 1 -True --6 5*7 72 / 8 37 \ 5 37 mod 5 4+7 14 - 5 False +6 35 9 7 2 11 9 2 3 4 5 Table 3: Highest priority, from left to right Ed 3 BPP 4th pgs.indb 55 2012/11/26 2:45 PM 56 • BASIC PROGRAMMING PRINCIPLES Operator Description Example = Equal to A=5 < Less than number < 97 > Greater than totalAmount > 100 <= Less than or equal to noStudents <= 50 >= Greater than or equal to weight >= 75 <> Not equal to quantity <> 17 Table 4: Second highest priority, from left to right Operator Description NOT Yields the opposite AND Both expressions must be TRUE to yield True OR Only one expression must be TRUE to yield True Example NOT True NOT False True AND True True AND False False AND True False AND False True OR True True OR False False OR True False OR False Result False True True False False False True True True False Precedence 1 2 3 Table 5: Lowest priority, from left to right Examples Evaluate the following expressions: 1. D OR K AND NOT S where D = TRUE, K = FALSE, S = TRUE Substitute: TRUE OR FALSE AND NOT TRUE TRUE OR FALSE AND FALSE TRUE OR FALSE TRUE 2. M > 7 AND D < S ^ 2 Substitute: 7 > 7 AND 8 < 4 ^ 2 7 > 7 AND 8 < 16 FALSE AND 8 < 16 FALSE AND TRUE FALSE Ed 3 BPP 4th pgs.indb 56 where M = 7, D = 8, S = 4 2012/11/26 2:45 PM THE SELECTION CONTROL STRUCTURE: PART 1 3. D < (E + 7) AND G OR (A * C) >= (D – E + C) A = 5, C = 12, D = -15, E = -17, G = FALSE • 57 where Substitute: -15 < (-17 + 7) AND FALSE OR (5 * 12) >= (-15 – -17 + 12) -15 < (-17 + 7) AND FALSE OR (5 * 12) >= (-15 + 17 + 12) -15 < -10 AND FALSE OR (5 * 12) >= (-15 + 17 + 12) -15 < -10 AND FALSE OR 60 >= (-15 + 17 + 12) -15 < -10 AND FALSE OR 60 >= (2 + 12) -15 < -10 AND FALSE OR 60 >= 14 TRUE AND FALSE OR 60 >= 14 TRUE AND FALSE OR TRUE FALSE OR TRUE TRUE Exercises Evaluate the following expressions where A = 5, B = 7, C = 12, D = -4, E = TRUE and F = FALSE: 1 A * 3 >= B – 14 \ 3 AND F OR C <= D + 3 2 NOT F OR E AND D + C = A 3 (C – D) * 2 <> A + B OR E AND F OR B > D + B ^ 2 4 D = C MOD 5 AND NOT F OR NOT (A + D <= A – D) 3 The simple If statement If statements are also called if-then statements because they cause the computer to test a condition before executing the ‘then’ part of the statement. If the condition is true, the ‘then’ part is executed. If not, the if statement is skipped entirely and the computer continues executing the rest of the program. If statements are best explained using an example: If an employee has worked more than 45 hours during the past week, a bonus of R300 must be added to his or her wages. Pseudocode ~ Test if the employee worked overtime if hours > 45 then wage = wage + 300 endif Ed 3 BPP 4th pgs.indb 57 ~ Executed only if the condition is true 2012/11/26 2:45 PM 58 • BASIC PROGRAMMING PRINCIPLES Explanation of the above three lines: if hours > 45 then ~ This statement tests if the hours worked exceed 45. wage = wage + 300 ~ If the test is true (the employee has worked more than 45 hours), ~ the previous value in the wage variable is replaced by an increased ~ wage of R300 more. endif ~ This line ends the if structure and the execution of statements will ~ continue after the endif statement, regardless of the outcome of ~ the if test. If the employee has not worked more than 45 hours, the execution of statements will continue after the endif key word. In other words, the statement to increase the wage is skipped. If statement syntax if condition then statement(s) endif Example if mark >= 50 then display “Student has passed” endif This algorithm can also be represented as a flowchart. No Condition? Yes Statement(s) No Mark > 50? Yes Student has passed Figure 1: Flowchart of a simple If statement Ed 3 BPP 4th pgs.indb 58 2012/11/26 2:45 PM THE SELECTION CONTROL STRUCTURE: PART 1 • 59 Notes • There can be any number of statements in the body of an if statement − between if and endif. • The statements in the body of an if statement execute only if the condition is TRUE. • Statements within an if statement are always indented to aid the readability of the algorithm. • If and endif are written in the same column, whereas the body of the if statement is indented. • An if statement always yields a Boolean value, so the result is always TRUE or FALSE. It is also possible to test whether a specific condition is not true by inserting the word NOT before the condition. if NOT condition then statement 1 statement 2 statement 3 statement n endif Example: if mark NOT < 50 then display “Student has passed” endif 3.1 Testing a program that has an If statement Study the following program: Lerato bakes cakes that she sells per slice. She cuts 10 slices per cake. She calculates the amount spent on the ingredients, electricity and packaging material. She adds 30% to the amount spent and then she calculates the price of a slice of cake. The user will enter the amount spent per cake, then the algorithm will calculate and display the price of a slice. She always sells the slices in full Rand amounts. For example, if the calculated price is R3.25, then the selling price will be R4. In other words, cents are always rounded up to the next Rand. Ed 3 BPP 4th pgs.indb 59 2012/11/26 2:45 PM 60 • BASIC PROGRAMMING PRINCIPLES Planning Intermediate variables are used in this solution to help with the calculations. These intermediate variables aren’t part of the input or the output. Description Type Variable name Input Cost of cake Real expense Intermediate Cake selling price Real cakePrice Price per slice Integer slicePriceInteger Price per slice Real slicePriceDecimal Price of slice Integer slicePriceInteger Output Table 6: Input and output variables for CalcCakePrice algorithm Input Processing Output expense Prompt for expense slicePriceInteger Enter expense Calculate slicePriceInteger Display slicePriceInteger Table 7: IPO chart for CalcCakePrice algorithm Algorithm CalcCakePrice ~ Calculate the selling price of cake display “Provide the cost of the cake” ~ Display on new line enter expense ~ Add profit and calculate price per slice cakePrice = expense + expense * 0.3 ~ Intermediate variable cakePrice slicePriceInteger = cakePrice \ 10 slicePriceDecimal = cakePrice / 10 if slicePriceInteger <> slicePriceDecimal then ~ Test if any cents slicePriceInteger = slicePriceInteger + 1 endif ~ Display the price of a slice of cake display “The price of a slice of cake is R” , slicePriceInteger ~ Display on new line end Ed 3 BPP 4th pgs.indb 60 2012/11/26 2:45 PM THE SELECTION CONTROL STRUCTURE: PART 1 • 61 Test the program using a manual calculation Use as test data: Expense R18.60 Increase by 30% R24.18 Gross price per slice R2.418 Integer division results in R2 per slice of cake Because there is a remainder, R1 will be added to the integer result to give the selling price for a slice of cake. Selling price per slice R3 Note that MOD could not be used in this example because the remainder part is a real value and not an integer. Instruction expense cakePrice slicePriceInteger slicePriceDecimal outcome of if Provide the cost of the cake display enter calculate calculate 18.60 24.18 2 calculate 2.418 if calculate output True 3 display The price of a slice of cake is R3 Table 8: The inclusion of an If statement in a trace table The instruction is listed in the leftmost column, followed by the variables, the outcome of the if statement, and finally the output, as shown in Table 8. Output: Provide the price of the cake 18.60 The price of a slice of cake is R3 Whenever there’s an if statement in an algorithm, you should prepare test data that tests whether all possible outcomes of the if statement work correctly. Ed 3 BPP 4th pgs.indb 61 2012/11/26 2:45 PM 62 • BASIC PROGRAMMING PRINCIPLES 3.2 Examples of simple If statements In this section we’ll discuss the planning of various problems that can be solved using simple if statements. Example 1 Problem John wishes to buy a number of pencils at a given price. The seller must enter values for these variables. If John buys 25 pencils or more, he’ll receive a discount of 7.5%. Calculate and display the amount due by John. Planning Input Output Description Type Variable name Number of pencils Integer number Price of one pencil Real price Amount due Real amount Table 9: Input and output variables for Example 1 Input number price Processing Prompt to read input values Enter input values Output amount Calculate amount Display amount Table 10: IPO chart for Example 1 Ed 3 BPP 4th pgs.indb 62 2012/11/26 2:45 PM THE SELECTION CONTROL STRUCTURE: PART 1 • 63 Algorithm CalcAmount ~ Calculate the amount due for pencils ~ Input display “Provide the number of pencils bought” ~ Display on new line enter number display “Provide price of one pencil” ~ Display on new line enter price ~ Processing amount = number * price ~ Test if John buys 25 or more pencils if number >= 25 then amount = amount – (amount * 0.075) ~ The calculation could also have been amount = amount * 0.925 endif ~ Output display “The amount due is R ”, amount ~ Display on new line end Test the program twice using: number = 16, price = R3.50 (fewer than 25 pencils) number = 30, price = R2.25 (equal to or more than 25 pencils) Output: Provide the number of pencils bought 16 Provide price of one pencil 3.50 The amount due is R56 Provide the number of pencils bought 30 Provide price of one pencil 2.25 The amount due is R62.44 Ed 3 BPP 4th pgs.indb 63 2012/11/26 2:45 PM 64 • BASIC PROGRAMMING PRINCIPLES Example 2 Problem The mark obtained by a student is entered. If the student has passed (50% or more), the mark must be displayed as well as a message that indicates that the student has passed. But if the mark is less than 50%, the mark and a message indicating that the student has failed must be displayed. Planning Description Type Variable name Input Mark obtained Integer mark Output Mark obtained Integer mark Message String message Table 11: Input and output variables for Example 2 Input Processing Output mark Prompt to read mark mark price Enter mark Test mark to determine message Display output fields message Table 12: IPO chart for Example 2 Algorithm PrepareResult ~ Prepare and display student result display “Provide mark obtained ” enter mark ~ Initialise message message = “pass” ~ Test result if mark < 50 then ~ Could also have been tested using mark <= 49 message = “fail” endif ~ Display result display “The mark is ” , mark, “. Result = ”, message end ~ Display on new line ~ Display on new line Test the program twice with marks of 45 and 69 respectively. Ed 3 BPP 4th pgs.indb 64 2012/11/26 2:45 PM THE SELECTION CONTROL STRUCTURE: PART 1 • 65 Output: Provide mark obtained 45 The mark is 45. Result = fail Provide mark obtained 69 The mark is 69. Result = pass Note that the message was initially set to “pass” and then tested. If the mark was not equal to or more than 50, the message was changed to “fail”. Exercises Do the planning and write an algorithm to solve the following problems. Prepare test data for the examples to test all possibilities, and draw a trace table for each. 1. Henry rents a trailer to move his furniture to his new house. The basic cost is R200 per day plus a specific amount that must be entered by him per kilometre travelled. He also has to enter the distance in kilometres. If Henry travelled less than 50 kilometres, an additional surcharge of 5% is payable on the amount due for the distance. However, if he used the trailer for more than 400 kilometres, he receives a discount of 12% on the amount due for the distance. Calculate and display the amount due. Hint: Use two different if statements in your algorithm. 2. Jessie and Sally want to buy a large pizza to share. Enter the cost of the pizza and the amounts that Jessie and Sally each have in their purses. If they have enough money, display a message that indicates that they can buy the large pizza. However, if they don’t have enough money, display a message saying that they have to buy a small pizza. 3. Harry earns R16.50 per hour. If he works more than 40 hours, he receives an extra R10 per hour. The employer enters the number of hours Harry has worked. Calculate and display Harry’s total wages. 4. Dumisane works at a company where all the employees receive a bonus of R500, except the employees in Department 7, who receive a bonus of R550. Enter his gross salary and his department number. Calculate the gross (total) income. Subtract 20% of the gross income for tax. Determine and display Dumisane’s net income on the screen. Ed 3 BPP 4th pgs.indb 65 2012/11/26 2:45 PM 66 • BASIC PROGRAMMING PRINCIPLES 4 The If-then-else statement We’ve tested a specific condition and, if the condition proved to be TRUE, we processed certain statements. It is, however, possible to process other statements when the condition is not TRUE, but FALSE. Suppose all the employees in a company receive an increase of 8%, but the employees in Department A, which performed the best, receive an increase of 10%. This can be accomplished by means of an if statement that contains an else clause, as shown in the following example. if dept = “A” then increase = salary * 0.1 else increase = salary * 0.08 endif salary = salary + increase Yes ~ Executed if the condition is true ~ Executed if the condition is false dept = “A”? increase = salary* 0.1 No increase = salary* 0.08 salary = salary + increase Figure 2: Flowchart of an If-then-else statement Ed 3 BPP 4th pgs.indb 66 2012/11/26 2:45 PM THE SELECTION CONTROL STRUCTURE: PART 1 • 67 4.1 Examples of If-then-else statements In this section, we’ll discuss the planning of various problems that can be solved using if-then-else statements. Example 3 Problem Angelina and Freedom are taking part in the final round of a competition. One rule of the competition is that judges may not assign equal points to competitors at this stage. Enter the number of points that each competitor obtains. Compare the points and determine who the winner is. Display the winner’s name and number of points on the screen. Planning Input Output Description Type Variable name Angelina’s points Integer pointA Freedom’s points Integer pointF Winner’s points Integer pointW Winner’s name String winner Table 13: Input and output variables for Example 3 Input Processing Output pointA Prompt for points winner pointF Enter points pointW Determine winner Display winner and points Table 14: IPO chart for Example 3 Ed 3 BPP 4th pgs.indb 67 2012/11/26 2:45 PM 68 • BASIC PROGRAMMING PRINCIPLES Algorithm DetermineWinner ~ Determine the winner of the competition display “Provide points for Angelina” enter pointA display “Provide points for Freedom” enter pointF ~ Find the winner if pointA > pointF then pointW = pointA winner = “Angelina” else pointW = pointF winner = “Freedom” endif ~ Display result display “The winner is ” , winner display “ and the winning points are: ” , pointW end ~ Display on new line ~ Display on new line ~ More than one statement in body of if ~ Display on new line Test the program Angelina obtained 175 points and Freedom obtained 179 points. Output: Provide points for Angelina 175 Provide points for Freedom 179 The winner is Freedom and the winning points are: 179 Example 4 Problem Dennis loves reading books and you have been asked to calculate how many days he will need to read a given book, by writing an algorithm to solve the problem. Enter the number of pages in the book and the number of pages that he is able to read per day. Calculate and display how long it takes to read the book. You also need to determine whether it is possible for him to read five books with the same number of pages during his 14 days of holiday. Display the answer. Ed 3 BPP 4th pgs.indb 68 2012/11/26 2:45 PM THE SELECTION CONTROL STRUCTURE: PART 1 • 69 Planning Description Type Variable name Pages per book Integer bookPages Pages per day Integer dayPages Intermediate Days to read 5 books Real days Output Days per book Real bookDays Message String message Input Table 15: Input and output variables for Example 4 Input Processing Output bookPages Prompt for input values bookDays dayPages Enter input values message Calculate bookDays Determine message Display output values Table 16: IPO chart for Example 4 Algorithm ReadingSpeed display “Provide number of pages per book ” enter bookPages display “Provide number of pages Dennis can read per day ” enter dayPages ~ Calculate days per book bookDays = bookPages / dayPages ~ Determine days to read 5 books days = bookDays * 5 ~ Display on new line ~ Display on new line ~ An intermediate ~ variable is used ~ On a new line display “Dennis takes ”, bookDays, “ days per book ” ~ Test if five books can be read during holidays and display output if days <= 14 then message = “Dennis can read five books during the holidays.” else message = “It is not possible for Dennis to read five books during the holidays.” endif display message ~ Display on new line end Ed 3 BPP 4th pgs.indb 69 2012/11/26 2:45 PM 70 • BASIC PROGRAMMING PRINCIPLES Test the program Book has 120 pages Dennis can read 50 pages per day Output; Provide number of pages per book 120 Provide pages read per day 50 Dennis takes 2.4 days per book Dennis can read five books during the holidays. Exercises 1. In each of the following cases, do the planning and write an algorithm to solve the problem: 1.1 The Great College offers two different courses in Programming that are offered as self-study courses in which the lecturer assists. The student can decide beforehand how many weeks he or she wants to study. The code of the first course is A, and the code for the second is B. You may assume that the user will only enter an A or a B. The price for course code A is R234 per week, whereas the price for the other course is R287.50 per week. The student has to enter the course code and the number of weeks of study. Calculate the total price of the course and display the course code and total price on the screen. 1.2 Spectators can purchase tickets to attend a soccer match at R15 per ticket. Anyone who buys eight or more tickets pays only R12.50 per ticket. Prompt the user to enter the number of tickets bought, then calculate and display the amount due. 2. Describe the variables and write only the if statement for the following. You may choose your own variable names if they haven’t been specified. 2.1 The weights of two dogs, Fluffy and Terry, are available. Display the name of the dog that weighs more than the other dog. 2.2 An employee’s salary, called empSalary, has been entered. Determine and display a message to indicate whether this person needs to pay income tax. Only people with an income of more than R3 000 per month have to pay tax. 2.3 Tom decided that he must have one shirt for every pair of pants. Determine whether this is true and display an appropriate message. 2.4 Josie wants to go to the movies, but isn’t allowed to go unless she’s done her homework – use a Boolean variable for this – and has R10 to pay for the ticket. Display a message to indicate whether she can go. 2.5 Test a student’s mark. If the mark is more than 47, increase the mark by 2.5%, otherwise decrease the mark by 5.7%. Display the new mark. Ed 3 BPP 4th pgs.indb 70 2012/11/26 2:45 PM THE SELECTION CONTROL STRUCTURE: PART 1 • 71 3. Study the following code: C = A * B + 3 mod 7 if A > C then display “A has a higher value than C” B=A–C else display “A is equal to or less than C” B=C–A endif display “The value of B is now ”, B display “The value of C is now ”, C ~ Display on a new line ~ Display on a new line ~ Display on a new line ~ Display on a new line 3.1 What will be displayed if the code is executed and the following values apply? A = 5 and B = 7 3.2 What will be displayed if the code is executed and the following values apply? A = 12 and B = -9 5 Compound If statements Programmers often find that more than one condition must be tested before the result can be true. A compound if statement, which is based on logical operators, can be used to resolve this. Example If a person is 18 years old or older and has a driver’s license, this person may drive a car. if age >= 18 AND licensed then display “You may drive a car.” else display “You may not drive a car.” endif Ed 3 BPP 4th pgs.indb 71 ~ Licensed is a Boolean variable 2012/11/26 2:45 PM 72 • BASIC PROGRAMMING PRINCIPLES No “You may not drive a car.” Yes Age > = 18? No “You may not drive a car.” licensed? Yes “You may drive a car.” Figure 3: An AND compound If statement represented as a flowchart The result of this compound test is true only when both the conditions are true. If one or neither of the conditions is true, the result is false. Example If an employee is a Grade C employee or has worked for the company for more than five years, a special bonus of R1 000.00 is awarded to the employee. if grade = “C” OR years > 5 then bonus = 1000 else bonus = 0 endif Ed 3 BPP 4th pgs.indb 72 2012/11/26 2:45 PM THE SELECTION CONTROL STRUCTURE: PART 1 No No Bonus = 0 Years > 5? Grade = “C”? Yes • 73 Yes Bonus = 1000 Bonus = 1000 Figure 4: An OR compound If statement represented as a flowchart For the result of this compound test to be true, at least one of the conditions must be true. If neither is true, the result is false. In cases like this, where the if statement contains more than two conditions, it is advisable to use parentheses to indicate the order in which the tests must be done, since the tests in the parentheses are done first. if gender = “M” OR (age > 20 AND member) then statement(s) endif Or, depending on the question/conditions: if (gender = “M” OR age > 20) AND member then statement(s) endif If parentheses are not used, all the AND operators are evaluated from left to right and only then will the OR operators be evaluated from left to right. Ed 3 BPP 4th pgs.indb 73 2012/11/26 2:45 PM 74 • BASIC PROGRAMMING PRINCIPLES The word NOT can also be used, but must be handled extremely carefully, because a beginner programmer might achieve the opposite result. NOT has a higher precedence than AND and OR, which means it will be evaluated first. Refer to Table 2 where these logical operators are summarised in a truth table. Example 5 This example shows the planning for a problem with a compound if statement. Problem Everybody in the town Little River will be attending the circus over the weekend. Do the planning and write an algorithm to determine the entrance fee for a particular person. Persons younger than 12 or persons 60 and older receive a 25% discount. The user must enter the normal entrance fee and the person’s age in years as an integer value. Calculate and display the entrance fee on the screen. Planning Input Output Description Type Variable name Entrance fee Real fee Person’s age Integer age Actual fee Real actFee Table 17: Input and output variables for Example 5 Input fee age Processing Prompt to read fee and age Enter input values Output actFee Determine actFee Display actFee Table 18: IPO chart for Example 5 Ed 3 BPP 4th pgs.indb 74 2012/11/26 2:45 PM THE SELECTION CONTROL STRUCTURE: PART 1 • 75 Algorithm DetermineEntranceFee ~ Enter input data display “Enter the normal fee ” ~ Display on new line enter fee display “Enter the age in years only ” ~ Display on new line enter age ~ Test age if age < 12 OR age > 59 then actFee = fee - fee * 0.25 ~ Subtract discount else actFee = fee endif ~ Display actual fee on a new line display “This person must pay an entrance fee of R ”, actFee end Test the program Test the program twice: Fee of R50 and an age of 9 years Fee of R80.50 and an age of 32 years Output: Enter the normal fee 50 Enter the age in years only 9 This person must pay an entrance fee of R37.50 Enter the normal fee 80.50 Enter the age in years only 32 This person must pay an entrance fee of R80.50 Exercise Write pseudocode for the following: Values for the variables A and B are given. Both variables contain real numeric values. If the value of A is greater than 17 and less than 47, swap the values of A and B, but if the value of A is either 5 or 87, increase the value of A by 20 and decrease the value of B by 5. Hint: Make use of a intermediate variable if it is necessary to swap the values. Ed 3 BPP 4th pgs.indb 75 2012/11/26 2:45 PM 76 • BASIC PROGRAMMING PRINCIPLES Example 6 The next example illustrates the use of a Boolean variable. Problem A student wants to work out at the Keep Fit Gym. The daily entrance fee is R8 for a member and R12 for a non-member. The user has to enter the student’s name and whether the student is a member. Display the student’s name and entrance fee. Planning Input Output Description Type Variable name Membership status Boolean member Student name String stName Student name String stName Message String message Table 19: Input and output variables for Example 6 Input stName age Processing Prompt to read input values Enter input values Output stName message Prepare message Display output values Table 20: IPO chart for Example 6 Ed 3 BPP 4th pgs.indb 76 2012/11/26 2:45 PM THE SELECTION CONTROL STRUCTURE: PART 1 • 77 Algorithm DetermineEntranceFee display “Enter student name: ” enter stName display “Indicate if the student is a member or not: ” enter member ~ Test membership if member then message = “ you must pay R8 entrance fee.” else message = “ you must pay R12 entrance fee.” endif ~ Display results display stName, message end ~ Display on new line ~ Display on new line ~ Equivalent to if member = TRUE ~ Display on new line Test the program by setting the member to TRUE after entering the name Sally Jones. Test the program again by setting the member to FALSE after entering the name Billy Ceronio. Output: Enter student name: Sally Jones Indicate if the student is a member or not: TRUE Sally Jones, you must pay R8 entrance fee. Enter student name: Billy Ceronio Indicate if the student is a member or not: FALSE Billy Ceronio you must pay R12 entrance fee 6 Data validation It is a good programming technique to code defensively, which means that you try to detect and identify all errors that a user could possibly make. Users are often inexperienced so many computer errors are actually a result of incorrect user input. If a program can detect an error before processing, the information will be accurate and reliable. There are a number of data validation tests that a programmer can use to code defensively. At this point, we’ll only test whether a numeric field contains a numeric value before it can be used for processing. In other words, the program will not be able to do calculations if the variable does not contain a numeric value. Ed 3 BPP 4th pgs.indb 77 2012/11/26 2:45 PM 78 • BASIC PROGRAMMING PRINCIPLES Example of a numeric test display “Please provide the hours worked and the tariff per hour ” enter hours enter tariff if hours is numeric AND tariff is numeric then wage = tariff * hours else display “Invalid input values” endif Exercises 1. Study the following problem statements carefully. In each case, indicate the variables used, draw an IPO chart and write an algorithm to solve the problem. Do a trace table for every odd-numbered question using carefully selected test data. 1.1 Enter the annual salary of an employee and also indicate whether the employee is a full-time or part-time employee. Full-time employees pay 29.5% income tax whereas the other employees pay 25% income tax. Calculate and display the gross monthly salary, monthly tax payable and the net monthly salary. 1.2 The Cheap Store sells affordable items to customers. Provide the selling price, number of items bought and discount percentage. The discount only applies if a customer buys 10 items or more. Calculate and display the discount and the amount due by the customer. 1.3 An employee earns a basic salary of R1,200 per month. He also earns commission on sales. The sales amount must be entered. On a sales amount of less than R3,500 he receives 8% commission, but if he sells more, the commission is 12.8%. The employee pays 5% of his commission to his manager. Calculate and display his net income on the screen of the computer. 1.4 Enter the distance that a participant in a competition cycles as well as the distance the participant swims. To earn a medal in a competition, a participant must cycle at least 20 kilometres and swim 500 metres. Develop an algorithm to determine if July qualified for a medal. 1.5 Billy has to transport a number of computers to his company. He can only load a certain number, which must be entered, into his vehicle. Enter the number of computers he has to transport and, if this number is higher than the number he can transport at the time he buys the computers, display an appropriate message on the screen. Also display how many computers still need to be transported. Ed 3 BPP 4th pgs.indb 78 2012/11/26 2:45 PM THE SELECTION CONTROL STRUCTURE: PART 1 • 79 2. Write down only the exact output that will be displayed after the following statements are processed. Hint: Use a table to enter the different values of the variables after execution of statements to determine the output. x=4 y=x+2 display “Here is the output” x = x * 2 – y /3 y=x*2 if x >= 8 then display “The value of x = ”, x else x=y-3 display “The value of x = ”, x endif w = x + y * 0.5 display x, “ ”, y, “ ”, w ~ Display on a new line ~ Display on a new line ~ Display on a new line 3 In each of the following cases, indicate whether the if statement is valid. If invalid, provide a reason and rewrite it as a valid statement. 3.1 if empName = Jones then 3.2 if 12000 < empSalary < 20000 then 3.3 if newSalary > or = 25000 then 3.4 if salIncrease > 12% of Salary then 3.5 if number NOT = 20 then 3.6 if number NOT > 20 then 3.7 if number < 10 AND number > 20 then 3.8 if number < 10 OR > 20 then 3.9 if indication = True then 3.10 if number < 25 000 then 4 Rewrite each of the following statements in a different way. 4.1 if numberA > numberB AND numberC = 10 then numberD = number + 1 endif 4.2 if number >= 10 then number = number + 1 endif Ed 3 BPP 4th pgs.indb 79 2012/11/26 2:45 PM 80 Chapter 5 The selection control structure: Part 2 Introduction Up to this point we’ve tested only one condition in an if statement and we’ve tested more than one condition in a compound if statement, but it is often necessary to test more conditions. This chapter deals with more complicated decision structures. Outcomes When you have studied this chapter, you should be able to: • write a nested if statement in pseudocode, • write a select case statement in pseudocode, • write algorithms containing • nested if statements, and • select case statements. 1 Nested If statements Study the following if-then-else statement: if condition1 then statement1 else statement2 endif Ed 3 BPP 4th pgs.indb 80 ~ Process when condition is true ~ Process when condition is false 2012/11/26 2:45 PM THE SELECTION CONTROL STRUCTURE: PART 2 • 81 Statement1 and/or statement2 could also be if-then-else statements, depending on the problem statement, which would change the general format to a nested if statement, as follows: if condition1 then if condition2 then statement1 else statement2 endif else if condition3 then statement3 else statement4 endif endif ⎫ ⎪ ⎬ ⎪ ⎠~ If condition1 is true ⎫ ⎪ ⎬ ⎪ ⎠~ If condition1 is false Note the indentation in the nested if statement. False False Condition 3? Statement4 Ed 3 BPP 4th pgs.indb 81 Condition 1? True Statement3 True False Condition 2? Statement2 True Statement1 2012/11/26 2:45 PM 82 • BASIC PROGRAMMING PRINCIPLES A nested selection structure is used if more than one decision must be made before an appropriate action can be taken. In the example above, condition1 is the outer selection structure and condition2 and condition3 the inner selection structures. The inner selection structures can also be nested. The following examples are used to illustrate nested if statements without logical operators (AND and/or OR). Example 1 The gender of a person is indicated by the code M (male) or F (female). In a competition, initial points are awarded to each candidate. Every male older than 15 receives 17 points, whereas males younger than 16 receive 20 points. A female younger than 18 receives 18 points, whereas a female older than 17 receives 21 points. The gender of a person is indicated by the code M (male) or F (female). if gender = “M” then if age > 15 then points = 17 else points = 20 endif else if gender = “F” then if age < 18 then points = 18 else points = 21 endif else display “Invalid gender” endif endif ~ Code defensively and test for possible input errors The age of this male must be less than or equal to 15 because the second if statement that follows the first else clause is false. There is no need to test for this condition again. The same rule (logic) applies to the second part of the if statement where the age for a female is tested. Ed 3 BPP 4th pgs.indb 82 2012/11/26 2:45 PM THE SELECTION CONTROL STRUCTURE: PART 2 False False Gender = “F”? False “Invalid gender” Age < 18? Points = 21 Ed 3 BPP 4th pgs.indb 83 Age > 15? Points = 20 False 83 True Gender = “M”? True • True Points = 17 True Points = 18 2012/11/26 2:45 PM 84 • BASIC PROGRAMMING PRINCIPLES Example 2 Table 1 contains the values of the real variables A and B and the steps to take when different conditions apply. Value of A Value of B 5.2 Greater than 20 5.2 Less than or equal to 20 6 Any value Steps to take Increase the value of A by 5 Decrease the value of B by 3.5 Initialise the values of A and B Table 1: Correspondences between A and B Note To initialise a value means assigning a zero to numeric values and spaces to non-numeric values. if A = 5.2 then if B > 20 then A=A+5 else B = B – 3.5 endif else if A = 6 then A=0 B=0 endif endif ~ The value of A is still 5.2 Note that if the value is not equal to 5.2 or is not equal to 6, the values of A and B will not change. Let’s start testing the algorithm with A = 5.2 and B = 25 as test data. Instruction A B Assign 5.2 25 Outcome of if If A = 5.2 True If B > 20 True Calculate 10.2 Table 2: Test 1 In Test 1, the value for A changed to 10.2, but the value of B remained 25. Ed 3 BPP 4th pgs.indb 84 2012/11/26 2:45 PM THE SELECTION CONTROL STRUCTURE: PART 2 • 85 Now let’s test the algorithm with A = 5.2 and B = 15 as test data. Instruction A B Assign 5.2 15 Outcome of if If A = 5.2 True If B > 20 False Calculate 11.5 Table 3: Test 2 In Test 2, the value for B changed to 11.5, but the value of A remained as 5.2. Now let’s test the algorithm with A = 6 and B = 100 as test data. Instruction A B Assign 6 100 Outcome of if If A = 5.2 False If A > 6 True Assign 0 Assign 0 Table 4: Test 3 In Test 3, the value for A and B both changed to 0. Finally, let’s test the algorithm with A = 8.3 and B = 21 as test data. Instruction A B Assign 8.3 21 Outcome of if If A = 5.2 False If A > 6 False Table 5: Test 4 In Test 4, the value for A will remain 8.3 and the value of B 21. Ed 3 BPP 4th pgs.indb 85 2012/11/26 2:45 PM 86 • BASIC PROGRAMMING PRINCIPLES Example 3 The variables A, B, K and Z are integers. Value of A Value of B Steps to take 0 - 14 0 -12 15 - 21 0 -12 22 - 40 13 or more Double the value of K Swap the values of A and B Decrease the value of K by 5 Table 6: Conditions to be met in order to take action if B < 13 then if A < 15 then K=K*2 else if A < 22 then Z=A A=B B=Z endif endif else if A >= 22 then if A <= 40 K=K-5 endif endif endif ~ B is tested before A ~ B is still in the range 0 - 12 and A is >= 15 ~ Z is used as an intermediate variable ~ In the else part, B will be ≥ 13 Once more, notice that the indentation enhances the readability of the nested if statement. The final endif is written in the same column as its associated if. Ed 3 BPP 4th pgs.indb 86 2012/11/26 2:45 PM THE SELECTION CONTROL STRUCTURE: PART 2 • 87 1.1 Nested If statements in programs Example 4 The Bright Light Company is increasing the salaries of its employees according to which department they work in, as shown in Table 7. Department code Percentage increase A 7.2 B 6.8 All others 6.3 Table 7: Percentage increases by department The user has to enter the department code and the current annual salary of the employee. The increased monthly salary is calculated and displayed using a nested if statement without logical operators. Data validation applies. Planning Input Output Description Type Variable name Department code Character deptCode Annual salary New monthly salary Real anSalary Real monSalary Table 8: Input and output variables for Example 4 Input deptCode anSalary Processing Prompt to read input values Enter input values Calculate monthly salary Display monSalary Output monSalary Table 9: IPO chart for Example 4 Ed 3 BPP 4th pgs.indb 87 2012/11/26 2:45 PM 88 • BASIC PROGRAMMING PRINCIPLES Algorithm CalcNewMonSalary ~ Calculate the increased monthly salary ~ Enter input display “Provide the department code: ” enter deptCode display “Provide annual salary: ” enter anSalary if anSalary is numeric then ~ Convert to monthly salary monSalary = anSalary / 12 ~ Calculate increase according to department code if deptCode = “A” then monSalary = monSalary + monSalary * 7.2 / 100 else if deptCode = “B” then monSalary = monSalary + monSalary * 6.8 / 100 else monSalary = monSalary + monSalary * 6.3 / 100 endif endif ~ Display results display “The increased monthly salary is R ”, monSalary else display “The annual salary must be numeric.” endif end ~ Display on new line ~ Display on new line ~ Display on new line ~ Display on new line Test the program four times, to cover every outcome of the if statement: Department code = A Annual salary = R24000 Department code = B Annual salary = R38500 Department code = G Annual salary = R30000 Department code = C Annual salary = R5OOOO When testing the algorithm, we have to include incorrect data as well. In the last example, Os instead of zeros will cause an error. Output: Provide the department code: A Provide annual salary: 24000 The increased monthly salary is R2144.00 Provide the department code: B Provide annual salary: 38500 The increased monthly salary is R3426.50 Ed 3 BPP 4th pgs.indb 88 2012/11/26 2:45 PM THE SELECTION CONTROL STRUCTURE: PART 2 • 89 Provide the department code: G Provide annual salary: 30000 The increased monthly salary is R2657.50 Provide the department code: C Provide annual salary: 5OOOO The annual salary must be numeric. Example 5 A vet prescribes medicine for dogs to keep them healthy and strong. The daily dosage depends on the weight of the dog and is calculated according to the following table: Weight of dog in kg Millilitres per 500 g <5 1.0 5–8 0.9 > 8 – 12 0.75 > 12 0.6 Table 10: Dosage per weight The user must enter the name of the dog and the weight of the dog in kilograms (to the nearest 500 g). Then the algorithm must calculate and display the daily dosage to be administered to the dog, as well as the dog’s name. Planning Input Intermediate Output Description Type Variable name Name of dog String name Weight of dog Variable used to test/calc Real dogWeight Real number500 Name of dog String name Daily medicine Real medicine Table 11: Input and output variables for Example 5 Ed 3 BPP 4th pgs.indb 89 2012/11/26 2:45 PM 90 • BASIC PROGRAMMING PRINCIPLES Input Processing Output name Prompt for input values name dogWeight Enter input values medicine Calculate dosage Display name, medicine Table 12: IPO chart for Example 5 Algorithm CalcMedicine ~ The algorithm will test whether a name has been entered for the dog and whether the ~ weight entered for the dog is numeric and is in kg, to the nearest 500 g, such as 3.5, 5, 6.5. A ~ weight of 7.8 will be invalid. The dosage will be calculated and displayed only if the input is ~ valid. ~ Enter name of dog display “Provide the name of the dog: ” enter name ~ Test if name has been entered if name = “ “ then ~ Outer If statement display “The name of the dog must be entered.” else ~ Enter weight only if name has been entered display “Provide the weight of dog in kg (to nearest 500 g): ” enter dogWeight ~ Test if weight is numeric, in which case convert it to the equivalent number in 500 g if dogWeight numeric then ~ Inner If statement 1 number500 = dogWeight * 2 ~ Test if weight entered is to the nearest 500 g. If the weight is 3.5, the weight in ~ 500 g will be 7. If the weight is 3, the weight in 500 g will be 6. Therefore the ~ weight in 500 g will never contain a remainder. if number500 MOD 1 = 0 then ~ Inner if statement 2 if dogWeight < 5 then medicine = number500 * 1 else if dogWeight <= 8 then ~ See comment 1 medicine = number500 * 0.9 else if dogWeight <= 12 then ~ See comment 2 medicine = number500 * 0.75 else medicine = number500 * 0.6 endif endif endif display name, “must receive a daily dose of ”, medicine, “ml” else ~ Else clause for inner if statement 2 display “The weight must be in kg and to nearest 500g, e.g. 3, 3.5, or 4” endif else ~ Else clause for inner statement 1 display “The weight entered for ”, name, “ must be numeric .” endif endif end Ed 3 BPP 4th pgs.indb 90 2012/11/26 2:45 PM THE SELECTION CONTROL STRUCTURE: PART 2 • 91 Comment 1 Each of the if statements tested only one condition, for example, the second if statement: if weight <= 8 then It didn’t test if weight >= 5 AND weight <= 8, because weight was already compared to 5 in the first if statement. When control is passed to the else part of that if statement, the weight is definitely greater or equal to 5! Comment 2 Similarly, it’s not necessary to test if weight > 8 AND weight <= 12. In the last inner if statement it’s only necessary to test if weight <= 12 because it will already be greater than 8 when it reaches this part of the if statement. When testing this program, it’s important to use test data that tests all the borderline cases to ensure that the program produces correct output in all cases. It’s also necessary to test the program with incorrect input data to check that appropriate error messages are displayed. Test the program as follows: Name of dog: Any name Test weights: 3.5, 5, 8, 12 and 25.5 kg Then test the program with weights 1O (O instead of 0) and 10.8. Finally test the program by omitting the dog’s name. Output: Provide the name of the dog: Fluffy Provide the weight of dog in kg (to nearest 500 g): 3.5 Fluffy must receive a daily dose of 7.0 ml Provide the name of the dog: Daisy Provide the weight of dog in kg (to nearest 500 g): 5 Daisy must receive a daily dose of 9.0 ml Provide the name for the dog: Georgy Girl Provide the weight of dog in kg (to nearest 500 g): 8 Georgy Girl must receive a daily dose of 14.4 ml Provide the name for the dog: Danny Boy Provide the weight of dog in kg (to nearest 500 g): 12 Danny Boy must receive a daily dose of 18.0 ml Ed 3 BPP 4th pgs.indb 91 2012/11/26 2:45 PM 92 • BASIC PROGRAMMING PRINCIPLES Provide the name for the dog: Victor Provide the weight of dog in kg (to nearest 500 g): 25.5 Victor must receive a daily dose of 30.6 ml Provide the name for the dog: Lady Provide the weight of dog in kg (to nearest 500 g): 1O The weight entered for Lady must be numeric. Provide the name for the dog: Tinky Provide the weight of dog in kg (to nearest 500 g): 3.8 The weight must be in kg and to the nearest 500 g, e.g. 3, 3.5 or 4. Provide the name for the dog: The name of the dog must be entered Example 6 The price of hiring a car per day from the Reliable Car Hire Company depends on the type of car the customer hires. The customer may choose between small (S), medium (M) and large (L) cars as shown in Table 13. Size of car Daily price in Rand S 200 M 260 L 400 Table 13: Car rental pricelist The user is asked to enter the type of car he or she needs as well as the number of days it will be hired. Calculate and display the total amount the customer has to pay, using a nested if statement. At the moment, there is a special offer of a 12.5% discount for hiring a small car. Planning Input Output Description Type Variable name Type of car Character code Number of days Integer noDay Amount due Real amtDue Table 14: Input and output variables for Example 6 Ed 3 BPP 4th pgs.indb 92 2012/11/26 2:45 PM THE SELECTION CONTROL STRUCTURE: PART 2 Input Processing Output code Prompt for input values amtDue noDays Enter input values • 93 Validate data Calculate amtDue Display amtDue Table 15: IPO chart for Example 6 Algorithm CalcAmtDue ~ Calculate the amount to hire a car ~ Input display “Enter the type of car you need (S, M or L): ” ~ Display on new line enter code display “Enter number of days for car hire: ” ~ Display on new line enter noDays ~ Validate and calculate amount if noDays not numeric then display “Number of days entered not numeric.” ~ Display on new line display “You entered ”, noDays else if code = “S” or code = “s” then amtDue = noDays * 200 discount = amtDue * 0.125 amtDue = amtDue – discount display “The amount due is R”, amtDue ~ Display on new line else if code = “M” or code = “m” then amtDue = noDays * 260 display “The amount due is R”, amtDue ~ Display on new line else if code = “L” or code = “l” then amtDue = noDays * 400 display “The amount due is R”, amtDue ~ Display on new line else display “Wrong code entered, only S, M or L is valid.” ~ Display on new line display “You entered the code “, code endif endif endif endif end In addition to testing a normal transaction, we should test incorrect data. We’ll include a non-existent car type as well as a non-numeric value for the number of days. We’ll also include a small car to test the special offer. Ed 3 BPP 4th pgs.indb 93 2012/11/26 2:45 PM 94 • BASIC PROGRAMMING PRINCIPLES Test the program as follows: Type of car Number of days Small 4 Large 3 Grand 9 Medium K Output: Enter the type of car you need S, M or L: S Enter number of days for car hire: 4 The amount due is R700.00 Enter the type of car you need S, M or L: L Enter number of days for car hire: 3 The amount due is R1200.00 Enter the type of car you need S, M or L: G Enter number of days for car hire: 9 Wrong code entered, only S, M or L is valid. You entered the code G Enter the type of car you need S, M or L: M Enter number of days for car hire: K Number of days entered not numeric. You entered K Exercises 1. Write only the nested if statements without logical operators for each of the following problem statements. You can assume that all the variables contain valid values. Choose your own variable names where applicable. 1.1 Calculate the medical aid contribution of an employee calculated according to the values in Table 16. You can assume that the salary is stored in the variable called salary and the number of dependants is stored in the variable noDepend. Monthly salary Dependants Percentage of salary 0 – 4999.99 Any number 0 1 or more 2% 5000 and more 4% 3.5% Table 16: Medical aid contributions Ed 3 BPP 4th pgs.indb 94 2012/11/26 2:45 PM THE SELECTION CONTROL STRUCTURE: PART 2 • 95 1.2 If the ABC field contains a negative value, calculate the value of XYZ by multiplying the value of ABC by 2.5, but if the value of ABC is positive, store 35% of ABC in XYZ. If the value of ABC is zero, decrease the current value of XYZ by 8.3%. 1.3 The variable called person contains code A for adults or C for children, whereas the variable called member contains True or False to indicate whether the person is a member of the club. The club is having a fun day and the entrance fee is determined as follows: R25 for adult members and R8 for child members. A non-member pays 50% more than a member. Store the entrance fee in a variable called fee. 1.4 At the Cheap-Unfair Company, salaries of employees are computed as follows: • A male employee earns a basic salary of R7000 per month. He receives an additional R150 for each year of service, and an additional R550 if he has a qualification. A 10% tax and 7% pension fund contribution are deducted from his gross salary to determine her net salary. • A female employee earns a basic salary of R6500 per month, an additional R140 for every year of service and an additional R650 if she has a qualification. An 8.5% tax and 7.5% pension fund contribution are deducted from her gross salary to determine her net salary. The user must provide the necessary input values and must use a logical (Boolean) value for the qualification. 1.5 At the ABC Company, employees are paid a certain rate per hour. The company wants to modify the rate as follows: • If the number of hours worked (hours) is 40 and the rate per hour (rate) is less than R28.50, increase the rate per hour by R1.50. • If the number of hours is 40 and the rate per hour is R28.50 or more, increase the rate per hour by R1.20. • If the number of hours worked is greater than 40 and the rate per hour is greater than or equal to R28.50, increase the rate per hour by 1.5%. • If the number of hours is less than 40, decrease the rate per hour by R0.50 per hour. After the rate has been modified, calculate the pay. Ed 3 BPP 4th pgs.indb 95 2012/11/26 2:45 PM 96 • BASIC PROGRAMMING PRINCIPLES 2. Study the following algorithm and predict the answers when the variable called code is equal to 4, 9 or 2. In all three cases, the variable called amount is equal to 1000. PredictTheAnswer if code > 8 then amount = amount * 0.9 else if code > 5 then amount = amount * 0.8 else if code > 3 then amount = amount * 0.75 else amount = 0 endif endif endif display “Amount = ” , amount end 3. Study the following nested if statement, then complete the third column (the value for z) if the values for x and y in Table 17 are used. if x < 0 then if y < x then z=x+y else z=x–y endif else if x < y z=x*y else z=x/y endif endif x y 5 8 -5 -6 -3 -3 10 5 z Table 17: Values of x and y Ed 3 BPP 4th pgs.indb 96 2012/11/26 2:45 PM THE SELECTION CONTROL STRUCTURE: PART 2 • 97 4. Carefully study the following problem statements. In each case, indicate the variables used, draw an IPO chart and write an algorithm to solve the problem. Create a trace table for every odd-numbered question using carefully selected test data. 4.1 Poppy, who counts every cent to get the best value for her money, needs to buy washing powder. She went to the shop and wrote down the prices of the 500 g, 750 g and 1 kg packets of her favourite washing powder. She wants to write a program to determine which one of the packets is the best buy (most economical). Do the calculations and display which packet she should buy. The user should be prompted to enter the prices for all three packets. You can test your program with the following test data: 500 g R14.85 750 g R21.95 1 kg R29.83 Don’t use these values as fixed values in your program – use them only as test values. 4.2 Johnny has some money saved in the bank on which he earns an annual interest of 9.5%. Johnny needs to enter the amount he has saved, then calculate the amount of interest he earns every month. For the sake of the calculation you can assume that an equal amount of interest is earned every month (disregarding the varying number of days per month). Calculate and display the income tax he has to pay on the interest earned according to the values in Table 18. Interest amount Percentage income tax payable Less than R1000 0 R1000.01 – R2000 7.5% on amount > R1000 R2000.01 – R3200 9.5% on amount > R1100 Table 18: Income tax on interest earned Ed 3 BPP 4th pgs.indb 97 2012/11/26 2:45 PM 98 • BASIC PROGRAMMING PRINCIPLES 4.3. The Anything Company employs representatives who sell products to the public. These representatives (code = REP) are grouped into areas. Each area has an area manager (code = AM). A region contains five areas and has a regional manager (code = RM). Each representative receives a 20% commission on sales, whereas his/her area manager receives 5% on it and the regional manager receives 2% on it. Area managers and regional managers may also sell products. Therefore: • If the representative sells the products, he/she gets commission (20%), the area manager gets commission (5%) and the regional manager gets an amount (2%), • If the area manager sells the products, he/she gets commission (20% + 5%) as well as the regional manager, who gets 2%, • If the regional manager sells the products, he/she gets all the commission (20% + 5% + 2%). The user enters a representative’s name, code and amount of sales. Provide for incorrect input values. Depending on the code, calculate and display the commission for each person. Examples: • Code REP – display the commission for the representative, area manager and regional manager, • Code AM – display the commission for the area manager and regional manager, • Code RM – display the commission for the regional manager. 2 The Select Case structure Like nested if statements, select case structures are used to perform processing steps depending on the outcome of a tested condition. However, case structures are used when the same variable is tested for many different values. Study the following if statement: if number = 1 then display “Group 1” else if number = 3 then display “Group 3” else display “Group unknown” endif endif Ed 3 BPP 4th pgs.indb 98 2012/11/26 2:45 PM THE SELECTION CONTROL STRUCTURE: PART 2 • 99 The same condition can be tested in a select case statement, which is much easier to read. select case number case 1 display “Group 1” case 3 display “Group 3” case else display “Group unknown” endselect ~ Indicate the variable to be tested ~ If no match is found This structure always begins with the words ‘select case’ and ends with ‘endselect’. Note the indentation to ensure that the code is easier to read and understand. The ‘case else’, which is used when none of the options is true, is optional, not mandatory. There can also be more than one statement for an outcome of a specific condition. In the following example, different ranges of values of noItems (number of items) are tested to assign a percentage and display a specific code, then to calculate a discounted amount and display the answer. select case noItems case 1 to 10 percentage = 5 display “*” case 11 to 20 percentage = 6.4 display “$” case > 20 percentage = 7 display “#” endselect amount = (noItems * price) – (noItems * price * percentage / 100) display “The amount is R ”, amount Ed 3 BPP 4th pgs.indb 99 2012/11/26 2:45 PM 100 • BASIC PROGRAMMING PRINCIPLES Example 7 Write a select case statement to calculate the new value of the price variable depending on the grade, based on the values in Table 19. Grade Processing of price A Double the price B Add VAT of 14% C Deduct a discount of 8.75% Add R5 if the price is higher than R50 Subtract R4 if the price is equal to R50 or lower Other Table 19: Price according to grade select case grade case “A” price = price * 2 case “B” price = price * 1.14 case “C” price = price * 0.9125 case else if price > 50 then price = price + 5 else price = price – 4 endif endselect ~ (1 - 0.0875 = 0.9125) Example 8 The following example demonstrates that it is not necessary to test each value that has the same outcomes in separate case statements. Write a select case statement for the following: If the name is Sally or Tania, display the message “She is a girl.”; but if the name is Jim, John or Russell, display the message “He is a boy.” select case name case “Sally”, “Tania” display “She is a girl.” case “Jim”, “John”, “ Russell” display “He is a boy.” endselect Ed 3 BPP 4th pgs.indb 100 2012/11/26 2:45 PM THE SELECTION CONTROL STRUCTURE: PART 2 • 101 Example 9 Summer has to read a number of prescribed books and has decided to reward herself by watching TV for an allocated number of minutes based on the number of pages she reads. Enter the number of pages read, then calculate and display the minutes using a select case statement. If more than 400 pages are entered, an error message must be displayed, because none of the prescribed books has that many pages! Pages read Minutes 0 – 20 0 21 – 50 10 51 – 100 40 More than 100 75 Table 20: Minutes per number of pages Planning Input Output Description Type Variable name Number of pages Number of minutes Error message Integer pages Integer minutes String message Table 21: Input and output variables for Example 9 Input Processing Output pages Prompt for pages minutes Enter pages message Calculate minutes Display minutes and message Table 22: IPO chart for Example 9 Ed 3 BPP 4th pgs.indb 101 2012/11/26 2:45 PM 102 • BASIC PROGRAMMING PRINCIPLES Algorithm RewardingMinutes ~ Initialising a Boolean variable to assume that input entered is valid validPages = True ~ Input display “Enter the number of pages read: ” ~ Display on new line enter pages if pages is numeric then ~ Validate input select case pages case 0 to 20 minutes = 0 case 21 to 50 minutes = 10 case 51 to 100 minutes = 40 case 101 to 400 minutes = 75 case else display “The pages must be > 0 and not more than 400.” validPages = False endselect else validPages = False endif ~ Display output only if input was valid. Display a different message if Summer is not ~ allowed to watch TV. if validPages = True then if minutes = 0 then display “You must read more than 20 pages to watch TV. Better luck next time.” else display “Good girl! You may watch TV for ”, minutes, “minutes.” endif endif end Test data: Pages = 45, 432, -6, 255, x Output: Enter the number of pages read: 45 Good girl! You may watch TV for 10 minutes. Enter the number of pages read: 432 The pages must be > 0 and not more than 400. Enter the number of pages read: -6 The pages must be > 0 and not more than 400. Ed 3 BPP 4th pgs.indb 102 2012/11/26 2:45 PM THE SELECTION CONTROL STRUCTURE: PART 2 • 103 Enter the number of pages read: 255 Good girl! You may watch TV for 75 minutes Enter the number of pages read: 16 You must read more than 20 pages to watch TV. Better luck next time. Exercises 1. Write only the select case statements for the following problem statements. 1.1 If the value of K is equal to 3, increase the value of A by 5%. If the value of K is equal to 4, decrease the value of A by 8. If the value of K is equal to 7, add the value of B to the value of A, otherwise decrease the value of A by 12%. 1.2 If the integer variable called xyz contains a value of 3, 8 or 9, display three asterisks, but if xyz contains a negative value, display five asterisks. However, if the value is between 10 and 20, then display seven asterisks. If xyz contains any other value, display four equals signs. 1.3 Change the value of the variable called X based on the value of A, as given in Table 23. A and X contain positive values; X is a variable with a real value and A is variable with an integer value. Value of A Value of X Less than 15 Increase by 2.5% Between 20 and 30 Replace with the square root of X Greater than or equal to 50 Decrease by 12.5% None of the above Increase by 10% of A Table 23: Actions to be taken regarding X, depending on the value of A 1.4 The marital code of a person is stored in the variable called marCode. Display the corresponding description on the screen. Provide for an incorrect marital code. S = single M = married D = divorced W = widowed Ed 3 BPP 4th pgs.indb 103 2012/11/26 2:45 PM 104 • BASIC PROGRAMMING PRINCIPLES 1.5 The commission that a salesperson earns is stored in the variable called income. The salesperson also earns a bonus, based on the sales that are stored in the variable called sales, as given in Table 24. Sales in Rand Bonus in Rand 0 - 5 000 0 5 001 - 10 000 500 10 001 - 35 000 1 500 + 0.5% of sales 35 001 and more 4 000 + 1% of sales Table 24: Bonus sliding scale 2. Display the bonus using a select case statement. 2.1 Rewrite the following if statement as a select case statement. if code = “S” then Sport = “Soccer” else if code = “R” then Sport = “Rugby” else if code = “T” then Sport = “Tennis” else if code = “H” then Sport = “Hockey” else if code = “B” then Sport = “Basketball” else Sport = “Unknown” endif endif endif endif endif 2.2 Rewrite the select case statements in Examples 7 and 8 as nested if statements. 3. Study the following problem statements carefully. In each case, indicate the variables used, draw an IPO chart and write an algorithm to solve the problem. 3.1 Rewrite the nested if statement you wrote in Section 1, Exercise 4.2 as a select case statement. 3.2 Enock runs a gardening service that charges by the hour on a sliding scale, as given in Table 25. He also charges an additional R2.50 per hour for equipment used. Enter the hours worked as a real number Ed 3 BPP 4th pgs.indb 104 2012/11/26 2:45 PM THE SELECTION CONTROL STRUCTURE: PART 2 • 105 and calculate and display the amount owed to him. Use a select case statement to calculate the amount. Hours worked Payment per hour 0–2 R20.00 >2 – 4.54 R19.20 4.6 – less than 6 R18.20 6 hours and more R17.88 Table 25: Hourly rate sliding scale 3.3 The cost of postage depends on the weight of a parcel. The weight is entered in kilograms. If the parcel weighs 1.5 kg or less, the postage is R15.85. Postage increases at a rate of R7.50 per kilogram or part thereof, if the weight is more than 1.5 kilograms. Calculate the postage for a parcel and display the postage and weight on the screen. 3.4 Enter an integer value for the variable called num that contains a value between 35 and 74. Determine if the ‘tens’ digit is equal to, greater than or less than the ‘ones’ digit and display the number and a message accordingly. Choose appropriate variable names. Output examples: The number is 47 The tens digit is less than the ones digit The number is 55 The tens digit is equal to the ones digit The number is 63 The tens digit is greater than the ones digit 3.5 Enter an integer value for the variable called num that has a value between 14 and 50. Determine if the number is a multiple of 3 and if not, determine if the number is a multiple of 17. Display the number and a suitable message. 3.6 Employees working at the Good Fortune Company have the option of joining a savings plan. There are three plans available − Premium, Gold and Silver. The name of the employee, the salary and the name of the selected plan are entered. The company deducts 8% of an employee’s salary for the Premium savings plan, 5% for the Gold plan, and R150 for the Silver plan. Determine the amount that must be paid to the savings plan. If an incorrect plan name is entered, the amount paid to the savings plan is zero. The amount that has been saved to date must also be entered, and must be increased by the new amount. Display the name of the employee and the total amount saved. Use a select case statement to determine the plan selected. Ed 3 BPP 4th pgs.indb 105 2012/11/26 2:45 PM 106 • BASIC PROGRAMMING PRINCIPLES 3.7 FRIENDLY CONSUMER is an application that gives advice about various products to consumers. The user must enter the description of a product as well as the current price and the price one year ago. The algorithm must then evaluate whether the current price is less than, equal to or greater than the price one year ago. If greater than (which is more than likely), the difference between these two prices must be calculated. The algorithm must display a message advising the user to buy a product only if the price remained the same or decreased (which is unlikely). If there was an increase in the price, the algorithm must calculate the percentage increase and compare it with the current rate of inflation of 6.3%. If the increase percentage is less than or equal to the inflation rate, the user must be advised to buy the product. However, users must be advised not to buy a product if the price rose more than the inflation rate. 3.8 At the ABC cellphone company, the price of a phone call using an ABC cellphone depends on the length of the call and the connection type, as given in Table 26. Type A clients get a 10% discount on all calls. An ABC cellphone Price in R/c per minute or part thereof .90 Other cellphone 1.35 Landline 1.90 Connection type Table 26: ABC cellphone tariffs The user must enter his/her cellphone number and the length of the call in seconds. The user must then enter the connection code − 1: ABC cellphone; 2: Other cellphone; 3: Landline – as well as whether the client is a type A client (TypeA = “Y” or “N”). The amount due must then be calculated and displayed. Use if statements for the calculations. You can assume that all input will be correct. 3.9 The HELP-A-STUDENT scheme provides loans to students to complete their studies. At the end of their studies simple interest of 15% is added to this amount to determine the total amount that must be paid back. However, if a student obtains two or more distinctions over the total study period, discounts apply as follows: for 2 – 3 distinctions, 3.5% is deducted from the total amount; for 4 – 5 distinctions, 5.5% is deducted from the total amount; for 6 – 8 distinctions, 7.5% is deducted from the total amount and for more than 8 distinctions 10% is deducted from the total amount. Ed 3 BPP 4th pgs.indb 106 2012/11/26 2:45 PM THE SELECTION CONTROL STRUCTURE: PART 2 • 107 This total amount must then be paid back in equal payments over 1½ times the number of months that the amount was borrowed. Enter the required values, then calculate and display the following: • total amount that will have to be paid back, • number of months over which it must be paid back, and • the monthly instalment. 4. 3.10 Lerato wants to bake a chocolate pudding that makes its own sauce. She has two baking dishes available, but to prevent the pudding from boiling over, she wants to bake it in the baking dish with the larger volume. One baking dish is round and the other is square. Enter the diameter and the depth of the round baking dish, then enter the length and depth of the square baking dish. Calculate the volume of both baking dishes. Based on the outcome, display a message to indicate which baking dish to use for the pudding. If the volume of both is the same, display a message to indicate that either of the two can be used. The volume of both baking dishes must also be displayed as output. You can assume that all input values entered will be valid. You can use the following formulas in your solution: Volume of round baking dish = πr2d (π=3.14285, r = radius, d = depth) Volume of square baking dish = 2ld (l = length, d = depth) 4.1 Rewrite the following if statement in a more efficient way. if dept = 1 then salary = salary * 1.1 if salary > 10000 then bonus = 250 salary = salary + bonus else bonus = 500 salary = salary + bonus endif else salary = salary * 1.1 if salary > 20000 then bonus = 550 salary = salary + bonus else bonus = 650 salary = salary + bonus endif endif Ed 3 BPP 4th pgs.indb 107 2012/11/26 2:45 PM 108 • BASIC PROGRAMMING PRINCIPLES 4.2 Identify the mistake in the following if statement. if salary < 20000 then if salary > 25000 then salary = salary + 1000 else salary = salary + 500 endif endif 5. Write down the exact output of each of the following groups of statements. 5.1 a=5 b=7 c = 14 if (a + b) >= (c + 3) then display “The answer is *” else if (c – a) <= (b + 2) then display “The answer is %” else display “The answer is #” endif endif ~ Display on new line ~ Display on new line ~ Display on new line 5.2 x = 30 y=7 z = 12 if x = y + 23 AND z = x – y then k = x + z mod 7 else if z – x < y - z OR z = x + y then k = y * (2 + z) \ 3 else k=x+y+z*2 endif endif display “The result is ”, k Ed 3 BPP 4th pgs.indb 108 2012/11/26 2:45 PM THE SELECTION CONTROL STRUCTURE: PART 2 • 109 5.3 code = 4 digit1 = 5 digit2 = 8 sum = 12 if code > 5 then sum = sum + digit1 mod 2 display “The sum is increased” else if code > 3 then sum = sum + digit2 mod 11 display “The sum is calculated” else display “The sum is not increased” endif endif display “The answer is ”, sum 5.4 money = 20.00 percentage = 5 installment = (money + money * percentage / 100) / 10 display “The amount to be paid is R”, installment if installment < 2 then display “The amount is less than R2” else if installment < 6 then display “The amount is less than R6” else display “The amount is equal to or more than R6” endif endif Ed 3 BPP 4th pgs.indb 109 2012/11/26 2:45 PM 110 Chapter 6 Iteration using a fixed count loop Introduction Programming often involves repeating a set of instructions a number of times. Sometimes we know exactly how many times we need to repeat the instructions, and other times we don’t. This type of programming is called iteration or looping. In this chapter, we’ll discuss the for loop where we know exactly how many times to repeat a set of instructions. This is sometimes called a fixed count loop or an automatic count loop. Outcomes When you have studied this chapter, you should be able to: • write a loop in pseudocode using a for-next statement, • explain the purpose of an accumulator and implement it in a solution, and • know when to display output during every execution of a loop and when to display it at the end of the loop. 1 The For-next loop The syntax of the for-next loop is as follows: for variable1 = begin-value to end-value [step variable2] ⎫ statement 1 ⎪ statement 2 ~ Body of the for-next statement ⎬ ⎪ statement n ⎠next variable1 Ed 3 BPP 4th pgs.indb 110 2012/11/26 2:45 PM ITERATION USING A FIXED COUNT LOOP • 111 Variable1 indicates a variable that contains the initial value or begin-value. The statements in the body of the loop will then be executed, after which variable1 will be incremented by variable2. This process will continue until variable1 has moved past end-value for the first time. Variable1 is called the index of the for-next loop. If [step variable2]is omitted, a default value of +1 is used. There can be one or many statements in the body of the for-next statement. If the step is negative, begin-value must be greater than end-value. It is not necessary that the variables must be integers. The step may be a fraction, in which case all variables must be of the data type real. Example 1 A for-next statement is used to display the consecutive numbers from 1 to 10. k=1 for i = 1 to 10 display k, “ “ k=k+1 next i ~ On the same line The output will be: 1 2 3 4 5 6 7 8 9 10 Note the space (“ “) in the display statement, which ensures that the output is more readable. This for-next statement can be written more effectively using the index i, as follows: for i = 1 to 10 display i, “ “ next i ~ On the same line These statements will produce the same result. Ed 3 BPP 4th pgs.indb 111 2012/11/26 2:45 PM 112 • BASIC PROGRAMMING PRINCIPLES i=1 Yes i > 10? No i, ” ” i=i+1 Figure 1: Flowchart of the For-next statement using an index Example 2 The for-next statement is changed to display the consecutive numbers from 1 to 10 in descending order. This means that the step must be negative and the statements must change, as follows: for i = 10 to 1 step -1 display i, “ “ next i Ed 3 BPP 4th pgs.indb 112 ~ On the same line 2012/11/26 2:45 PM ITERATION USING A FIXED COUNT LOOP • 113 The output will now be: 10 9 8 7 6 5 4 3 2 1 i = 10 Yes i < 1? No i, ” ” i=i−1 Figure 2: Flowchart of the For-next statement with a negative step Ed 3 BPP 4th pgs.indb 113 2012/11/26 2:45 PM 114 • BASIC PROGRAMMING PRINCIPLES Questions What will the output of the following for-next loops be? 1. for x = 0.5 to 5.5 step 0.5 display x, “ “ next x 2. for x = 1 to 15 step 2 display x, “ “ next x 3. for x = 2 to 18 step 3 display x next x 4. for y = 5 to 0 step -1 display y next y ~ On the same line ~ On the same line ~ On a new line ~ On a new line Example 3 The sum of the first five odd numbers is calculated and displayed. sum = 0 ~ Initialise the value of sum in the beginning odd = 1 ~ First odd number for k = 1 to 5 ~ Loop will execute 5 times sum = sum + odd ~ Add the current odd number to the sum odd = odd + 2 ~ Move to the next odd number next k ~ Move to the next value of k display “The sum of the first 5 odd numbers is “, sum People often think that they don’t need the sum until just before the processing ends, so they plan to calculate the sum just before it’s needed. But it simply doesn’t work that way! Right at the end, only the last odd number is available. So whenever the number – in this case, the next odd number – is available, it must be added to the sum. Every number will be available in the current execution of the loop. Ed 3 BPP 4th pgs.indb 114 2012/11/26 2:45 PM ITERATION USING A FIXED COUNT LOOP • 115 Let’s create a trace table to make this clearer. Instruction sum assignment 0 assignment odd 1 1 calculation 3 for calculation 2 4 calculation 5 for calculation 3 9 calculation 7 for calculation 4 16 calculation 9 for calculation calculation for Output 1 for calculation k 5 25 11 6 display The sum of the first 5 odd numbers is 25 Table 1: The trace table for Example 3 Note that in this example, the answer is only displayed once, after the loop has terminated. The technique used above, to add or summate inside a loop, is sometimes referred to as accumulation. The variable, sum, is called an accumulator. Accumulation is often used in problem solving to calculate a total or an average. When you add 1 to the accumulator during every execution of the loop, the accumulator is called a counter. Ed 3 BPP 4th pgs.indb 115 2012/11/26 2:45 PM 116 • BASIC PROGRAMMING PRINCIPLES sum = 0 odd = 1 k=1 K > 5? Yes No sum = sum + odd odd = odd + 2 k=k+1 “The sum of the first 5 odd numbers is”, sum Figure 3: Flowchart representation of Example 3 Ed 3 BPP 4th pgs.indb 116 2012/11/26 2:45 PM ITERATION USING A FIXED COUNT LOOP • 117 Example 4 The first six multiples of 5 (starting at 5) are displayed, as well as their sum. Once again, we need the sum of all the numbers at the end of the execution of the loop. However, we can only calculate the sum if we add every number (multiple of 5) to the sum when it becomes available during each execution of the loop. The sum must be displayed only once, at the end of the loop. However, we need to display every new multiple of 5 before we add it to the sum, as stated in the problem statement. So we also need a display statement inside the loop. We can display it just after we’ve added it to the sum, as long as we display it before the next multiple of 5 is calculated. The loop will have to execute six times because we need to calculate six multiples of 5. Algorithm MultiplesOf5 sum = 0 multiple = 5 display “The first 6 multiples of 5 and their sum: ” for x = 1 to 6 display multiple sum = sum + multiple multiple = multiple + 5 next x display “Sum =”, sum end ~ On a new line Next we’ll test the algorithm using a trace table. Ed 3 BPP 4th pgs.indb 117 2012/11/26 2:45 PM 118 • BASIC PROGRAMMING PRINCIPLES Instruction sum assignment 0 assignment multiple x 5 display The first 6 multiples of 5 and their sum for 1 display calculation 5 5 calculation 10 for 2 display calculation 10 15 calculation 15 for 3 display calculation 15 30 calculation 20 for 4 display calculation 20 50 calculation 25 for 5 display calculation 25 75 calculation 30 for 6 display calculation calculation for Output 30 105 35 7 display Sum = 105 Table 2: The trace table for Example 4 Note that each multiple of 5 is displayed in the loop and their sum is only displayed once, after the loop has terminated. Ed 3 BPP 4th pgs.indb 118 2012/11/26 2:45 PM ITERATION USING A FIXED COUNT LOOP • 119 Example 5 Eight integers between 5 and 48 are entered and the average of these numbers is displayed. Before we start doing the algorithm, we first have to think about it, make some notes and plan how we’re going to do the logic. • Once more, we only need the average right at the end, but we need a sum before the average can be calculated. To calculate the average, we also need the value of the final sum to be divided by the number of values added to the sum. This can only be done after the loop has terminated and before the program terminates. • The eight numbers must be entered one by one by the user within the fornext loop, and added to the sum. • Each number entered must be validated first to check that it is indeed between 5 and 48. If not, an error message must be displayed and the user must re-enter it. Because the loop is executed eight times, 1 will have to be deducted from the counter that controls the loop to repeat that execution of the loop. • Finally, the average can only be displayed after it has been calculated just before the final display statement. Algorithm AverageOf8Integers sum = 0 ~ Initialise the value of sum to add ~ the integers for x = 1 to 8 display “Enter any integer between 5 and 48: ” ~ On new line enter number if number > 5 and number < 48 then sum = sum + number else display “The number must be between 5 and 48, please re-enter” x=x–1 endif next x average = sum / 8 display “The average of the 8 numbers is ”, average end Let’s look at some more worked examples that use loops. Example 6 This example shows the planning and an algorithm to display a series of even numbers. These two questions must be asked of the user: • At what even number do you want to start? • How many even numbers do you want to display? Ed 3 BPP 4th pgs.indb 119 2012/11/26 2:45 PM 120 • BASIC PROGRAMMING PRINCIPLES Planning Input Output Description Type Variable name Even number to start Integer beginNo How many even numbers Integer howMany Output even numbers Integer evenNo Table 3: Input and output variables for Example 6 Input Processing Output beginNo Prompt for input values evenNo howMany Enter input values Calculate new even number Display evenNo Table 4: IPO chart for Example 6 Algorithm DisplayEvenNumbers ~ Calculate the desired even numbers display “ Provide the beginning even number” enter beginNo display “How many even numbers must be displayed? “ enter howMany if beginNo is numeric then if howMany is numeric and howMany > 0 then remainder = beginNo MOD 2 if remainder = 0 then even = beginNo ~ Display on new line ~ Display on new line ~ Test if beginNo is an even ~ number ~ Use a loop to display the even ~ numbers for x = 1 to howMany display even, “ “ ~ On one line even = even + 2 next x else display “The begin number must be an even number” endif else display “The number must be numeric and greater than 0” endif else display “The begin number must be numeric” endif end Ed 3 BPP 4th pgs.indb 120 2012/11/26 2:45 PM ITERATION USING A FIXED COUNT LOOP • 121 Test the logic with the following four sets of test data: beginNo = 8, howMany = 10 beginNo = 16, howMany = -3 beginNo = 9, howMany = 15 beginNo = x, howMany = 3 Output: 8 10 12 14 16 18 20 22 24 26 The begin number must be an even number The number must be numeric and greater than 0 The begin number must be numeric Questions 1. What will the output be if the user enters -16 as the begin value and 9 for howMany? 2. What will the output be if the user enters 0 as the begin value and 4 for howMany? Exercises The for-next statement in the DisplayEvenNumbers algorithm can be changed as follows: for x = beginNo to ((howMany * 2) + beginNo) step 2 display x next x Create a trace table to prove that this last for loop will yield the correct result. Example 7 The ten students in the Information Systems class at Brilliant College wrote a test. The principal of the college wants to know what the highest mark is and who obtained it, as well as the name and mark of the student who obtained the lowest mark. The user must enter all the names and test marks, which must be displayed. The marks are percentages given as integers. Assume that none of the students have the same mark. Planning When planning this program, we need to clarify a few aspects. First we need to have a value to compare the current mark to, to determine which mark is Ed 3 BPP 4th pgs.indb 121 2012/11/26 2:45 PM 122 • BASIC PROGRAMMING PRINCIPLES lower or higher than the other one. So we’ll declare one variable called lowest and another called highest. These will contain the lowest and the highest test marks respectively. There are two ways to do this: Method 1 • Assign a very low value to highest (-1 for instance) so that all the current values compared to this number will be higher. • Then assign a very high value to lowest (101, for instance) so that all the current values compared to this number will be lower. • Then repeat the process ten times. Method 2 • Assign the mark of the first student to both lowest and highest in order to compare the current values. • Repeat the process only nine times, because the first value has already been dealt with. We’re going to use the second method in our algorithm. We’ll also assume that all input values will be valid. Input Intermediate Output Description Type Variable name Name of student Student’s test percentage Student number Name of best student Highest percentage Name of weakest student Lowest percentage String stName Integer testMark Integer st String highestName Integer highest String lowestName Integer lowest Table 5: Input and output variables for Example 7 Input Processing Output stName Prompt for input values highestName testMark Enter input values highest Compare to find results lowestName Display output values lowest Table 6: IPO chart for Example 7 Ed 3 BPP 4th pgs.indb 122 2012/11/26 2:45 PM ITERATION USING A FIXED COUNT LOOP • 123 Algorithm TestResults ~ Find highest and lowest marks in test results ~ Enter the name and percentage for the first student display “Enter the name of the first student” ~ Display on new line enter stName display “Enter test percentage of the first student” ~ Display on new line enter testMark ~ Assign values to the names associated with the highest and lowest test scores as these ~ names must also be stored highestName = stName highest = testMark lowestName = stName lowest = testMark ~ Execute a loop. Repeat 9 times (from student 2 to student 10) ~ For each student, compare his or her marks to the current highest ~ and current lowest mark. for st = 2 to 10 ~ Enter every student name and mark. ~ Indicate number of student in message display “Enter the name of student no ”, st ~ Display on new line enter stName display “Enter test percentage of student no ”, st ~ Display on new line enter testMark ~ Compare to highest and lowest mark. If necessary, place new ~ name and mark in variables that keep track of highest and lowest scores if testMark > highest then highest = testMark ~ Assign higher value to highest highestName = stName ~ Remember to store name else if testMark < lowest then lowest = testMark ~ Assign lower value to lowest lowestName = stName ~ Store name as well endif endif next st ~ The results can only be displayed after all the names and their test ~ marks have been entered and compared. The final answers are only ~ ready to be displayed now. Display on a clear screen. display “The name of the student who obtained the highest mark is ”, highestName ~ Display on new line display “The highest mark obtained is ”, highest ~ Display on new line display “The name of the student who obtained the lowest mark is ”, lowestName ~ Display on new line display “The lowest mark obtained is ”, lowest ~ Display on new line end Test the logic using this test data. Ed 3 BPP 4th pgs.indb 123 2012/11/26 2:45 PM 124 • BASIC PROGRAMMING PRINCIPLES Name: Danny Bill Don Dave Sonny Edith Bob Robbie Cassandra Julie Test percentage: 50 67 92 28 62 54 34 43 64 78 Output: The name of the student who obtained the highest mark is Don The highest mark obtained is 92 The name of the student who obtained the lowest mark is Dave The lowest mark obtained is 28 Example 8 In this program we’re going to do division by subtracting values using a fornext loop. The user is asked to enter an integer total number that is greater than 400. The result will be calculated by dividing the total number by 5 without using division. The answer must be an integer and the remainder, if any, must be discarded. Planning Description Type Variable name Input Total number Integer totNumber Output Result Integer result Table 7: Input and output variables for Example 8 Ed 3 BPP 4th pgs.indb 124 2012/11/26 2:45 PM ITERATION USING A FIXED COUNT LOOP Input Processing Output totNumber Prompt for totNumber result • 125 Enter totNumber Subtract 5 from totNumber until finished Display result Table 8: IPO chart for Example 8 Algorithm DivisionProgram ~ Divide by using subtraction ~ Initialise the result result = 0 display “Enter the total number to be divided by 5” ~ Display on new line enter totNumber if totNumber is Numeric then if totNumber > 400 then ~ Repeat subtracting until totNumber < 5 for y = totNumber to 0 step –5 ~ 5 is subtracted in the step of the Do-until loop control statement result = result + 1 if totNumber < 5 then y=0 ~ Too small for another subtraction endif next y display “The number can be divided by five ”, result, “ times” else display “The number must be greater than 400” endif else display “The number entered must be an integer” endif end Test the logic using 543 and then 3, followed by x as the total number. Output: The number can be divided by five 108 times The number must be greater than 400 The number entered must be an integer Ed 3 BPP 4th pgs.indb 125 2012/11/26 2:45 PM 126 • BASIC PROGRAMMING PRINCIPLES Exercises Do the planning and write algorithms to solve the following problems: 1. The user wants to display a message a fixed number of times. Ask the user to enter the message and the number of times it must be displayed. Display the message the required number of times. 2. The price of an item was R100 in 2007. If the rate of inflation is 6.5% per annum, calculate and print each year since 2007 with the price of the item in that year, up to and including 2020. 3. Jenny goes shopping and buys five different items. She is asked to enter the prices of each item within a loop and to calculate the amount due. Add 14% VAT to the total that must be displayed. 4. The distribution manager of a newspaper uses 25 youths to help her deliver the newspapers early in the morning. She has to know the average number of newspapers delivered by one youth, as well as how many youths deliver more than the average, how many deliver less than the average and how many deliver the average number. Use a for-next loop to enter the number delivered by each youth. Display the average, the number exceeding the average, the number less than the average and the number equal to the average. Hint: Calculate the average using one fornext loop, then use another for-next loop to determine the totals. 5. The Direct Postal Service sends parcels to customers all over the world. Customers frequently request that items to be packed in separate parcels. Each parcel is marked with the name of the customer, the weight of the parcel and the sequence number of the parcel. For example, if five parcels are sent to the same customer, the second parcel will be numbered 2 of 5. The user is asked to enter the name of the customer and the number of parcels (maximum 20 parcels). This number is used to control the fornext loop. The weight of every parcel (real number) must also be entered before the details for every parcel are displayed, as follows: Name of customer Weight of parcel in kg Parcel x of y Plan for only one customer. 6. A company that sells vacuum cleaners uses representatives to sell their stock. Each representative is given a goal by the company. If the representative sells more vacuum cleaners than the goal, he or she receives R56.20 as a bonus per additional vacuum cleaner sold. If the representative has not met the goal, he or she has to pay R15.75 for every vacuum cleaner sold less than the goal. Enter the name, goal and number of vacuum cleaners sold, then calculate the bonus or the amount that must be paid to the company. Display the name and amount for each representative. Repeat this procedure for 50 representatives. Ed 3 BPP 4th pgs.indb 126 2012/11/26 2:45 PM ITERATION USING A FIXED COUNT LOOP • 127 7. There are 30 students in the Programming 1 class. The age of every student is entered in years and months. Convert the age into months to calculate the average age. Display the answer (average age) in years and months on screen. 8. The user must enter a positive integer less than or equal to 15. If this number is valid, the user must also enter a choice of 1, 2 or 3, which must result in the following output: 1: Display the first 5 multiples of the number entered and the sum of these multiples 2: Display all consecutive positive numbers up to this number 3: Display the factorial of this number Display an appropriate error message only if the choice or the positive integer number is incorrect. Use a select case structure to handle the choices. Examples Assume a 5 has been entered as a positive integer number. The output may be one of the following, depending on the choice made. Choice 1: 5 10 15 20 25 Sum = 75 Choice 2: 1 2 3 4 5 Choice 3: Factorial of 5 = 120 Note The factorial is the product of all consecutive positive numbers up to this number: 1 x 2 x 3 x 4 x 5 = 120 9. Write the algorithms to solve the following problems: 9.1 Calculate and display the sum of the first 20 elements in the following series: 1; 2; 4; 7; 11; … 9.2 Display the value of the 30th element in the following series on screen: 2400; 2398; 2394; 2388; 2380; ... Ed 3 BPP 4th pgs.indb 127 2012/11/26 2:45 PM 128 • BASIC PROGRAMMING PRINCIPLES 10. In each case, predict the output of the given algorithm: 10.1 CalculateValue x=4 y=7 answer = 0 for w = 0 to 4 answer = x + y x=x+1 y=y–2 next w display “The value of answer is ”, answer end 10.2 WillThisOneProvideAnAnswer a=5 b = 25 for k = 5 to 3 step 2 a=a+b*2 next k display “The value of a is ”, a end 2 Nested For statements In many situations, it is necessary to use a loop contained within another loop. Example 9 for i = 1 to 2 for j = 1 to 3 next j next i ~ Outer loop ~ Inner loop statement(s) ~ End of inner loop ~ End of outer loop A structure like these loops is called a nested loop. When the nested loops in the example are executed, the values of the counters i and j will vary when executed, as follows: Ed 3 BPP 4th pgs.indb 128 2012/11/26 2:45 PM ITERATION USING A FIXED COUNT LOOP i 1 1 1 2 2 2 • 129 j 1 2 3 1 2 3 If we apply these loops to students writing tests, there would be two students (outer loop) who wrote three tests each (inner loop). This idea will be further illustrated in the next example. It is clear that the inner loop will move through all the counts before the index in the outer loop increments the counter – and then the inner loop starts again from the beginning. Example 10 Four students in a class wrote three tests each. The average of the three tests will provide the final mark for the student. Display the final mark for each student as well as the class average on the screen. Planning Description Type Variable name Input Test marks Integer tstMark Intermediate Total sum Integer totSum Sum Integer sum Final mark Integer finMark Class average Integer average Output Table 9: Input and output variables for Example 10 Input Processing Output tstMark Prompt for input finMark Enter tstMark average Calculate finMark Display finMark Calculate average Display average Table 10: IPO chart for Example 10 Ed 3 BPP 4th pgs.indb 129 2012/11/26 2:45 PM 130 • BASIC PROGRAMMING PRINCIPLES Algorithm CalcResults ~ Produce results of students totSum = 0 for x = 1 to 4 sum = 0 for y = 1 to 3 display “Provide test mark ”, y, “ for student ”, x enter tstMark sum = sum + tstMark next y ~ Calculate final mark for student finMark = sum / 3 display “The final mark for student ”, x, “ is ”, finMark totSum = totSum + finMark next x ~ Calculate and display average average = totSum / 4 display “The average for all the students is ”, average end ~ Loop for 4 students ~ Loop for 3 tests ~ End of test loop ~ Add to total sum ~ End of student loop You can test the logic with this test data: Tests 1 2 3 1 2 3 4 45 63 23 41 50 68 34 61 55 71 31 59 Students Draw a trace table to determine whether the logic yields the correct result. Exercises 1. Do the planning and then code an algorithm to solve this problem. Use nested for-next loops to draw the following figure: 1 12 123 1234 12345 123456 1234567 12345678 123456789 Ed 3 BPP 4th pgs.indb 130 2012/11/26 2:45 PM ITERATION USING A FIXED COUNT LOOP • 131 You may display only one digit per statement and may not repeat any of the statements – it must be coded effectively! Hint: The maximum for the counter in the inner for-next loop must be the same as the current counter in the outer for-next loop. 2. In each case, predict the output of the pseudocode. 2.1 CalcOutput a=0 b = 20 for w = 1 to 5 step 2 for y = 1 to w answer = a + b – y a=a+2 b=b–4 next y display “a = ”, a, “ b = ”, b next w display “The answer is: ”, answer end ~ Display on a new line ~ Display on a new line 2.2 CalculateWithNestedLoop for x = 4 to 0 step – 2 for y = x to 7 step 2 result = x – y next y display “The value of x is ”, x next x display “The value of result is ”, result end ~ Display on a new line ~ Display on a new line 2.3 ShowResults for x = 1 to 5 step 2 display “x = ”, x for w = x to 1 step -1 z=x+w if w > 2 then display w endif next w display “z = ”, z next x display “*****” end Ed 3 BPP 4th pgs.indb 131 ~ Display on a new line ~ Display on a new line ~ Display on a new line ~ Display on a new line 2012/11/26 2:45 PM 132 • BASIC PROGRAMMING PRINCIPLES 2.4 TryMe d=2 x=1 for k = 6 to 1 step -2 for m = k to 8 step 3 s=m+k-d d=s\2 next m display “line: ” , x display “ d = ”, d x=x+1 next k end ~ Display on a new line ~ Display on the same line 3. Do the planning and write an algorithm to solve the following problem. There are seven libraries, numbered 1 to 7, in the city of Grandioso. Each library has eight sections of books. Input the number of books for each section in one library and accumulate the total number of books in the library. Hint: Use a nested for loop. Display the number of the library with the most books and the number of the library with the least books. Ed 3 BPP 4th pgs.indb 132 2012/11/26 2:45 PM 133 Chapter 7 Iteration using the Do loop Introduction In the previous chapter, we discussed the for-next loop, where the number of times some statements had to be repeated was known. However, the exact number of times that a loop must repeat is often not known. Therefore it will be necessary to study other types of loop structures as well. Outcomes When you have studied this chapter, you should be able to: • understand the difference between a pre-test and a post-test loop, • write a do-while loop in pseudocode, • write a do-loop-until statement in pseudocode, • describe a sentinel and use it to terminate a do loop, • write algorithms containing • do-while loops, • do-loop-until statements, and • combinations of all structures learnt to date, such as if statements within a loop. 1 The Do loop To illustrate the concept of a loop that has an unknown number of repetitions, or iterations, imagine a long queue of people waiting to buy tickets for a football match. If there are ten people in the queue, we might say that the loop will be repeated ten times, however, more people might join the queue so it isn’t clear how many tickets will be sold. Ed 3 BPP 4th pgs.indb 133 2012/11/26 2:45 PM 134 • BASIC PROGRAMMING PRINCIPLES Certain conditions may stop this process, for example: • All the available tickets have been sold. • The box office closed at 17:00. • All the people in the queue have already bought their tickets. • The box office never opened. If all these conditions were included in a solution, it is clear that we really have no idea when the repetition must stop. We need a statement to test these conditions, otherwise the loop will run forever (endless loop). There are two types of do loop. When planning a solution that contains a number of statements to be repeated several times, the programmer has to decide which type of loop must be used. 1.1 Pre-test loop (Do-while statement) The first type is called a pre-test loop where the condition is tested before the statements within the loop are processed. Looking at the box office selling football tickets, we see that various conditions may occur: there might not be a queue because no-one wants to buy tickets, all the tickets might have been sold out yesterday or the person who sells the tickets hasn’t opened the box office. In this case, no tickets will be sold. Here’s an example of this type of loop, in which the closing time of the box office is tested. do while time <= 1700 statement 1 statement 2 : statement n loop ~ Statement to control the loop The statements in the body of the do-while loop will be processed while the condition is true. As soon as it becomes false, the statement after the end of the loop will be processed. However, if the condition is false the first time it’s tested, the statements in the loop might not be executed at all. The condition could also be a compound test. It could happen that all the tickets are sold out before 17:00. The condition in the code could then be changed, as follows: do while time <= 1700 and noTickets > 0 Ed 3 BPP 4th pgs.indb 134 2012/11/26 2:45 PM I TERATION USING THE DO LOOP • 135 1.2 Post-test loop (Do-loop-until statement) The other type of do loop is called a post-test loop. The statements in the body of the loop are processed at least once, and the condition is tested only after the statements in the body of the loop have been processed. Consider a situation in which 100 tickets are available but there are 150 people waiting to buy tickets. So tickets can be sold only until all the tickets have been sold and no more tickets are available. Here’s an example of this type of loop, in which the number of tickets is tested. do statement 1 statement 2 : statement n loop until noTickets = 0 ~ Statement to control the loop The statements in the do-until loop will be processed repeatedly until the condition at the end of the loop becomes true. Processing will then proceed to the statement after the do loop structure. 1.3 Terminating execution of a loop There must be a statement in the body of a loop – in both pre-test and post-test loops – that enables the outcome of the condition tested in the loop control statement to change. If this statement is absent, the loop will never end. Using our ticket sales example, the statement in bold type could cause the loop to terminate. noTickets = 100 do display “Enter number of tickets to buy” enter ticketsToBuy if ticketsToBuy <= noTickets then noTickets = noTickets – ticketsToBuy else display “Sorry, only ”, noTickets, “ ticket(s) still available” endif loop until noTickets = 0 Another method of terminating a loop is to use a sentinel. Suppose sales must be entered repeatedly to determine the highest sales. The programmer may decide to enter a sales amount of -1 to end the loop. Any suitable value could have been chosen to indicate the end of the processing, as long as the value is not a valid input to the program. This value is called a sentinel. Ed 3 BPP 4th pgs.indb 135 2012/11/26 2:45 PM 136 • BASIC PROGRAMMING PRINCIPLES For a pre-test loop, it is important to note that the variable that controls the loop (in the next case the variable called salesAmount) must receive an initial value before the loop is entered for the first time. The next value for this variable must be entered at the end of the body of the loop, just before the next execution of the loop. display “Enter a sales amount or -1 to stop” enter salesAmount do while salesAmount <> -1 statement 1 statement 2 : statement n display “Enter the next sales amount or -1 to stop” enter salesAmount loop 1.4 Examples of Do-while loops As discussed before, this type of loop tests a condition before processing the statements in the loop. So it’s possible that the body of a do-while loop might never execute. Example 1 This example calculates the sum of all the consecutive integers starting at 24 while the sum is less than 23456. It then displays how many integers have been added to the sum. CalcSum ~ Accumulate a counter of integers added to a sum ⎫ ⎪ sum = 0 ~ Initialise sum ⎬ ⎪ number = 24 ⎠count = 0 ~ Initialise the counter do while sum < 23456 sum = sum + number number = number + 1 count = count + 1 loop display “The number of integers added is ”, count end ~ See Comment 1 ~ Accumulate the sum ~ Proceed to the next consecutive no ~ Increment count ~ See Comment 2 Once again, to yield the correct results, it is important to understand which statements must be done before processing the loop, which statements must be inside the loop and which statements must be placed after the loop. Ed 3 BPP 4th pgs.indb 136 2012/11/26 2:45 PM I TERATION USING THE DO LOOP • 137 Comment 1 These statements prepare the variables before entering the loop. They initialise the variables with the correct starting values. In the do-while control statement, the sum is tested to check that it is less than 23456. In the body of the do-while loop, the statement sum = sum + number will increase sum. Because number is a positive integer, sum will increase until it eventually reaches 23456 or more. At this stage the do-while loop will terminate. The count is also incremented to indicate that the body of the loop was processed once more. Comment 2 It is only possible to print a final count when the condition in the do-while control statement is no longer met. Example 2 Now we’re going to do all the planning for the following problem. The fishing society holds a competition to find out who the best fisherman is. The competition is won by the person who caught the most fish within a specified time. For every fisherman, the name of the person and the number of fish caught are entered. After all the data is entered, a number of fish equal to -1 (sentinel) is entered. The name of the winner and the number of fish the winner caught are displayed on screen. For the sake of this problem, we’ll assume that none of the fishermen caught the same number of fish. Planning Input Output Description Name of fisherman Number of fish caught Most fish Name of winner Type Variable name String fmName Integer noFish Integer winnerNumber String winner Table 1: Input and output variables for Example 2 Ed 3 BPP 4th pgs.indb 137 2012/11/26 2:45 PM 138 • BASIC PROGRAMMING PRINCIPLES Input Processing Output fmName Prompt for input values Enter fmName and noFish Determine winner Display winner, winnerNumber winner noFish winnerNumber Table 2: IPO chart for Example 2 Algorithm Before we start writing the algorithm we have to plan the loop. The control statement in the do-while loop has a condition, and when we read the problem statement closely, it is clear that the number of fish is tested in this condition. Once the loop is entered, the condition must already contain a value to be tested. It’s clear that the number of fish caught by the first person must be entered before the loop. But there is no need to enter the name of the fisherman before the loop is entered. This implies that the number of fish caught by the next person must be entered at the end of the body of the loop to be tested when returning to the do-while loop control statement. FindFishermanWinner ~ Determine who caught the most fish (Example of pre-test do-loop) winnerNumber = 0 ~ Choose low number ~ for winner winner = “ ” display “Provide the number of fish caught by the first fisherman” ~ On a new line display “Enter -1 to indicate no more input” ~ On a new line enter noFish do while noFish <> -1 ~ Test if loop must ~ continue display “Provide name of fisherman” enter fmName if noFish is numeric then if noFish > winnerNumber then winnerNumber = noFish winner = fmName endif else display “The number of fish caught must be numeric” endif display “Provide the number of fish caught by the next fisherman” ~ On a new line display “Enter -1 to indicate no more input” ~ On a new line enter noFish loop display “The name of the winner is ”, winner ~ On a new line display winner, “ caught ”, winnerNumber, “ fish” ~ On a new line display “Congratulations ”, winner, “!!!” ~ On a new line end Ed 3 BPP 4th pgs.indb 138 2012/11/26 2:45 PM I TERATION USING THE DO LOOP • 139 This test data would cover all possible conditions. Name: Sam Johnny Kevin Fred Bill Ted Paul Number of fish: 8 2 7 10 5 12 9 Output: Provide the number of fish caught by the first fisherman Enter -1 to indicate no more input 8 Provide name of fisherman Sam Provide the number of fish caught by the next fisherman Enter -1 to indicate no more input 2 Provide name of fisherman Johnny : : Provide the number of fish caught by the next fisherman Enter -1 to indicate no more input 9 Provide name of fisherman Paul Provide the number of fish caught by the next fisherman Enter -1 to indicate no more input -1 The name of the winner is Ted Ted caught 12 fish Congratulations Ted!!! Example 3 Alexis went shopping and bought a number of different items. We need to enter the amount of money in her purse and the price of each item to calculate the total amount. After all the prices are entered, a price of 0 (zero) is entered as a sentinel to indicate that she has finished selecting items to buy. If the total amount she spent is more than R100 she’ll receive a discount of 3.5%. If the money in her purse is enough to pay for her shopping, we need to calculate and display how much money she will have left in her purse after she’s received her change, if any. If she doesn’t have enough money to pay for all the items, a message is displayed indicating how much more money she needs to pay for her shopping. Ed 3 BPP 4th pgs.indb 139 2012/11/26 2:45 PM 140 • BASIC PROGRAMMING PRINCIPLES Planning Input Intermediate Output Description Type Variable name Price of item Real price Money in purse Real purseMoney Total amount Money left in purse Money still needed Real total Real change Real shortMoney Table 3: Input and output variables for Example 3 Input Processing Output price Prompt for input values Enter price and purseMoney Calculate totAmount change purseMoney shortMoney Test purseMoney Calculate change or shortMoney Display results Table 4: IPO chart for Example 3 Ed 3 BPP 4th pgs.indb 140 2012/11/26 2:45 PM I TERATION USING THE DO LOOP • 141 Algorithm AlexisShopping ~ Example of pre-test do loop total = 0 ~ Enter money in her purse once display “Enter the amount of money in Alexis’ purse” enter purseMoney if purseMoney is numeric then ~ If money in purse is valid, enter prices for items to buy in a loop display “Enter the price of the first item” enter price do while price <> 0 if price is numeric then total = total + price else display “The price must be numeric” endif display “Enter the price of the next item, enter 0 to stop” enter price loop ~ The total amount has now been calculated; determine discount, if any if total > 100 then total = total – total * 0.035 ~ total = total * 0.965 is equivalent to the statement above endif ~ Display output if purseMoney >= total then change = purseMoney – total display “Alexis has enough money, she now has R”, change, “ in her purse” else shortMoney = total – purseMoney display “Alexis needs R”, shortMoney, “ more to pay for her purchases” endif else display “The money in her purse must be a numeric amount” endif end These two sets of data could be used as test data: Data set 1 The amount in her purse is R709.55 Item 1 R150.50 Item 2 R285.70 Item 3 R397.42 Desk checking: The total amount she spent is R833.62 This amount is more than R100, so she receives 3.5% discount The amount now due is R833.62 – R29.18 = R804.44 She needs R804.44 – R709.55 = R94.89 Ed 3 BPP 4th pgs.indb 141 2012/11/26 2:45 PM 142 • BASIC PROGRAMMING PRINCIPLES Data set 2 The amount in her purse is R75.00 Item 1 R3.00 Item 2 R25.50 Item 3 R21.60 Item 4 R7.80 Desk checking: The total amount she spent is R57.90 This amount is not more than R100, so she doesn’t get a discount The amount in her purse is now R75.00 – R57.90 = R17.10 Output: Alexis needs R94.89 more to pay for her purchases Alexis has enough money, she now has R17.10 change in her purse 1.5 Examples of Do-until loops We discussed do-until loops when we covered post-test loops in section 1.2, explaining that they are used to test a condition at the end of the loop. Example 4 Angel has offered to pick strawberries for her mother, who wants to make jam. She needs between 4.5 and 5.5 kilograms of strawberries for the jam. Angel, who is only a little girl, can pick and carry between 400 and 900 grams of strawberries at a time, which she puts into her mother’s container on the scale. The user is asked to enter the weight of the strawberries in grams each time Angel brings strawberries. The program must calculate and display how many times she has to go to the garden to pick strawberries before her mother has enough for jam. The program must also display the total weight of the strawberries picked. Planning Description Type Variable name Input Weight in grams Real weight Output Number of times Real noTimes Total weight in kg Real totWeight Table 5: Input and output variables for Example 4 Ed 3 BPP 4th pgs.indb 142 2012/11/26 2:45 PM I TERATION USING THE DO LOOP Input Processing Output weight Prompt for weight noTimes Enter weight totWeight • 143 Count noTimes Accumulate totWeight Display noTimes, totWeight Table 6: IPO chart for Example 4 Algorithm CalculateNumberTimes ~ Calculate number of times Angel picked strawberries noTimes = 0 totWeight = 0 do display “Enter the weight of the strawberries in grams Angel picked” ~ On a new line enter weight if weight is numeric then totWeight = totWeight + weight / 1000 ~ Convert to kilograms and add to total weight noTimes = noTimes + 1 ~ Accumulate count else display weight, “ is not a valid input value, please re-enter” endif loop until totWeight >= 4.5 ~ Number of times has been calculated display “The number of times Angel picked strawberries is ”, noTimes ~ On a new line display “She picked a total of ”, totWeight, “ kg of strawberries” ~ On a new line end Note that in a post-test loop, the statement to assign an initial value to the variable that controls the loop can be done as the first statement in the loop because the value will only be tested at the end of the loop. It can then serve as the consecutive input statements as well, so no additional statements are needed for this purpose at the end of the body of the loop, as was the case with the pre-test loop. It is not necessary to test for weight less than 5.5 kg in the loop statement because as soon as the weight is more than 4.5 kg it will not exceed 5.5 kg. Ed 3 BPP 4th pgs.indb 143 2012/11/26 2:45 PM 144 • BASIC PROGRAMMING PRINCIPLES Test data Possible input values with respective output results: Enter the weight of the strawberries in grams Angel picked 500 Enter the weight of the strawberries in grams Angel picked 88O 88O is not a valid input value, please re-enter Enter the weight of the strawberries in grams Angel picked 880 Enter the weight of the strawberries in grams Angel picked 720 Enter the weight of the strawberries in grams Angel picked 450 Enter the weight of the strawberries in grams Angel picked 570 Enter the weight of the strawberries in grams Angel picked 770 Enter the weight of the strawberries in grams Angel picked 360 Enter the weight of the strawberries in grams Angel picked 320 The number of times Angel picked strawberries is 8 She picked a total of 4.570 kg of strawberries 2. Examples of flowcharts for pre-test and posttest loops The two flowcharts shown here set out the logic for entering the marks of 10 students, then calculating and displaying the average of their marks. The first flowchart shows this being done with a pre-test loop (do-while) and the second shows a post-test loop (do-until). In both cases, the marks for all students are entered and accumulated in the loop and the average is calculated and displayed at the end of the loop. Ed 3 BPP 4th pgs.indb 144 2012/11/26 2:45 PM I TERATION USING THE DO LOOP • 145 Figure 1: Flowchart representing a Do-while loop The loop in Figure 1 is clearly a pre-test loop because the condition is tested in the beginning and the statements in the body of the loop will be executed only while the condition is true. If the condition is not true the first time, the loop will not execute at all. Ed 3 BPP 4th pgs.indb 145 2012/11/26 2:45 PM 146 • BASIC PROGRAMMING PRINCIPLES Figure 2: Flowchart representing a Do-until loop The loop in Figure 2 is clearly a post-test loop because the condition is tested at the end of the statements in the body of the loop, so the loop will always execute at least once. Because this loop will execute until the condition is true, the condition will be the opposite of the condition in the do-while example in Figure 1. Ed 3 BPP 4th pgs.indb 146 2012/11/26 2:45 PM I TERATION USING THE DO LOOP • 147 Exercises 1. Write an algorithm to calculate and display the sum of the first n numbers of the following series: (Enter a value for n.) 1.1 1, 1, 2, 3, 5, 8, 13, 21, … 1.2 1, 2, 4, 7, 11, 16, … 2. Determine the output of the following algorithms. 2.1 ShowResults2-1 result = 0 count = 0 number = 20 do result = result + number count = count + 1 number = number – 4 loop until number < 3 display “result = ”, result, “ count = ”, count end 2.2 ShowResults2-2 a=5 b=7 answer = 15 do while answer <= 47 answer = answer + a – b a=a+6 b=b–1 loop display “answer: ”, answer end 2.3 ShowResults2-3 for x = 1 to 5 step 2 display “x = ”, x w = 0 do while w < 10 w = w + x * 3 z = x + w if w > 12 then display w endif loop display “z = ”, z next x display “*****” end Ed 3 BPP 4th pgs.indb 147 ~ Display on a new line ~ Display on a new line ~ Display on a new line ~ Display on a new line 2012/11/26 2:45 PM 148 • BASIC PROGRAMMING PRINCIPLES 2.4 ShowResults2-4 w=1 do while w <> 4 k=4 w=w+1 for b = 1 to 2 step 0.5 k = k * 2 + b - w next b display k loop display “k = ”, k, “ w = ”, w end ~ Display on a new line ~ Display on a new line 2.5 ShowResults2-5 x=5 y=7 display “Begin” for a = 1 to 12 step 5 display “a = ”, a do z=a*x+y y=y–1 x=x+1 loop until y < 7 display “y = ”, y next a display “x = ”, x display “a = ”, a display “z = ”, z display “End” end ~ Display on a new line ~ Display on a new line ~ Display on a new line ~ Display on a new line ~ Display on a new line ~ Display on a new line ~ Display on a new line 3. Study the following algorithms, then predict how many times the message “this is output” will be displayed on screen. 3.1 ShowOutput a=0 do while a < 7 display “this is output” a=a+1 loop end Ed 3 BPP 4th pgs.indb 148 ~ Display on a new line 2012/11/26 2:45 PM I TERATION USING THE DO LOOP • 149 3.2 AnotherOutputProgram x=2 y=3 do x=x+1 do while y <= 5 display “this is output” y=y+2 loop display “this is output” loop until x = 6 display “this is output” end ~ Display on a new line ~ Display on a new line ~ Display on a new line 4. Do the planning and write an algorithm for the following questions. Each problem contains a do loop. When planning your algorithm, decide which type of loop will be best suited to solving the particular problem (pre-test or post-test). If the problem contains decisions to be made, decide whether you’ll use an if statement or a select case statement. You can assume that all the input data for the following questions will be valid. 4.1 A programmer is asked to do an invoice of a telephone account for a subscriber. The input to this program is the telephone number dialed and the length of the call in minutes (integer). The fees are 50 cents for the first minute and 30 cents for every minute thereafter. The telephone number and cost of the call must be displayed for every call. The total amount due by the subscriber must be shown at the end of the invoice. A telephone number of 9999 serves as a sentinel. 4.2 The salesmen working at the Tall Man Company earn a basic salary of R1 850 per month. They also earn commission on their sales. On a sales amount of less than R8 500 they receive 5.5% commission, but if they sell more, the commission is 9%. Each employee pays 1.5% of his commission to his manager. Calculate and display the net income for every salesperson. The input is the name of the sales person and the sales amount. The program terminates when no sales person name is entered. 4.3 Angela went to buy groceries but left her purse at home. Luckily she found R120 in her coat pocket and decided to buy only the necessary items. She picked a number of items and presented them at the till in order of necessity. The lady at the till scanned the barcode containing the price, which was added to the amount due. Determine and display how many items Angela could buy. Ed 3 BPP 4th pgs.indb 149 2012/11/26 2:45 PM 150 • BASIC PROGRAMMING PRINCIPLES 4.4 The All Stars Company decided to increase the salaries of all their employees. Enter the employee number, department code and current annual salary. The increase in salary depends on the employee’s department code, as can be seen in the following table: 4.5 4.6 4.7 4.8 Ed 3 BPP 4th pgs.indb 150 Department code Percentage increase AY 6% HT 6.3% KL 6.9% Other departments 5.8% Display the employee number and new annual salary of each employee. At the end of the program, display the total amount for annual increases as well as the average increase amount per employee. A ball is dropped from a specific height to be provided in metres. This is a real number with two decimal places, such as 7.85. The ball bounces off the ground to a height of half the original height. This process repeats itself. Calculate how many times it will bounce before the height is less than 5 centimetres. Display this answer on the screen. Pule decided to save money to buy a house. Enter this amount as well as the amount he will be able to save each month. He earns 0.7% interest per month while the amount is less than R80,000 and 0.9% interest per month if the amount is equal to or more than R80,000. The interest is added to the total amount. Calculate how many months he will have to save before he has reached his goal. Display the final amount and the number of months. A number of people joined the Streamline Club during the first week of January and the weight of each member was written on their membership card. During the last week of March everybody was weighed again and their new weights were written on their cards. Enter the name, initial weight and current weight for an unknown number of people. Calculate the weight loss or weight gain and display the results, which are the name and weight loss or weight gain with a suitable message. The program must terminate when no name is entered. The average weight loss or weight gain must then display with a suitable message. Jerry is not sure how much money he has, but he knows he has between R100 and R135 in R1, R2 and R5 coins. The user enters the price of the item Jerry wants to buy, which doesn’t exceed R100. Jerry pays for the item he buys by handing one coin at a time to the salesperson. The value of the coin is entered and is subtracted from the amount still due. Determine how many coins Jerry uses to pay for 2012/11/26 2:45 PM I TERATION USING THE DO LOOP • 151 an item and display this number. Remember that you don’t know how many coins he has or their denominations. There may be an equal number of all the coins, no R1 coins or no R5 coins, and so on. Also calculate and display the amount of change, if any. 4.9 The Walk-In restaurant is very popular among employees in the area because they provide home-cooked meals consisting of meat and vegetables already dished up. They provide different meals for men (code = M) and women (code = L). Children (code = C) pay half the price of a lady’s meal. The prices are as follows: Type of meal Price per meal Men R65.50 Ladies R56.80 The user enters the number of different meals available in the beginning of the program; that is, for men, women and children. Every time someone orders one or more meals, the type of meal and the number is entered. If the meals are available, this number is subtracted from the relevant total and then the amount due is calculated and displayed. If there are no meals of that specific type available, a suitable message is displayed. If fewer meals than the customer orders are available, a new transaction is started. When there are no meals left of any type, the algorithm terminates. You can assume that all the meals will be bought. If you want to change the program so that not all the meals are sold, you can use another condition to terminate the program. In this case, you can also display how many meals, and of what type, are not sold. 4.10 A florist wants to send coupons to her 420 regular customers, based on the number of orders each customer placed during the past year, as follows: Number of orders Amount on coupon 2–6 The number of orders times R10 7 – 15 The number of orders times R11.50 16 – 30 The number of orders times R14 31 or more The number of orders times R17 The user is asked to enter the name of the customer and the number of orders placed. Determine the value of the customer’s coupon and then display a message on the screen, similar to the following: Thank you Carol! You receive a coupon worth R50 to collect lovely flowers! Ed 3 BPP 4th pgs.indb 151 2012/11/26 2:45 PM 152 • BASIC PROGRAMMING PRINCIPLES 4.11 The learners at the Clever School pay school fees according to their grade. The name and the grade of the learner must be entered. The learners in Grade 1 pay R14 for the months February to November (excluding July). The fee increases by R4.50 for every subsequent grade – R18.50 for Grade 2, R23.00 for Grade 3, and so on. Calculate and display the name and annual school fee for each learner at the Clever School. At the end, the average annual school fee must be displayed. ABCD is entered as a name once the details of all the school’s learners have been entered. 4.12 The manager of the Nutcracker Hotel needs a program to print invoices for the guests who stay at his hotel. The input to this program is the name of the guest, the number of nights he or she spent in the hotel and the number of breakfasts they had. The number of nights and the number of breakfasts need not be the same. A guest receives one free night and one free breakfast for every night spent in the hotel. You can assume that the number of free breakfasts will never exceed the number of the input breakfasts. The price of a night is R340 and a breakfast costs R65. The invoice must contain the name of the guest, the number of nights stayed, the number of breakfasts, the number of free nights and the final amount due. At the end of the program, the total amount paid by all the guests must be displayed. Choose your own sentinel. 4.13 People who want to hire a machine to wash their carpets usually go to the WishyWashy Company where they can hire any one of three types of machines – type A, B or C for heavy duty, ordinary and light washes respectively. The prices are as follows: Type of machine Initial cost A R50.00 Additional cost per hour or part thereof R30.00 B R62.50 R36.25 C R74.87 R40.50 The input is the name of the client, the code to indicate the type of machine, and the time the machine was used (in minutes). The amount must be calculated by adding the initial cost to the calculated cost for the time used. VAT of 14% must be added to the amount to present the final amount due by the client. At the end of the program, a total amount, total VAT amount and the final total amount due to WishyWashy must be displayed. Choose your own sentinel. Ed 3 BPP 4th pgs.indb 152 2012/11/26 2:45 PM 153 Chapter 8 Arrays Introduction Quite often, a programmer has to use a number of related variables that are of the same data type and are all used for a specific purpose in a program, for example the names of the 12 months. These variables can be grouped together in an array using a single name, to improve the code and make it shorter and more efficient. Outcomes When you have studied this chapter, you should be able to: • understand what an array is, • initialise a one-dimensional array, • store data in a one-dimensional array, • manipulate a one-dimensional array, for instance • display elements in the array, • find the highest and lowest entries in an array, • search an array to find a specific element, • access an element in the array, • compute the total and average of all the elements in an array, • understand and use parallel arrays, • understand and manipulate two-dimensional arrays, • sort an array using the bubble sort method, and • sort an array using the selection sort method. Ed 3 BPP 4th pgs.indb 153 2012/11/26 2:45 PM 154 • BASIC PROGRAMMING PRINCIPLES 1 Properties of arrays An array consists of a number of related variables, and has the following properties: • It has a single name. • A single variable in an array is called an element. • All the elements in an array are the same data type. • The position of an element in an array is called an index or a subscript. • A one-dimensional array can be seen as one column with many rows – one for each element in the array. Array name The name of an array must be descriptive. Examples: • monthArray – contains the names of the 12 months in a year • price – contains the prices of 100 items in a shop • quantityInStock – contains the quantities in stock of 120 items Element One element in an array is a single variable that contains a value at a given time. Examples: • one name of a month in monthArray, such as September • 25.57, which is the price of an item in the array called price • 25, which represents the quantity in stock of a specific item in an array called quantityInStock An element in an array need not have an initial value. Data type All the elements in an array must be of the same data type, such as String or Integer. Examples: • monthArray will be of data type String • price may be of data type Real • quantityInStock will be of data type Integer Index The index indicates the position of an element in the array. The index is sometimes referred to as a subscript. The value of an index must always be a positive integer or zero. The index of the first element of an array is always 0 (zero) and the index of the last element of the array is (number of elements – 1). For example, the indexes of an array called mathScores, which contains 30 elements, would start at 0 so the last index would be 29. The monthArray array can be visualised as a column with 12 row elements. Ed 3 BPP 4th pgs.indb 154 2012/11/26 2:45 PM ARRAYS monthArray (0) January monthArray (1) February monthArray (2) March monthArray (3) April monthArray (4) May monthArray (5) June monthArray (6) July monthArray (7) August monthArray (8) September monthArray (9) October monthArray (10) November monthArray (11) December • 155 Table 1: monthArray as a column Referencing To refer to a specific element in an array, the name of the array as well the index of the element is used. For instance, monthArray(0) refers to the string value “January” and monthArray (11) refers to the string value “December”. Question Let’s see if you understand the previous concepts by applying them to a similar example. The names of the days in a week can be stored in an array. Each element is called day and an index is used to retrieve the individual values from the array. Fill in the missing indexes and references in these tables. Element reference Value Monday Tuesday Wednesday Thursday Friday Saturday Sunday How do you retrieve the third element in the array? Would it be valid to use day(7) in your code? Would it be valid to use day(no) in your code if no has a value of 0? Ed 3 BPP 4th pgs.indb 155 2012/11/26 2:45 PM 156 • BASIC PROGRAMMING PRINCIPLES 1.1 Advantages of using a one-dimensional array A one-dimensional array is the simplest form of array, consisting of one column of elements as illustrated in the examples in the previous section. We will now start off by explaining why arrays provide a way to improve code to make it shorter and more efficient. Let’s assume that a student has written 10 tests in one subject. The final mark must be calculated as the average of these 10 test marks. If we only had simple variables – also called scalar variables – we would have to have 10 individual variables to store the 10 test marks. Values for these 10 variables would have to be entered 10 times when using them to calculate the final mark for the student. This is what the algorithm would look like: CalculateFinalMark display “Please provide the percentage for test 1” enter T1 display “Please provide the percentage for test 2” enter T2 display “Please provide the percentage for test 3” enter T3 display “Please provide the percentage for test 4” enter T4 display “Please provide the percentage for test 5” enter T5 display “Please provide the percentage for test 6” enter T6 display “Please provide the percentage for test 7” enter T7 display “Please provide the percentage for test 8” enter T8 display “Please provide the percentage for test 9” enter T9 display “Please provide the percentage for test 10” enter T10 finalMark = (T1 + T2 + T3 + T4 + T5 + T6 + T7 + T8 + T9 + T10) / 10 display “The final mark for the student = ”, finalMark, “ %” end From this, it’s clear that this method is not effective at all. The code would be even worse if the student wrote 15 or 20 tests. However, with our knowledge of loops, we could streamline the code. CalculateFinalMark totalMark = 0 for T = 1 to 10 display “Please provide the percentage for test ”, T enter testMark totalMark = totalMark + testMark next T finalMark = totalMark / 10 display “The final mark for the student = ”, finalMark, “ %” end Ed 3 BPP 4th pgs.indb 156 2012/11/26 2:45 PM ARRAYS • 157 It is surely more efficient to enter the next test mark during each execution of the loop, and to accumulate the total for all the tests inside the loop. However, this doesn’t make the individual marks available at a later stage for other references because each time a new mark is entered, the previous value of the variable (the previous mark) is replaced by the new mark. Because the marks are all of the same data type and are related to one another – all the marks are for the same student and all of them will contribute to the calculation of the final mark – they can also be stored in an array. The code to store data in an array is similar to the previous code. However, instead of entering data into one variable, it is entered into an element in the array. In this example, the index of the first element is 0 and the index of the last element is 9 because there are 10 tests to be entered. The array contains 10 elements, each of which represents a different test mark. for T = 0 to 9 display “Please provide the percentage for test ”, T + 1 enter testMark(T) totalMark = totalMark + testMark(T) next T After the data has been stored in the elements of an array, it can be manipulated in the same way as normal scalar variables. When doing calculations, you can use all the elements in the array structure or specify individual elements. You can also change or display the content of an array element. You can find the element with the highest or lowest value in the array, sort the elements in a specific order, calculate the average of all the elements, and much more. The examples that follow demonstrate how elements in an array can be manipulated. Example 1 Problem Continuing with the CalculateFinalMark problem, the 10 test marks for the student must be stored in an array, then the average of the 10 test marks must be calculated to determine the student’s final mark. After the final mark has been calculated, all the marks as well as the final mark must be displayed. Ed 3 BPP 4th pgs.indb 157 2012/11/26 2:45 PM 158 • BASIC PROGRAMMING PRINCIPLES Planning Description Input Intermediate Output 10 test marks entered in an array Total of these marks 10 test marks entered in an array Final mark Type Variable/array name Integer testMark Integer totalMark Integer testMark Real finalMark Table 2: Input and output variables for Example 1 Algorithm CalculateFinalMark totalMark = 0 for T = 0 to 9 display “Please provide the percentage for test ”, T + 1 ~ Display on a new line enter testMark(T) totalMark = totalMark + testMark(T) next T finalMark = totalMark / 10 for T = 0 to 9 display “Test ”, T+ 1, “ = ”, testMark(T), “%” ~ Display on a new line next T display “The final mark for the student = ”, finalMark, “%” ~ Display on a new line end After the algorithm has been executed, the variables can be represented as follows: Ed 3 BPP 4th pgs.indb 158 2012/11/26 2:45 PM ARRAYS testMark(0) 60 testMark(1) 65 testMark(2) 77 testMark(3) 45 testMark(4) 87 testMark(5) 93 testMark(6) 74 testMark(7) 39 testMark(8) 45 testMark(9) 70 totalMark 655 finalMark 65.5 • 159 Table 3: Tabular representation of Example 1 array Example 2 Problem In this example, Example 1 will be rewritten to calculate the final mark as the average of the nine best marks. In this case, the lowest mark must be determined and subtracted from the total before the average is calculated. Algorithm CalculateFinalMark totalMark = 0 for T = 0 to 9 display “Please provide the percentage for test ”, T+ 1 ~ Display on a new line enter testMark(T) totalMark = totalMark + testMark(T) next T lowestMark = testMark(0) for T = 1 to 9 ~ Start with second element if testMark(T) < lowestMark lowestMark = testMark(T) endif next T totalMark = totalMark – lowestMark finalMark = totalMark / 9 for T = 0 to 9 display “Test ”, T+ 1, “ = ”, testMark(T), “%” ~ Display on a new line next T display “The final mark for the student = ”, finalMark, “%” ~ Display on a new line end Ed 3 BPP 4th pgs.indb 159 2012/11/26 2:45 PM 160 • BASIC PROGRAMMING PRINCIPLES All 10 marks will still be stored in the array and will be available for later reference. The total of all the marks is once again accumulated inside the loop. However, the lowest test mark is determined in a second loop. After this loop has been executed, the result (the lowest test mark) is deducted from the total to exclude this mark. The total is then divided by nine to determine the average or final mark. The lowest test mark could also have been determined in the first loop. Output: Test 1 = 60% Test 2 = 65% Test 3 = 77% Test 4 = 45% Test 5 = 87% Test 6 = 93% Test 7 = 74% Test 8 = 39% Test 9 = 45% Test 10 = 70% The final mark for the student = 68.4% Example 3 Problem The identity numbers of the eight employees in a particular company are stored in an array. The manager wants to know if a specific woman is a company employee by entering her identity number. Algorithm FindEmployee boolFound = False display “Enter the identity number of the employee” enter idNo for m = 0 to 7 if empIds(m) = idNo then ~ empIds is an array with 8 elements boolFound = True ~ The person is found! m=7 ~ Exit the loop endif next m if boolFound = True then display “The person whose id number is ”, idNo, “ is an employee” else display “The person whose id number is ”, idNo, “ is not an employee” endif end Ed 3 BPP 4th pgs.indb 160 2012/11/26 2:45 PM ARRAYS • 161 Example 4 An array called evenNumbers, which has 44 elements with consecutive even numbers starting at 14, needs to be filled. Algorithm FillArray ~ This algorithm fills the array with consecutive even numbers starting at 14. ~ Use an array evenNumbers with 44 elements of the type integer number = 14 for i = 0 to 43 evenNumbers(i) = number number = number + 2 next i end We can then modify the example to start at any even number. Algorithm FillArray display “Enter the first even number with which to fill the array” enter firstNumber if firstNumber is numeric then if firstNumber Mod 2 = 0 then ~ Test if it is an even number number = firstNumber for i = 0 to 43 evenNumbers(i) = number number = number + 2 next i else display “The number must be an even number” endif else display “You did not enter a numeric value” endif end Example 5 Problem An array called noInStock already contains the following valid positive integer values in the 20 elements: 4, 15, 38, 53, 8, 95, 129, 653, 45, 658, 12, 40, 0, 98, 74, 32, 9, 39, 25, 87 The index and value of the highest number in noInStock need to be found and displayed. Ed 3 BPP 4th pgs.indb 161 2012/11/26 2:45 PM 162 • BASIC PROGRAMMING PRINCIPLES Algorithm FindHighest ~ Assume the array already contains the valid values ~ Compare all the values in the array to find and display the highest value foundAtIndex = 0 highest = noInStock(0) ~Assign first value to highest for k = 1 to 19 if noInStock(k) > highest then highest = noInStock(k) foundAtIndex = k endif next k ~ After testing the values in all the elements, the highest can now be displayed. display “The highest value in the array noInStock is: ”, highest display “It was found at index position “, foundAtIndex end Output: The highest value in the noInStock array is: 658 It was found at index position 9 Note that the index of the first value used in the loop structure is not that of the first element, because the value of the first element has already been assigned to the variable called highest. Exercises 1. Write an algorithm for the following: An array called numbers contains 35 valid integer numbers. Determine and display how many of these values are greater than the average value of all the values of the elements. Hint: Calculate the average before counting the number of values higher than the average. 2. An array called abcArray has 12 integer elements. Populate the array using the values of the series 1 000; 989; 967; 934; 890; ... Display the values of all the elements. 3. An array that has 20 elements contains character values. Use a Select Case statement to count and display how many of these elements contain vowels. 4. You’re given two arrays. The first has 100 elements containing integer values. The second has 20 elements. Write an algorithm to calculate the sum of the values of the first five elements of the first array and store the answer in the first element of the second array. Store the sum of the next five elements of the first array in the second element of the second array, and so on. Ed 3 BPP 4th pgs.indb 162 2012/11/26 2:45 PM ARRAYS • 163 For example: 3 7 4 5 9 8 3 4 6 8 3 2 6 7 5 3 4 etc. First array: Second array: 28 29 23 etc 5. The array called codeArray has 45 elements and contains codes, each consisting of three alphabetical values. The value of the seventh element is no longer valid so all the values of the subsequent elements must be moved by one position to the lower index. For example, codeArray(12) must be moved to codeArray(11). The code value KBD must be stored in the last element. 6. The array called number is given the following values: number 1 2 3 4 5 6 7 8 Process the code given below and display the new values for the array in the space provided: for i = 1 to 6 step 2 number(i) = number(i+1) number(i - 1) = i + number(i) next i Ed 3 BPP 4th pgs.indb 163 number 2012/11/26 2:45 PM 164 • BASIC PROGRAMMING PRINCIPLES 7. An array called letterArray has 30 elements that contain a sentence with one letter per element. For example, TODAY IS A LOVELY SUNNY DAY. T O D A Y I S A L O V E L Y S U N N Y D A Y The following algorithm attempts to count how many elements contain either an A or an E and displays the count. It must also express the count as a percentage of the total letter count. Identify and correct all the errors in this algorithm. CountAE count = 1 for k = 1 to 30 if letterArray(i) = “A” OR letterArray(i) = “E” then count = count + 1 endif next percentage = count / k * 100 display “There are ”, k, “ A’s and E’s in the array” display “The A’s and E’s are ”, percentage, “ % of the total number of letters” end 8. Determine the value of the array called abc after the following statements have been processed: abc 2 3 4 5 6 7 8 9 10 y = abc (0) for x = 1 to 6 step 2 abc (x) = abc (y - 1) + 2 next x z = abc (7) for y = abc (2) to 8 abc (y) = z + y next y Ed 3 BPP 4th pgs.indb 164 2012/11/26 2:45 PM ARRAYS • 165 9. Given an array called array_s: array_s 4 7 2 3 8 5 1 9 Determine the value of t after these statements have been processed: a = -2 t=7 for i = t to 1 step -2 t = t + array_s (i) t=t+a a=a*2 next i display t 10. The array called array_m has 600 elements. The value of the element that has the same index as the value of the variable called ct must be decreased by 35%, then 14% VAT must be added to it. Write the statement to achieve this. 11. Study the following array called XYZ. XYZ 4 17 23 54 43 23 1 77 82 10 Ed 3 BPP 4th pgs.indb 165 2012/11/26 2:45 PM 166 • BASIC PROGRAMMING PRINCIPLES 11.1 What will the value of answer be after the following statements have been executed? x=8 answer = XYZ(3) + XYZ(x) + x 11.2 What is the value of element 4? 12. The array called number contains the following values: number 1 2 3 4 5 6 7 8 Process the code given below and show the new values in the array: for i = 0 to 5 step 2 number(i) = number(i+1) number(i+3) = i + number(i) next i Ed 3 BPP 4th pgs.indb 166 number 2012/11/26 2:45 PM ARRAYS • 167 13. The array called priceVal can contain 10 integer value elements. Process the code given below and show the new values in the array. for i = 0 to 9 priceVal(i) = i * 2 next i m=4 do while priceVal(m) > 5 priceVal(m) = priceVal(m + 1) m=m-1 loop for j = m to 9 priceVal(j) = priceVal(j) * 3 next j priceVal 14. The array XYZ can contain 10 numeric elements. Process the code given below and show the new values in the array. k=4 for x = 1 to 9 XYZ(x) = k / 2 k= k + 4 next x for y = 1 to 9 XYZ(y - 1) = XYZ(y) next y w=0 for z = 0 to 7 step 3 XYZ(w) = XYZ(z + 1) + 3 w=w+1 next z Ed 3 BPP 4th pgs.indb 167 XYZ 2012/11/26 2:45 PM 168 • BASIC PROGRAMMING PRINCIPLES 15. An array called ABC consists of 10 elements. It currently has no values but may contain integer values. Indicate (in the space provided) what the values in the array called ABC will be after execution of the following statements: FillArray ABC(0) = 1 for x = 1 to 9 ABC(x) = ABC(x – 1) * 2 next x for z = 9 to 0 step -3 ABC(x) = x + z next z Temp = ABC(6) ABC(6) = ABC(2) ABC(2) = Temp for y = 0 to 9 if ABC(y) > 10 then ABC(y) = ABC(y) + 10 endif next y ABC(0) = y end ABC 16. An array called NUM contains 50 unique integers. In pseudocode, write only the statements required to enter values into this array. For each number entered, ensure that it is numeric and that it does not yet appear in the array. If a value already exists, display an appropriate error message and re-enter the value. 17. Write an algorithm for the following: 17.1 Solomon sells 40 different products in his fast food store, which he’s numbered from 1 to 40. He has decided to use a program to handle his sales. But first a short program must be developed to load the prices into the array in the program. 17.2 Add statements to the algorithm to calculate the amount due by a client. The client orders items according to product number, giving the required quantity. For every product, the product number, quantity ordered, unit price and amount for these products must be displayed. The amount due by the client is displayed once the product code = 99 is entered. Ed 3 BPP 4th pgs.indb 168 2012/11/26 2:45 PM ARRAYS • 169 2 Parallel (paired) arrays When two or more arrays are related to one another and have the same number of elements, they are known as parallel arrays. The elements in these arrays need not be of the same data type. Consider two arrays – one called code and the other called description. The array called code contains the following item codes by which they are identified (ab3, kh8, vs1, gp5 and wd4), whereas the array called description contains the following descriptions to match the corresponding elements (chair, table, bed, cupboard and sofa). In other words, the indexes of the two arrays will be equivalent for a specific item. The two arrays can also be represented as follows: index code index description 0 ab3 0 chair 1 kh8 1 table 2 vs1 2 bed 3 gp5 3 cupboard 4 wd4 4 sofa Table 4: Content of the code and description arrays If we know what the value of a code element is, we need to find the index of this value and then go to the description array to find the description of the item in the element with the same index. Example 6 Problem We need to write an algorithm to enter a code, find the corresponding description and then display the description on screen. If the description is not found because code doesn’t contain the entered code, a suitable message must be displayed. Ed 3 BPP 4th pgs.indb 169 2012/11/26 2:45 PM 170 • BASIC PROGRAMMING PRINCIPLES Algorithm FindDescription ~ Find the description for an entered item code. ~ Assume the arrays already contain the valid values itemIndex = 0 display “Provide the code of an item” enter itemCode do while itemIndex < 5 AND code(itemIndex) <> itemCode itemIndex = itemIndex + 1 loop ~ Display the answer if itemIndex < 5 then display “The description for ”, itemCode, “ is ”, description(itemIndex) else display “You entered an incorrect item code” endif end Exercises Do the planning and write algorithms to solve each of these problems: 1. Three parallel arrays each contain 250 elements. One contains the employee numbers, another the department codes and the third contains the annual salaries. Display the employee number and department code of every employee who earns more than R100 000 per annum. 2. Three parallel arrays related to information about 300 different items in a shop contain the item number, the number of items in stock and the price of the item. A real value that must be used to increase the price of every item must be entered. The item number and the increase in value of the stock must be displayed for every item. Hint: Increase in value = new value – previous value while value = price * number in stock. 3. Assume three parallel arrays contain the following values. Snack code Description Price in R 75 Chocolate 5.75 23 Soda 6.25 89 Pizza slice 8.50 41 Burger 15.85 17 Muffin 5.75 Table 5: Three related arrays Ed 3 BPP 4th pgs.indb 170 2012/11/26 2:45 PM ARRAYS • 171 The user is asked to enter the code of the snack he or she wants to buy, as well as the number bought. The program must find the description and the price in the arrays, calculate the amount, add 14% VAT and then display the number bought, description and total amount due on the screen. 4. Six children took part in a series of three quizzes each. Enter values into four parallel arrays. The first array contains the name of each child and the other three parallel arrays contain the points that each child scored in each quiz. Calculate the average number of points obtained by every child and store these values in a fifth array. Determine and display the name of the child who obtained the highest points on average. 5. Two parallel arrays (stNum and stMark) contain the student numbers and test marks for 100 students. In pseudocode, write only the statement(s) required to display the student numbers and the test marks for all students who obtained a distinction in the test (75% or more). 6. Three parallel arrays contain information about eight girls. The first array contains the first names of the girls, the second array contains their surnames and the third array contains their birthdays in the format DDMM. Plan and write an algorithm to display the first name, surname and birthday in the following format: Jenny Nkosi, 17 May You can assume that all three arrays already contain valid values. 3 Two-dimensional arrays A one-dimensional array consists of a column that contains a number of row elements, whereas a two-dimensional array consists of a number of rows and a number of columns. The difference between a one-dimensional array and a two-dimensional array can be explained by means of the following example: The minimum temperature for the past seven days of the week, as can be seen in the following table: 3 4 5 3 2 3 6 Table 6: A one-dimensional array Ed 3 BPP 4th pgs.indb 171 2012/11/26 2:45 PM 172 • BASIC PROGRAMMING PRINCIPLES This one-dimensional array can be expanded to a two-dimensional array when the maximum temperatures are added, as follows: 3 18 4 22 5 23 3 21 2 24 3 19 6 25 Table 7: A two-dimensional array The particulars of a single day can be found in a row – for instance, row 0 contains the minimum and maximum temperatures for day 1, that is 3 and 18. Similarly, row 3 column 0 contains the minimum temperature for day 4 and row 3 column 1 the maximum temperature for day 4. We can now name the array temperatures, which consists of seven rows and two columns. When referencing a particular element, we need to specify both the row and the column number: temperatures (2, 1) = 23 temperatures (4, 0) = 2 Example 7 There are 20 students in a class at the college. Their names and student numbers are stored in two parallel arrays in order of student number. Every student wrote four tests. The test scores are stored in a twodimensional array. We need to calculate the final mark for every student – the average of the four test marks – and store it in a third parallel array. We’ll use the three parallel arrays to display all student numbers, followed by the student name and the final mark. Then we’ll determine the student who obtained the best final mark and display the best final mark and student name. For the purpose of this example you can assume that all the data is already stored in the arrays. Ed 3 BPP 4th pgs.indb 172 2012/11/26 2:45 PM ARRAYS • 173 Planning The following arrays will be used: Student numbers stNums one dimensional 20 rows Student names stNames one dimensional Student marks stMarks two dimensional Final marks stFinalMarks one dimensional 20 rows 20 rows, 4 columns 20 rows Table 8: Planned arrays for Example 7 Other variables used: The best mark A student’s total marks Variable for student loop Variable for test loop best total st test Algorithm CalcResults ~ The program will calculate the results of students for st = 0 to 19 total = 0 for test = 0 to 3 total = total + stMarks(st, test) next test stFinalMark(st) = total / 4 ~ Loop student 20 times ~ Initialise the total for 1 student ~ Loop test 4 times ~ Add mark of student to his/her total ~ Calculate and store average st mark ~ in array next st for st = 0 to 19 ~ Display details of every student display “St no: ”, stNum(st), “ St name: ”, stNames(st), “Final mark: ”, stFinalMark(st) next st ~ Find the best student best = stFinalMark(0) ~ Set best to mark of 1st student student = stNames(0) for st = 1 to 19 if stFinalMark(st) > best then best = stFinalMark(st) student = stNames(st) ~ Store name as well endif next st ~ Display the best student display “The best student is: ”, student, “ and his mark is: ”, best end Ed 3 BPP 4th pgs.indb 173 2012/11/26 2:45 PM 174 • BASIC PROGRAMMING PRINCIPLES Exercises Do the planning and write algorithms to solve each of the following problems: 1. The array called wArray has 20 rows and 24 columns and every element contains a valid integer. Display every row number and the number of elements in the row that has a value greater than 50. 2. The manager of the Super Store decided to increase the limit on the accounts of all his good customers. He stores customer data in two parallel arrays; one for the account numbers and one for the account limit in Rand. He also has a two-dimensional array with 12-column rows that correspond to each row in the parallel arrays. Every row in the twodimensional array, which represents the 12 months of the year, contains the amounts that the customer spent in the shop, but has not yet paid. The program must increase the account limits for every customer who owes less than 75% of the current limit by 12%. 3. The Best Buys supermarket uses a one-dimensional array to store department codes consisting of three characters each, and a twodimensional array to store the sales for the past month per department. The two-dimensional array stores information for seven departments and every department can store 1 000 sales transactions. The seven department codes must be entered in the beginning of the program and all the sales amounts must be initialised. The sales transactions are entered into the two-dimensional array by entering the department code and the sales amount. Use the department code to find the index of the department and insert the amount into the next available element. At the end of the program the department code and the total sales amount must be displayed. Write code to eliminate all possible errors including more than 1 000 sales per department. 4. Two parallel arrays store the following information for seven employees. The first array is a one-dimensional array that contains the seven employee numbers. The second array is a two-dimensional array that contains the basic monthly salary in the first column, the bonus in the second column and the net salary in the third column. Therefore, every row in the two-dimensional array will contain the basic monthly salary, bonus and net salary for the employee whose number is stored in the parallel array in the same position. Ed 3 BPP 4th pgs.indb 174 2012/11/26 2:45 PM ARRAYS Emp no B Month Sal Emp 1 1234 5000.00 Emp 2 2345 6000.00 Emp 3 3456 6500.00 Emp 4 4567 7000.00 Emp 5 5678 8650.00 Emp 6 6789 9800.00 Emp 7 7890 9950.00 Bonus • 175 Net salary Table 9: Parallel arrays to use with Question 4 The employee numbers are available in the first array. The basic monthly salaries are available in the second array. Do the planning and write an algorithm to complete the rest of the array, using the following: Bonus = 75% of the basic monthly salary Deductions from basic monthly salary: Tax = 18% Medical aid = R425 Display all the values on screen. 5. Execute the following algorithm and store the answers in an array called arrayC, which has nine rows and ten columns. Draw the array on paper. fillAsteriskArray for a = 0 to 4 for b = 5 to 6 arrayC(a,b) = “*” next b next a a=4 b=4 for c = 5 to 8 for d = a to b arrayC(c,d) = “*” next d a=a–1 b=b+1 next c end Ed 3 BPP 4th pgs.indb 175 2012/11/26 2:45 PM 176 • BASIC PROGRAMMING PRINCIPLES 4 Sorting arrays It is advisable to sort the values of the elements in an array into a specific sequence – ascending or descending order – according to a specific field(s). Suppose a programmer has to find a specific value in an array that has numeric elements. If the programmer searches for the number in an unsorted array, it’s possible that all the elements will have to be searched before the number is found or not found. But if the values of the elements are sorted in ascending numeric sequence, the programmer only searches until the number is found or until the next number in the array has a higher value than the number the programmer is searching for. 20 5 15 36 4 Table 10: An unsorted array 36 20 15 5 4 Table 11: The array sorted in descending order Example: The programmer needs to find if the number 16 is present in the array. When searching the unsorted array, all the elements are compared to 16 before it is clear that 16 is not present. But when searching the sorted array, there will only be 3 comparisons, to the values 36, 20 and 15 where the last value is less than 16 when it is evident that 16 is not in the array. When using character or string values, the order is: Ascending: A to Z Descending: Z to A Remember that the names in a telephone directory are sorted in ascending sequence. Ed 3 BPP 4th pgs.indb 176 2012/11/26 2:45 PM ARRAYS • 177 4.1 The bubble sort method There are many sorting techniques. One of the simplest to understand is a technique called the bubble sort. Elements in the array are compared to each other in pairs, and when an element is not in sequence, it trades places with the other element. We’ll illustrate this concept using an example, as shown in the following array. 25 47 Comparing the first two elements: 25 is less than 47. Nothing changes. 16 2 17 25 47 Comparing the next two elements: 47 is greater than 16. Values are swapped. 16 2 17 25 16 Comparing the next two elements: 47 is greater than 2. Values are swapped. 47 2 17 25 16 Comparing the next two elements: 47 is greater than 17. Values are swapped. 2 47 17 25 16 At this stage, you will notice that the highest value (47) is in the last position. 2 17 47 Ed 3 BPP 4th pgs.indb 177 2012/11/26 2:45 PM 178 • BASIC PROGRAMMING PRINCIPLES Now we’re going to deal with the first four positions. 16 25 Compare the first two elements: 25 is greater than 16. Values are swapped. 2 17 47 16 2 Comparing the next two elements: 25 is greater than 2. Values are swapped. 25 17 47 16 2 Comparing the next two elements: 25 is greater than 17. Values are swapped. 17 25 47 At this stage, you will notice that the second highest value (25) is in the second last position. We would continue comparing the values the first three positions in the same manner, then the first two positions, after which the values in the array would be in ascending order. Example 8 Problem An array called petNames has 15 elements, each of which contains the name of a pet. The values of the elements must be sorted in ascending sequence. Ed 3 BPP 4th pgs.indb 178 2012/11/26 2:45 PM ARRAYS • 179 Algorithm SortPetNames ~ This program will sort the names of the pets in ascending order. We can assume that ~ the array already contains values. p = 12 for k = 0 to 13 ~ The array must be sorted 14 times for m = 0 to p ~ Number of comparisons if petNames(m) > petNames(m+1) then temp = petNames(m) ~ Use temp to store the value petNames(m) = petNames(m+1) petNames(m+1) = temp endif next m p=p–1 next k end 4.2 The selection sort method The selection sort method selects the smallest value from the entire array and exchanges it with the first element in the array. Following this exchange, the second smallest element is selected from the array and exchanged with the second element. This process is continued until the entire array is in ascending order. Initial order 1st pass 2nd pass 3rd pass 4th pass 14 2 2 2 2 3 3 3 3 3 12 12 12 5 5 2 14 14 14 12 5 5 5 12 14 Table 12: An ascending selection sort The arrows in the table indicate the movements of the smaller numbers. Note that they’re exchanged with bigger numbers. To sort an array into descending sequence, the entire process is just reversed to start with the biggest value, which is exchanged with the first element in the array, and so on. Ed 3 BPP 4th pgs.indb 179 2012/11/26 2:45 PM 180 • BASIC PROGRAMMING PRINCIPLES Example 9 Now let’s sort the petNames array we used in Example 8 in descending order. Note that (n – 1) exchanges will take place if there are n elements in the array. Algorithm SortPetNames ~ This program will sort the names of the pets in descending order ~ The array already contains values for g = 0 to 13 biggest = petNames(g) ~ Set initial values to position = g ~ find the biggest for h = (g+1) to 14 if petNames(h) > biggest then biggest = petNames(h) position = h endif next h petNames(position) = petNames(g) petNames(g) = biggest next g end Exercises 1. Twenty athletes took part in a race and their times in minutes were stored in an array as real numbers. Use a bubble sort to sort the times (in ascending or descending order, depending on your logic) and then display the times of the fastest three athletes (lowest times). 2. Repeat Question 1 to include a parallel array that contains the names of the athletes. When doing the bubble sort, remember to swap the names in the names array at the same time that you swap the times in the times array. 3. An array called numberArray contains an odd number of integer values. Use a selection sort to sort the array in ascending order, then display the smallest (first) value, the middle value and the largest (last) integer. Enter the number of elements in the array in the beginning of the program, as well as the values of the elements. Ed 3 BPP 4th pgs.indb 180 2012/11/26 2:45 PM 181 Chapter 9 Function procedures and subprocedures Introduction Using function procedures and subprocedures enables you to split large, complex algorithms into smaller modules, which makes the computer coding more effective. Lines of code that perform a specific task that is repeated often would typically be coded as a separate procedure. Such a procedure is written just once and reused whenever the task needs to be performed. Large and complex applications can also be broken down into smaller, more manageable tasks. It often happens that two or more programmers work on the same application at the same time, each on a different subprocedure. Because the modules are now shorter, it should be more understandable to other programmers who might read and need to use it. Both a subprocedure and a function procedure perform a task. However, a function procedure – also called a function – always returns one value that has been determined or calculated within the function. Outcomes When you have studied this chapter you should know and understand the following: • modules and mudularisation, • drawing a hierarchy chart, • the purpose and use of value parameters and reference parameters, • the use of function procedures, • writing a statement to call a function, and writing the corresponding function header, statements in the loop and a statement to return an answer, • writing functions with and without parameters, • the use of subprocedures, • writing a statement to call a subprocedure, and writing the corresponding subprocedure header and statements in the subprocedure, and • writing subprocedures with or without parameters. Ed 3 BPP 4th pgs.indb 181 2012/11/26 2:45 PM 182 • BASIC PROGRAMMING PRINCIPLES 1 Modules and modularisation Modularisation divides the solution to a problem into smaller pieces – called modules – to improve the flexibility of a program and shorten its development time. A module is therefore part of a program. Large and complex programs can be divided into independently developed modules. Each module is made up of one or more statements to perform a specific task. The various modules are then linked to form a working program. Modules can take several forms, depending on the programming language used. Two such forms are function procedures and subprocedures, which we’ll be discussing in this chapter. 2 Hierarchy charts A hierarchy chart is a diagram that provides a global view of the modules in your program and how they link together to function as a complete program. A hierarchy chart doesn’t contain any detail, just the name of each module and an indication of how the modules are related. When drawing a hierarchy chart, you always start by placing the main module at the top. Through connecting lines, you can then see which modules will be called from the main module. These modules, in turn, can call other sub modules. Once a programmer has identified all the steps required to solve a problem, he or she can group steps that have a common goal into logical groups to see which of the steps can be coded in a separate module, to break the problem into smaller chunks and simplify the process. For example, to calculate students’ final marks, the programmer may decide to use one module to obtain the input values and two more modules to calculate the year mark and the final marks. The displaying of the final marks could also be done in a separate module. Figure 1 shows a sample hierarchy chart based on this program. StudentMainModule() GetInput() Calculations() CalcPredicate() DisplayOutput() CalcFinalMark() Figure 1: A hierarchy chart Note that each module has a descriptive name. Ed 3 BPP 4th pgs.indb 182 2012/11/26 2:45 PM FUNCTION PROCEDURES AND SUBPROCEDURES • 183 3 Parameters Before we can study function procedures and subprocedures, we need to understand what parameters are. A parameter is data (variables or values) that is sent to a function or a subprocedure, which it needs to perform the task it has to do. A parameter may also contain the address of an answer when dealing with a subprocedure. There are two types of parameters: • value parameters and • reference parameters. 3.1 Value parameters Value parameters can be explained using examples from everyday life. Joseph has a page on which he wrote some numbers. He makes a copy of the page and sends it to Solly. In programming terms, Joseph has sent value parameters to Solly, who could be a function or subprocedure that needs the parameters. Solly may do anything he wishes with the parameters because Joseph still has the original and doesn’t need the copy anymore. So if Solly changes a value parameter, it is changed only on his copy and not on the original. Solly may use these parameters to calculate a total. He may keep this total for his own use or he could return it to Joseph. If he keeps it, the total could be displayed or it can be used in other calculations. If he returns the value of the total to Joseph, Solly is a function and not a subprocedure because a function always returns an answer. Joseph will now have his original copy as well as a total that doesn’t exist on his original copy. Another everyday example is that Sam may tell Henry how much money he has in his bank account. In programming terms, he’s sending a copy or value parameter to a function called Henry. Function Henry will now be able to calculate how much money the two of them have in total, but he cannot change the amount in Sam’s account. In the generic planning of programs (algorithms), we will use the prefix val to identify a value parameter. 3.2 Reference parameters Again, we can use everyday examples to explain reference parameters. Josephine receives a post box number and the key to the post box at the post office. She goes to the post office and opens the box to find a letter in the box. She can now put something else in the box that the owner will collect. She can Ed 3 BPP 4th pgs.indb 183 2012/11/26 2:45 PM 184 • BASIC PROGRAMMING PRINCIPLES also receive more than one post box number (address) and the corresponding keys to return different letters to the owners. In programming terms: Two owners of post boxes give their keys and post box numbers – two reference parameters – to subprocedure Josephine. This means that the addresses of the post boxes are known to Josephine and she has access to the post boxes. In computer terms, these post boxes represent different areas in memory of the computer. Subprocedure Josephine may now remove the letter, put another letter in the post box or just write something else on the letter. But bear in mind that, while the instructions in the subprocedure apply, changes are issued within subprocedure Josephine. These changes take place inside the post boxes. Returning to the banking example in Section 3.1, if Sam gives subprocedure Henry access to his banking account by giving him the number and pin code, procedure Henry could withdraw or deposit an amount of money in Sam’s account. These changes would take place in Sam’s account according to instructions given by subprocedure Henry. In the generic planning of programs (algorithms), we will use the prefix ref to identify a reference parameter. 4 Function procedures A function procedure, which we’ll refer to as a function, consists of a number of statements used to execute a single task. A function always returns a value and can receive value parameters. However, it’s possible that it may not receive parameters. 4.1 The function call Calling statements in other parts of the algorithm activate or call a function. When the function has been processed, control returns to the calling statement. The list of parameters in a function is known as an argument list. There are various types of calling statements, such as assignment statements, if statements and display statements, as can be seen in the following examples. In each case, the actual call consists of the name of the function followed by an argument list in brackets. An argument list can, however, be empty. An assignment statement Send two values, number1 and number2, to a function named CalcSum, which will calculate the sum of the two numbers. Call the function: sum = CalcSum(number1, number2) Ed 3 BPP 4th pgs.indb 184 2012/11/26 2:45 PM FUNCTION PROCEDURES AND SUBPROCEDURES • 185 The answer will be stored in sum. CalcSum is the name of the function whereas number1 and number2 are the arguments (two value parameters). A display statement Use the same example, but don’t store the answer in sum; instead display the sum of the two numbers. display “The value of the sum is: ”, CalcSum(number1, number2) The function CalcSum is called while sending the two value parameters (number1 and number2) to the function. The sum is returned to the calling statement and displayed on the screen. An if statement if CalcSum(number1, number2) > 40 then display “The sum is greater than 40” endif The function CalcSum is called while passing the two value parameters to the function to calculate the sum of the two numbers. The sum is returned to the calling statement and then used in the if statement. 4.2 The function The first line of a function – called the function header – contains the word function, a function name and a list of parameters. Again, the parameter list can be empty. Format: Function NameOfFunction(parameter list) The last statement of the function to be processed will be a return statement (exit the function) that sends the result of the function to the calling statement. If a function contains an if statement, it may contain more than one return statement in different parts of the if statement. However, it will execute only one of these statements and return only one value depending on the outcome of the if statement. The data type of the value returned must be the same in all the return statements. Format: return value The name of the function is associated with the data type of the value that is returned to the calling module. This is why a function may return only one value. Ed 3 BPP 4th pgs.indb 185 2012/11/26 2:45 PM 186 • BASIC PROGRAMMING PRINCIPLES Example: Write the calling statement to call a function that calculates the sum of two numbers as well as the function to store the answer in the variable sum. Calling statement: sum = CalcSum(number1, number2) The function to calculate the sum of two numbers will be: Function CalcSum(valNumber1, valNumber2) total = valNumber1 + valNumber2 return total Important notes • The function name used in the calling statement and the function name in the function header must always be the same. • The names of the arguments and parameters need not be the same. • The order of the variables in a calling statement’s argument list and the parameters in the function header must always be the same. • The number of variables in a calling statement’s argument list and the number of parameters in the function header must always be the same. • The name of the value returned by the function need not be the same as in the calling statement. • The arguments are only the names of the applicable variables in the calling module. On the other hand, the parameters in the header must indicate whether the parameter is a value parameter or a reference parameter – in other words, whether a copy or an address has been sent. sum = Function Calcsum(number1, number2) Calcsum(valNumber1, valNumber2) total = valNumber2 + valNumber2 return total The function can also be written as follows, where the variable total is replaced by the expression valNumber1 + valNumber2. Function CalcSum(valNumber1, valNumber2) return valNumber1 + valNumber2 Ed 3 BPP 4th pgs.indb 186 2012/11/26 2:45 PM FUNCTION PROCEDURES AND SUBPROCEDURES • 187 4.3 Calling a function and using a function The examples that follow demonstrate how to do the planning and write algorithms that use functions and function calls to solve the problem. Note In the generic planning for the program examples that follow, we’ll use the prefixes val for a value parameter and ref for a reference parameter. These prefixes are used only in the function or subprocedure and not in the calling module or calling statement. Example 1 Reginald went to a shop to buy a number of fruit bars. The number bought and the price of a fruit bar are entered in a main procedure. These numbers need to be sent to a function to calculate the amount due. The amount due must include 14% VAT. The calculated value must be returned to the main procedure and displayed on the screen. ShoppingProgram() CalcAmtDue() Figure 2: Example 1 hierarchy chart Planning Description Type Variable name Number of items Integer numItems Price of one item Real price Amount due Real amtDue Integer valNum Real valPrice Real -not used- Main procedure (ShoppingProgram) Input Output Function (CalcAmtDue) Copy of number Input of items Copy of price of one item Output Amount due Table 1: Input and output variables for Example 1 Ed 3 BPP 4th pgs.indb 187 2012/11/26 2:45 PM 188 • BASIC PROGRAMMING PRINCIPLES Algorithm Function CalcAmtDue (valNum, valPrice) return (valNum * valPrice * 1.14) ShoppingProgram ~ The input data will be entered in the main procedure. ~ The main procedure will then call a function to calculate the amount due. ~ The amount due will be displayed in the main procedure. display “Enter the number of fruit bars bought” enter numItems display “Enter the price of a fruit bar” enter price amtDue = CalcAmtDue (numItems, price) ~ Function call display “The amount due is R”, amtDue end Important notes • This example illustrates that the function and the main program are two completely separate entities. • The main program and the function communicate using parameters. • If the function does not receive the number and the price, it will not be able to calculate the correct answer. This is because number and price are local to the main module where they have been declared and cannot be accessed by the function unless the function receives them as parameters. • If the amount due is not returned to the main procedure, the main procedure will not have the correct value to display. • The parameters in the call statement’s argument list (in the main procedure) are in the same order as the parameters in the function header’s parameter list. • In most programming languages, the functions and subprocedures are coded before the main program, so this book will follow that convention in the example algorithms. Example 2 Write an algorithm to enter three test marks for a student. A function is called to calculate the average mark. Another function is used to indicate whether the average mark is a pass mark (>=50) or a fail mark. The average as well as the result must be displayed on the screen. All input and output must be done in the main procedure. Ed 3 BPP 4th pgs.indb 188 2012/11/26 2:45 PM FUNCTION PROCEDURES AND SUBPROCEDURES • 189 ShowResults() CalcAve() DetermineResults() Figure 3: Example 2 hierarchy chart Planning Description Type Variable name Student name String studentName Test mark 1 Integer testMark1 Test mark 2 Integer testMark2 Test mark 3 Integer testMark3 Average mark Real average Result String -not used- Integer valTest1 Integer valTest2 Integer valTest3 Real -not used- Integer valAve String message Main procedure (ShowResults) Input Output Function (CalcAve) Input Output Copy of test mark 1 Copy of test mark 2 Copy of test mark 3 Average mark Function (DetermineResults) Copy of average Input mark Output Result message Table 2: Input and output variables for Example 2 Ed 3 BPP 4th pgs.indb 189 2012/11/26 2:45 PM 190 • BASIC PROGRAMMING PRINCIPLES Algorithm Function CalcAve (valTest1, valTest2, valTest3) ~ Calculate and return the average of the three tests return (valTest1 + valTest2 + valTest3) / 3 ~ Function Function DetermineResults (valAve) ~ Produce a message to express the outcome message = “pass” if valAve < 50 then message = “fail” endif return message ~ Function ShowResults ~ Main procedure ~ This program determines the result of the student’s performance display “Enter the student name” enter studentName display “Enter the first test mark” enter testMark1 display “Enter the second test mark” enter testMark2 display “Enter the third test mark” enter testMark3 ~ Call the function to calculate the average average = CalcAve (testMark1, testMark2, testMark3) display “The average mark for ”, studentName , “ is ”, average ~ Call the function to determine the result display “This student will ”, DetermineResults(average) end Exercises 1. Identify and correct all the errors in the following function call and its corresponding function header. decPay = CalcPay(Hours, Tariff ) Function Pay(refTariff, valHours) 2. Determine the output of each of the following algorithms: 2.1 Function Calculation(valX, valY) return (valX + valY \ 2) JustACalculation a = 14 b=5 answer = Calculation(a, b) display “The answer is ”, answer end Ed 3 BPP 4th pgs.indb 190 2012/11/26 2:45 PM FUNCTION PROCEDURES AND SUBPROCEDURES • 191 2.2 Function AddNumbers(valA, valB) c= valA + valB return c MainAlgorithm a=0 b=1 do while a < 5 x = AddNumbers(a, b) b=a+5 a=a+1 display “a = ”, a , “ b = ”, b , “ x = ”, x loop end ~ Display on a new line 3. The formula to calculate the Body Mass Index for a person is as follows: Weight BMI = _______2 Height Write a complete algorithm to enter a person’s weight and height and to send the variables containing these values to a function that must calculate and return the person’s Body Mass Index. The main module must then send the Body Mass Index to a second function that must return a message indicating the category the person belongs to. These are the categories: BMI Category 0 – 15 Starvation > 18.5 – 25 Normal > 25 – 30 Overweight > 30 – 40 Obese > 40 Morbidly obese Table 3: Body Mass Index The weight, height and Body Mass Index as well as the status must be displayed as output in the main module. 4. Study each of the following function calls, then write the complete function to calculate and return the answer. 4.1 BestMark = DetermineBest(Test1, Test2, Test3) The function must determine and return the best of the three test marks. 4.2 Average = CalcAverage(Test1,Test2, Test3) The function must calculate and return the average of the three test marks. Ed 3 BPP 4th pgs.indb 191 2012/11/26 2:45 PM 192 • BASIC PROGRAMMING PRINCIPLES 4.3 Pay = CalcPay(Hours, Tariff ) The function must calculate the person’s pay by multiplying the hours by the tariff per hour. If there are more than 40 hours, the person receives 1½ times the tariff for all hours over 40. 4.4 NetMonthSal = CalcSal(GrossAnnSal, TaxPercentage) The function must calculate and return an employee’s net monthly salary from their annual gross salary as well as the percentage tax that the person must pay. Deduct the tax amount from the monthly gross salary to calculate the monthly net salary. 5. Write a complete algorithm with functions to solve each of the following problems: 5.1 Enter the radius of a circle, then call one function to calculate the circumference and another function to calculate the area of the circle. Display the calculated values on the screen. 5.2 Elize buys a number of boxes of Smarties. You are asked to enter the number of boxes and the unit price of a box of Smarties. The amount due is calculated as the number bought multiplied by the price. However, a customer may receive discount depending on the number of boxes bought, as can be seen in the table below. All calculations for the amount due must be calculated in a function. The function must receive the number bought and unit price. Display the amount due in the main procedure. Number of boxes Discount 1–7 No discount 8 – 20 2.5% 21 and more 4.75% Table 4: Discount per box 5.3 You are a bookkeeper for a company and need to divide all the amounts you paid to suppliers into the basic amount and the VAT, which is 14%. For example, if the amount is R114, the basic amount will be R100 and the VAT amount will be R14. Enter the final amount, calculate the VAT in one function and the basic amount in another function. Display the basic amount and the VAT on the screen. 5 Subprocedures A subprocedure can also be used to solve a specific part of a problem, and has the following properties: • It can receive value parameters to use in the subprocedure. Ed 3 BPP 4th pgs.indb 192 2012/11/26 2:45 PM FUNCTION PROCEDURES AND SUBPROCEDURES • • • • 193 It can receive reference parameters. It doesn’t return a value. It is able to manipulate data outside the subprocedure at specific addresses, as given in the reference parameters. In other words, it can change more than one value. 5.1 The subprocedure call The syntax of the subprocedure call used in an algorithm is: call NameOfSubProcedure (argument list) Study the following subprocedure call: call Calculations(number1, number2, sum, product) display “The sum of ”, number1, “ and ”, number2, “ = ”, sum display “The product of ”, number1, “ and ”, number2, “ = ”, product Calculations is the name of the subprocedure, and number1 and number2 are value parameters containing numeric values. These values may not be changed by the subprocedure because they are displayed in the succeeding statements. sum and product are two reference parameters. They contain addresses of variables. The values in these specific addresses may be changed. Actually, we’re going to use the subprocedure to calculate two values – the sum and the product of the two numbers. 5.2 The subprocedure The syntax of the subprocedure header line used in the planning is: Sub NameOfSubProcedure(parameter list) Here’s the subprocedure header for the subprocedure call in the previous paragraph: Sub Calculations(valNo1, valNo2, refSum, refProduct) Calculations is the name of the subprocedure, which is the same name used in the subprocedure call. valNo1 and valNo2 are value parameters containing the numeric values sent from the subprocedure call. refSum and refProduct are two reference parameters that contain the addresses of the sum and the product. These two parameters will contain the answers, which will also be accessible from the main module. Ed 3 BPP 4th pgs.indb 193 2012/11/26 2:45 PM 194 • BASIC PROGRAMMING PRINCIPLES Here’s the entire subprocedure: Sub Calculations(valNo1, valNo2, refSum, refProduct) ~ Calculate the sum and the product of 2 numbers refSum = valNo1 + valNo2 refProduct = valNo1 * valNo2 End Sub The subprocedure uses parameters to receive “copies” of the values of number1 and number2. refSum and refProduct contain the addresses of the area in memory where the subprocedure must store the result of the calculation. The calling module will also refer to these addresses and will therefore be able to retrieve the answers. End Sub terminates the subprocedure. A function or subprocedure can be called from a main procedure or from any other function or subprocedure as can be seen in some of the examples. 5.3 Calling an independent subprocedure and using a subprocedure The examples that follow demonstrate how to do the planning and write algorithms that use subprocedures to solve a problem. Example 3 Danny invested an amount at the Save-a-Lot Bank, which must be entered at the beginning of the algorithm. The monthly interest rate is also entered. The algorithm must calculate and display the amount of interest earned as well as the balance at the end of every month for the next 15 months. At the end of the algorithm the total amount of interest must be displayed. This example uses functions and subprocedures where possible. A monthly interest rate is used to test the program, for example an annual interest rate of 10% = 0.83% per month. EarnInterest() CalcNewValues() DisplayResults() AccSum() Figure 4: Example 3 hierarchy chart Ed 3 BPP 4th pgs.indb 194 2012/11/26 2:45 PM FUNCTION PROCEDURES AND SUBPROCEDURES • 195 Planning Description Type Variable name Amount Real amount Interest rate Real rate Amount Real amount Monthly interest Real monInt Total interest Real totInterest Real valRate Real refAmt Real refMonthInterest Real valMInterest Real refTInterest Integer valMonth Real valAmt Real valMInt Main procedure (EarnInterest) Input Output Subprocedure (CalcNewValues) Copy of interest Parameters rate Address of amount Address of interest rate Subprocedure (AccSum) Copy of monthly Parameters interest Address of total interest amount Subprocedure (DisplayResults) Copy of month Parameters number Copy of amount Copy of monthly interest amount Table 5: Input and output variables for Example 3 Algorithm Sub DisplayResults (valMonth, valAmt, valMInt) display valMonth, “ ”, valAmt, “ ” , valMInt End Sub ~ Display monthly values Sub CalcNewValues (valRate, refAmt, refMonthInterest) refMonthInterest = refAmt * valRate / 100 ~ Calculate interest refAmt = refAmt + refMonthInterest ~ increase amount End Sub Sub AccSum (valMInterest, refTInterest) refTInterest = refTInterest + valMInterest End Sub Ed 3 BPP 4th pgs.indb 195 ~ Accumulate interest total 2012/11/26 2:45 PM 196 • BASIC PROGRAMMING PRINCIPLES EarnInterest ~ This program deals with the investment of money totInterest = 0 monInt = 0 display Headings display “Provide the amount you want to invest” enter amount display “Enter the monthly interest rate” enter rate call DisplayResults (0, amount, monInt) ~ Display initial values ~ Repeat 15 times to obtain final results for x = 1 to 15 call CalcNewValues (rate, amount, monInt) call DisplayResults (x, amount, monInt) call AccSum (monInt, totInterest) next x display “The total amount of interest earned is R”, totInterest end Example 4 This example shows the planning and an algorithm to calculate the final marks students obtained for Programming 3. The final mark is calculated on the marks of various assessments and their particular weightings: Assessment Weighting Test 1 15% Test 2 The better of two class test marks Examination 20% 15% 50% Table 6: Assessments and weightings We’ll code a function to determine and return the higher mark of two class tests. A subprocedure will be used to calculate the final mark and determine whether it is a pass or fail (message), and another subprocedure will display the mark and the message result. Ed 3 BPP 4th pgs.indb 196 2012/11/26 2:45 PM FUNCTION PROCEDURES AND SUBPROCEDURES • 197 CalFinalMarks() CalcCTMark() CalcValues() DisplayResults() Figure 5: Example 4 hierarchy chart Planning Description Type Variable name Mark for test 1 Integer test1 Mark for test 2 Mark for class test 1 Mark for class test 2 Exam mark Integer test2 Integer clTest1 Integer clTest2 Integer exam Integer betterClassTest Integer vaClMark1 Integer vaClMark2 Integer betterMark Main procedure (CalcFinalMark) Input Intermediate Better class test Output None Function (CalcClMark) Copy of class test Parameters 1 mark Copy of class test 2 mark Better class test Output mark Ed 3 BPP 4th pgs.indb 197 2012/11/26 2:45 PM 198 • BASIC PROGRAMMING PRINCIPLES Subprocedure (CalcValues) Parameters Copy of test 1 Copy of test 2 Copy of better class test Copy of exam mark Intermediate Final mark Indication – pass or fail Subprocedure (DisplayResults) Copy of final Parameters marks Copy of result message Output Final mark Message Integer valTest1 Integer valTest2 Integer valClassTest Integer valExam Real final String message Integer valFinalMark String valMessage Real valFinalMark String valMessage Table 7: Input and output variables for Example 4 Algorithm Function CalcClMark (valClMark1, valClMark2) if valClMark1 > valClMark2 betterMark = valClMark1 else betterMark = valClMark2 endif return betterMark ~ Function header Sub CalcValues (valTest1, valTest2,valClassTest,valExam) ~ Subprocedure final = valTest1 * 0.15 + valTest2 * 0.2 + valClassTest * 0.15 + valExam * 0.5 if final >= 50 then message = “Pass” else message = “fail” endif call DisplayResults (final, message) End Sub Sub DisplayResults (valFinalMark, valMessage) ~ Subprocedure display “The final mark of the student is “, valFinalMark display “The result is “, valMessage End Sub Ed 3 BPP 4th pgs.indb 198 2012/11/26 2:45 PM FUNCTION PROCEDURES AND SUBPROCEDURES CalcFinalMark Main procedure display “Provide the mark for test 1” enter test1 display “Provide the mark for test 2” enter test2 display “Provide the mark for class test 1” enter clTest1 display “Provide the mark for class test 2” enter clTest2 display “Provide the exam mark” enter exam betterClassTest = CalcClMark (clTest1, clTest2) call CalcValues (test1, test2, betterClassTest, Exam) end • 199 ~ Function call ~ Call subprocedure Important note As mentioned earlier, a function or subprocedure can be called from a main procedure or from any other function or subprocedure. In Example 4 a function was used to determine the higher class test and a subprocedure was used to determine the result. A second subprocedure is called from this subprocedure to determine and display the result. This can also clearly be seen from the hierarchy chart. 5.4 Functions and subprocedures without parameters It is possible that a function or subprocedure can be called without sending it any parameters. For instance, a function can be called where a value must be entered and validated until it is correct. When a correct value is entered, it must be returned to the calling module. Example 5 A function is called to enter the discount that applies to a product. The discount may never be more than 25%. Function CalcPercDiscount() do display “Enter the percentage discount that applies” enter percDiscount if percDiscount < 0 or percDiscount > 25 then display “Invalid discount – please re-enter” endif loop until percDiscount >= 0 and percDiscount <= 25 return percDiscount Ed 3 BPP 4th pgs.indb 199 2012/11/26 2:45 PM 200 • BASIC PROGRAMMING PRINCIPLES mainModule display “Enter the price of the product” enter price discount = calcPercDiscount() amtDue = price – price * discount / 100 display “Amount due = R”, amtDue end Exercises 1. What will the exact output be after each of these program segments has been executed? 1.1 Sub IsntItLovely (valA, refB, valC, refD) refD = valA if refB mod 3 = 0 then refB = refB + 2 endif refD = valA + (valC mod 5) valA = valA + 2 valC = valC + 1 End Sub MainAlgorithm w=0 x=3 y=8 z=6 for m = 4 to 9 step 3 w=m call IsntItLovely(w,x,y,z) display “w = ” , w , “ x = ” , x , “ y = ” , y , “z = ”, z next m end 1.2 Sub CalcProc (valA, refB) c = valA * 3 refB = c - refB End Sub Function CalcFunc (valK) return ((valK * 2) mod 4) Ed 3 BPP 4th pgs.indb 200 2012/11/26 2:45 PM FUNCTION PROCEDURES AND SUBPROCEDURES • 201 MainModule m=4 l=1 k=2 do j = CalcFunc (m) call CalcProc (j, k) display “ l = “ , l , “ j = “ , j , “k = “, k , “m = “, m m=m+1 loop until m > 5 end 2. An athlete runs a long distance from one town to another. In the main algorithm, enter the name of the athlete, the distance between the two towns and the actual distance that the athlete can run per day. Call a subprocedure to calculate the number of days the athlete will need to run the entire distance between the two towns. Display the answer in the main algorithm. Rewrite your solution, but call a function instead of a subprocedure. 3. Study each of these subprocedure calls, then write the complete subprocedure for the required algorithm. 3.1 Call SortTests(test1, test2, test3) The subprocedure must place the best test mark in the first parameter, the second-best test mark in the second parameter and the lowest mark in the third parameter. 3.2 Call CalcNetSal(GrossSal, 23.5, TaxAmt, cNetSal) The subprocedure must receive a gross salary and a tax percentage (23.5%, in this case). It must then calculate the tax amount for the employee, then the net salary by deducting the tax amount from the gross salary. All values will be applicable to a month’s salary. The tax amount and net salary must be available to the calling module after they’ve been calculated. 4. Write a complete algorithm to solve each of the following problems. Use functions and subprocedures wisely. 4.1 Ronnie sells newspapers on the corner of Long and Main streets from Mondays to Saturdays. At the start of the program, enter the profit he earns per newspaper, then go into a loop to input the number of newspapers he sold per day in a subprocedure. Call a function to calculate his profit per day and accumulate his profit for the week in a subprocedure. Display his profit for the week in the main module. 4.2 A fleet of taxis transports passengers from Main Square to various parts of the town. The owner of the taxis needs to know how many passengers travel to region A, region B or region C on a specific day. He earns 50 cents profit on a passenger travelling to region A, 65 cents to region B and 72 cents to region C. Enter the region for each passenger. Region code “Z” will terminate the input. Ed 3 BPP 4th pgs.indb 201 2012/11/26 2:45 PM 202 • BASIC PROGRAMMING PRINCIPLES Call two subprocedures: one to calculate how many passengers travel to each of the regions and another to calculate the profit earned by the owner. Display the taxi owner’s profit for the day on the screen. 4.3 Max Contractors has five employees, each of whom receive a weekly wage. The basic wage is entered. An employee may also borrow money from Max Contractors, in which case 25% of the loan is subtracted from the employee’s weekly wage. If this amount is more than R50, then R50 is subtracted. But if R50 is more than the remainder of the loan amount, the remainder is subtracted. The loan amount is also entered. The program must display the amount the employee will receive as well as the remaining amount of the loan. These answers must be calculated in a subprocedure. 4.4 Do the planning and write an algorithm to solve the following problem. At the Cheap Unfair Store, salaries for employees are computed as follows: A male employee earns a basic salary of R2 500 per month. He receives an additional R250 for every year of experience. He also receives an additional R550 if he has a qualification. Males pay 10% tax and 8% to the pension fund, which are deducted from the gross salary to produce the net salary. Female employees earn a basic salary of R2 000 per month and an additional R200 for every year of experience. Females receive an additional R450 if they have a qualification and they pay 9.5% tax and 7.5% to the pension fund. Enter the gender, years of experience and whether the person has a qualification. Call a separate function for females and males, each of which must return the gross monthly salary. Then call a procedure to calculate the tax amount and pension fund amount. Call another function to return the net salary for this person. Display the gross and net salaries in the main module. You can assume that the input values will be valid. 4.5 The admission requirements to study IT at the ABC University are as follows: • Admission into the general first year (mainstream students): • An APS score of 18 and at least 3 for English and 4 for Mathematics • Admission into the IT Foundation programme: • An APS score of 18 and at least 3 for English and Mathematics or • an APS score of 20 with at least 5 for Maths Literacy and 3 for English • The APS score is calculated by adding the scores for the best 6 subjects together, excluding the score for Life Skills and any score of 2 or less. Ed 3 BPP 4th pgs.indb 202 2012/11/26 2:45 PM FUNCTION PROCEDURES AND SUBPROCEDURES Example 1 • 203 Example 2 English 3 English 4 Ndebele 3 Northern Sotho 3 Mathematics 4 Maths Literacy 5 Biology 4 Physical Science 2 Life Orientation Technical Drawing Business Studies 5 Art 3 4 Life Orientation 6 4 Accounting 4 APS 22 APS 19 Table 8: Two examples of APS scores The person in Example 1 will qualify to enter directly into the main stream in the general first year, but the person in Example 2 won’t be considered for either the general first year or the foundation course. Write an algorithm with function procedures and subprocedures to indicate to prospective students whether they qualify for the IT course, the IT foundation course, or neither. The main procedure must ask the user to enter the following fields: • Reference number of prospective student • Initials and surname of prospective student • Mark for English • Mark for Second Language • An indication whether the prospective student has Mathematics, Maths Literacy or neither of these subjects. If the student has either Maths or Maths Literacy, their mark must be entered. If the student doesn’t have either Maths or Maths Literacy, a suitable message rejecting the application must be displayed and the program must not continue with the student’s application. Call a function procedure to determine and return the APS score for the student. The three marks already entered must be sent to the function procedure as value parameters and the marks for the next three best subjects (excluding Life Orientation) must be entered in the function. The APS score must then be determined and returned. If the student has Mathematics, call a subprocedure to determine whether the student qualifies for the general first year, foundation year or does not qualify at all. Decide on your own parameters and types. If the student has Maths Literacy, call a function procedure to determine whether the student qualifies for the foundation programme. Ed 3 BPP 4th pgs.indb 203 2012/11/26 2:45 PM 204 • BASIC PROGRAMMING PRINCIPLES Display a suitable message about the application status of the prospective student. The message should include the student name, reference number and APS score. If not accepted, the reason should be provided. 4.6 You are the bookkeeper for a retail company that bought stock from 25 suppliers during the past month. The amount paid to the suppliers included 14% VAT. To determine the selling price you increase the cost price of the stock by 37.5%. Do the planning and then write an algorithm to display a report of the amounts paid to the various suppliers. Also display how much the company must pay to the Receiver of Revenue (SARS). The algorithm must contain the following: • All input is done in the main procedure. • A subprocedure must divide the amount payable to each supplier into the basic amount and the VAT amount. • A function must display the basic amount and the VAT amount for every supplier. • A function must calculate the selling price (selling value) for the goods received from each supplier. • The first subprocedure must also divide the selling value into the basic amount and the VAT. • A function must receive the VAT amount on the cost price, the VAT amount on the selling price, and a total for the VAT payable to SARS. It will calculate the difference between the VAT amounts and accumulate these differences for the 25 orders in the VAT total. • The total amount that must be paid to SARS must be displayed in a function at the end of the algorithm. Ed 3 BPP 4th pgs.indb 204 2012/11/26 2:45 PM 205 Chapter 10 Sequential text files Introduction A file is a collection of data stored under a common name. Up to now, we’ve used data that is entered on the keyboard and stored in temporary locations, such as an array. Data in a file is usually stored on a more permanent medium such as a disk or CD. Frequently, the nature of the data is also more permanent, for example the data of all the employees employed by a company. The way that data is stored in a file determines the type of file it is. Although there are various types of files, we’ll discuss sequential access files, sometimes also known as text files. The characters in a sequential access file are stored in a sequential manner, one record after another. Because the information in the file is stored in sequential order, it can only be accessed sequentially. For example, the user will have to read the first four lines of text before the fifth line can be accessed. Outcomes When you have studied this chapter, you should be able to: • understand what a sequential file is, • understand the difference between input and output files, • do the following in pseudocode: • open an input file to read text from it, • open an output file to add text lines to it, • create an output file with text lines, • test whether a sequential access file exists, • close a sequential access file, • read information from a sequential access file, • test for the end of a sequential access file, and • update values in a sequential file by first reading the records into an array. Ed 3 BPP 4th pgs.indb 205 2012/11/26 2:45 PM 206 • BASIC PROGRAMMING PRINCIPLES 1 Input and output files The difference between input and output files is based on the way these files are used and accessed. An input file contains stored data that can be specified as input to a program when read from the file during processing. An output file is used by a program to store new data, by writing it to the file. When dealing with sequential files, a “new” file is always used because the changed or newly created data must be written or rewritten from the first to the last line of text. The file pointer will indicate the position in the file where text must be read or written. It is not possible to write data to a specific position within existing data in an input file, but more data can be added after the existing data. This is called appending data. Every file is identified by an external file name, such as marks.txt and profit.txt. 2 Opening a sequential access file Every file that is used in the program must be opened before it can be used. The open statement, which contains the name of the file, will try to find the specified file. When the file is found, it will connect this external physical text file to the filename used in the program in order to use it in the program. As discussed in the previous paragraph, there are input files, output files and output files to append data to. The programmer has to specify in the open statement what type of file must be opened. In the generic programming (where we do the planning) the following open statements will be used: Input file Example: open input(name of file) open input(employees.txt) The file pointer is now placed at the beginning of the file to start reading at the first line of text. Output file There are two ways to open an output file. It can either be opened to create a new output file or an existing file can be opened to append new text lines to it. open outputCreate(name of file) Example: open outputCreate(employees.txt) Ed 3 BPP 4th pgs.indb 206 2012/11/26 2:45 PM SEQUENTIAL TEXT FILES • 207 This statement will create a new, empty sequential access file. The file pointer is now placed at the beginning of the file to start writing the first line of text. open outputAppend(name of file) Example: open outputAppend(employees.txt) This statement will add new lines of text to an existing sequential access file. The file pointer will be placed at the end of the file. With every write statement, new lines of text will be added to the file. When a specified input file doesn’t exist, the program ends abnormally, so it’s good programming practice to test to see whether the file exists before trying to open it to read its data. if exists (name of file) then open the file endif A suitable action must be taken if the file does not exist, for example: if exists(students.txt) then open input(students.txt) else display “The file does not exist” endif 3 Closing a sequential access file A file should be closed as soon as possible to prevent loss of information. In the case of an input file, it must be closed as soon as all the text has been read from it and, when using an output file, as soon as all the text has been written to it. In cases where quite a number of files are used at different stages in the program, it is very important to adhere to this rule by keeping open only the files that are in use. It is also essential that files are opened just before their data is needed, and not before. In the planning of a program, the statement used to close a file is: close(name of file) Example: close(employees.txt) Ed 3 BPP 4th pgs.indb 207 2012/11/26 2:45 PM 208 • BASIC PROGRAMMING PRINCIPLES 4 Reading information from a sequential access file As mentioned earlier, a sequential access file is always read from the beginning of the file. The open statement positions the pointer before the first character of text. The read statement enables the program to read one line of text at a time, until the newline character is found. However, the string that is returned when the line is read doesn’t contain the newline character. Lines can be read from a file until the end-of-file (eof) character is found, which indicates that the file doesn’t contain any data that has not been read. The statement in an algorithm to read a line of text from a file is: read(name of file) The line of text is normally placed into a string variable from where it can be used for further processing. Example: EmployeeData = read(employees.txt) In an algorithm, the word eof indicates that the end of the file has been encountered, so processing must stop and the file must be closed. Example 1 In this pseudocode example, lines of text are read from the employee file. Every line of text is then displayed. The process is repeated until the end of the file is reached. if exists(employees.txt) then open input(employees.txt) EmployeeData = read(employees.txt) do until eof display EmployeeData EmployeeData = read(employees.txt) loop close(employees.txt) else display “The file does not exist.” endif Note that the first line of text is read before the loop. The first line of text is displayed inside the loop, and the next line of text must be read before the next execution of the loop. If this next read statement is omitted, the first line of text will keep on being displayed because the next line is never read and the end of file will never be encountered. Each read statement accesses the next line of text and tests whether the end of the file has been reached. Ed 3 BPP 4th pgs.indb 208 2012/11/26 2:45 PM SEQUENTIAL TEXT FILES • 209 The statement EmployeeData = read(employees.txt) took a complete record from the file and read it into the variable called EmployeeData. This line of text can consist of many different fields separated by special characters, called delimiters. String manipulation statements would first be necessary to divide the line of text into different variables before the individual values can be used. The records in the file could be: 12345*Boyd.R.S.*Sales*Manager# 23456*Nkosi.S.A.*Purchases*Assistant# 33445*Pillay.N.*HR*Assistant# 41231*Mokoetsi.M.M.*Marketing*Officer# : : The record EmployeeData contains four fields – the employee number (empNum), employee name (empName), department (empDept) and the job description (empJob). After the first record has been read, the variable EmployeeData will have the value “12345*Boyd.R.S.*Sales*Manager#”. We would then want to get the employee number, employee name, department and job description separately. It can be clearly seen that fields are separated by an asterisk and that a hash sign indicates the end of the record. Various string manipulation statements exist in different programming languages to find the position of the first “*” in the string. The substring up to that position can then be placed in the variable called empNum resulting in empNum = 12345. These values can then be deleted from the beginning of the original string up to the point of the first delimiter. The string now contains the value “Boyd.R.S.*Sales*Manager#”. The process can be repeated to place the value “Boyd.R.S.” into empName and the value “Sales” into empDept. Lastly, the value “Manager” will be placed into empJob and when the # is encountered as a delimiter, the process will stop for the current record. This string manipulation process enables the programmer to have access to the individual variables empNum, empName, empDept and empJob. The programmer can now use them in processing e.g. to display them on the screen of the computer. The string manipulation and division into separate variables could typically be done in a subprogram and the hierarchy chart is provided. The algorithm for the main modules is also provided – you can see that it is a modification of the previous algorithm. Ed 3 BPP 4th pgs.indb 209 2012/11/26 2:45 PM 210 • BASIC PROGRAMMING PRINCIPLES MainModule() DisplayHeadings() GetFields() Figure 1: Hierarchy chart for MainModule algorithm MainModule if exists(employees.txt) then open input (employees.txt) call DisplayHeadings() EmployeeData = read(employees.txt) do until eof call GetFields(EmployeeData, empNum, empName, empDept, empJob) display empNum, “ ”, empName, “ ”, empDept, “ ”, empJob EmployeeData = read(employees.txt) loop close (employees.txt) else display “The file does not exist.” endif end Because string manipulation is not covered in this book in detail, the code for the sub procedure is not provided. The output for this piece of code could be as follows: EMP NUMBER EMP NAME DEPARTMENT JOB DESCRIPTION 12345 23456 33445 41231 : : Boyd.R.S. Nkosi.S.A. Pillay.N. Mokoetsi.M.M. Sales Purchases HR Marketing Ed 3 BPP 4th pgs.indb 210 Manager Assistant Assistant Officer 2012/11/26 2:45 PM SEQUENTIAL TEXT FILES • 211 Exercises 1. Indicate whether the following statements are true or false. Provide a reason for your answer. 1.1 An input file should be closed as soon as all data has been read from it. 1.2 It is possible to write data to a specific position within other data in an input file. 1.3 Every file that is used in the program must be opened before it can be used. 1.4 In an algorithm to read data from a file, the following code is correct: do until eof EmployeeData = read(employees.txt) Display EmployeeData loop 1.5 It is impossible to modify existing values in a text file. 1.6 The data in a sequential access file is always accessed in consecutive order from the beginning of the file to the end. 2. Provide a hierarchy chart and an algorithm for each of the following. It is not necessary to include the code for the sub procedures where string functions are used to break each line into positions in the array. 2.1 A file called “diary.txt” contains first names, surnames, e-mail addresses and telephone numbers for 100 people in the following format: Freddy,Gomes,GomesF@gmail.com,0824154433. Some of the e-mail addresses and telephone numbers need to be changed. You can assume that the file already exists and that there will be exactly 100 text lines in the file. 2.2 The file C:\Employee.txt contains a text line containing the following information for each employee in a company: Employee number Name Gender Department code Annual salary Values are separated by dollar ($) signs and the end of each line is indicated by an at (@) sign. All the employees in Department A received a 6.5% increase. Update the salary for each of these employees. Ed 3 BPP 4th pgs.indb 211 2012/11/26 2:45 PM 212 • BASIC PROGRAMMING PRINCIPLES 2.3 Using the file used in 2.2, append new employees to the end of the file. For each new employee, enter the employee number, name, gender, department and annual salary. Validate that the department is only one character in length, that the gender is only F or M and that the annual salary is a decimal value greater than 0. If any of the input data is not correct, display a suitable error message and keep on entering the value until it is correct. 2.4 Create a file with a line per student containing the following data for any number of students: Student number Student name Test mark 1 Test mark 2 Test mark 3 Only valid values can be accepted and all fields in the file must be separated by hash (#) signs. The end of a line must be indicated by an asterisk. 5 Writing information to a sequential access file As mentioned earlier, text lines can be added to an existing file or a new output file can be created. The open statement indicates the way to write to the file. In both cases, the write statement enables the program to write one line of text at a time. The new line character (indicating the end of a record) will not automatically be written to the file, so when the programmer wants the next string of text to be written on a new line it must be specified. Lines of text are usually also written in a loop, so when the end is reached the programmer can simply close the file. The statement in an algorithm to write a line of text to a file is: write(name of file) The line of text is normally written from a string variable. This can be indicated in an algorithm by specifying the word from followed by the variable name. Example: write(employees.txt) from EmployeeData In an algorithm, an additional write statement must be included if the new line character must also be written. If it need not be written, this additional write statement can be ignored: write new line Ed 3 BPP 4th pgs.indb 212 2012/11/26 2:45 PM SEQUENTIAL TEXT FILES • 213 Example 2 In this pseudocode example, employee data will be accepted from the keyboard and written to a new text file. When the user indicates that there are no more employees, the process will terminate and the file will be closed. Every line of employee data must be written to a new line in the file. open outputCreate(employees.txt) ~ Opens the file. If it exists, the current content will ~ be erased. display “Enter the first line of employee data, enter -1 to stop” enter EmployeeData do while EmployeeData <> “-1” write(employees.txt) from EmployeeData write new line display “Enter the next line of employee data, enter -1 to stop” enter EmployeeData loop close(employees.txt) Once again, the first line of text must be entered before the loop. It is written to the file in the loop, and the next line of text must be entered before the next execution of the loop. In this example, a value of -1 indicates that the loop must be terminated and the file be closed. In Example 2, we assumed that users would enter the values by including all fields for a record, separated by delimiters. However, this is not user friendly and is also prone to input errors, so it would be better to let the user enter each value per employee, then use string functions to combine it into the correct format before writing the record. Most computer languages have a concatenation string function, which combines several values into one line of text. In our case, the user could enter the employee number, the employee name, the department and the job description into the variables empNum, empName, empDept and empJob respectively. Then the following statement could be used: Concatenate Ed 3 BPP 4th pgs.indb 213 empNum, “*”, empName, “*”, empDept, “*”, empJob, “#”into EmployeeData 2012/11/26 2:45 PM 214 • BASIC PROGRAMMING PRINCIPLES Our algorithm could be changed, as follows: open outputCreate(employees.txt) display “Enter the number of the first employee, enter -1 to stop” enter empNum do while empNum <> -1 display “Enter the name of this employee” enter empName display “Enter the department” enter empDept display “Enter his/her job description” enter empJob Concatenate empNum, “*”, empName, “*”, empDept, “*”, empJob, “#” into EmployeeData write(employee.txt) from EmployeeData write new line display “Enter the number of the next employee, enter -1 to stop” enter empNum loop close(employees.txt) The file will be created containing the following records: 12345*Boyd.R.S.*Sales*Manager# 23456*Nkosi.S.A.*Purchases*Assistant# 33445*Pillay.N.*HR*Assistant# 41231*Mokoetsi.M.M.*Marketing*Officer# : : 6 Reading from and writing to the same sequential file If lines in a sequential file need to be modified, the only way to do this is to read all the records into an array, manipulate the array elements, then write the array back to the file by recreating the file. Example 3 Let’s say we need to change either the job description or department of particular employees. Initial planning Step 1: Read the entire file into an array Step 2: For all employee data that needs to be changed Accept the employee number Check if it exists in the array Ask if job description must be changed Ed 3 BPP 4th pgs.indb 214 2012/11/26 2:45 PM SEQUENTIAL TEXT FILES • 215 Ask if department must be changed If job description must be changed Accept new job description Replace existing job description in the array for the employee data that needs to be changed If department must be changed Accept new department name Replace existing department in the array for the employee that needs to be changed Step 3: Create a new file from the array MainModule() ReadFileIntoArray() GetFields() UpdateRecords() CreateFileFromArray() UpdateArrayElement() Figure 2: Hierarchy chart for Example 3 Note that the code for the GetFields() sub procedure is not provided because detail string manipulation techniques are not covered in this book. Algorithm MainModule empIndex = 0 ~ Global variable ~ Step 1 call ReadFileIntoArray() ~ Step 2 display “FILE UPDATING: Enter the employee number, -1 to stop the process” enter empNumber do while empNumber <> -1 call UpdateRecords() loop ~ Step 3 call CreateFileFromArray() End Ed 3 BPP 4th pgs.indb 215 2012/11/26 2:45 PM 216 • BASIC PROGRAMMING PRINCIPLES Sub ReadFileIntoArray() if exists(employees.txt) then open input (employees.txt) EmployeeData = read(employees.txt) do until eof call GetFields(EmployeeData) ~ In this sub procedure string manipulation statements will be used to divide ~ the text line into empNum(empIndex), empName(empIndex), ~ empDept(empIndex) and empJub(empIndex) - all part of a global array. ~ The code for this procedure will not be provided empIndex = empIndex + 1 EmployeeData = read(employees.txt) loop ~ Subtract 1 from empIndex to indicate the exact length of the array empIndex = empIndex - 1 close (employees.txt) else display “The file does not exist” endif End Sub Sub UpdateRecords() ~ Search for corresponding array position ~ empIndex now contains the length of the array foundIndex = 0 do while foundIndex < empIndex and empNum(foundindex) <> empNumber foundIndex = foundIndex + 1 loop if foundIndex < empIndex then ~ emp number found in array ~ Call a sub procedure to handle the update process call updateArrayElement(foundIndex) else display “Invalid employee number” endif display “Enter the next employee number, -1 to stop the process” enter empNumber End Sub Sub UpdateArrayElement(valFIndex) display “Do you want to change the department for this employee? Y/N” enter changeDept display “Do you want to change the job description for this employee? Y/N” enter changeJob if changeDept = “Y” or changeDept = “y” then display “Provide the new department” enter empDept(valFIndex) endif if changeJob = “Y” or changeJob = “y” then display “Provide the new job description” enter empJob(valFIndex) endif End Sub Ed 3 BPP 4th pgs.indb 216 2012/11/26 2:45 PM SEQUENTIAL TEXT FILES • 217 Sub CreateFileFromArray() open outputCreate(employees.txt) newIndex = 0 do while newIndex < empIndex ~ Concatenate each output line from array elements Concatenate empNum(newIndex), “*”, empName(newIndex), “*”, empDept(newIndex), “*”, empJob(newIndex), “#” into EmployeeData write(employee.txt) from EmployeeData write new line loop close(employees.txt) End Sub Ed 3 BPP 4th pgs.indb 217 2012/11/26 2:45 PM 218 Chapter 11 Introduction to objectoriented programming Introduction The art of software development is one of the most difficult challenges undertaken by humankind. To complicate matters, computer hardware is constantly being improved in terms of speed and capacity. The more hardware enables us to do, the more we want it to do, so the more complex problems and software solutions become. It is because of this complexity that we are constantly looking for new strategies to simplify the software development process. Object orientation is such a strategy. The object-oriented approach is a different way of thinking about computation and problem solving. People often use this form of thinking to address problems in everyday life, which makes object orientation a natural approach to problem solving and easy to grasp. In the procedural approach to problem solving, we focused on processes and procedures. In the object-oriented, or OO, world, we focus on the data, its properties or attributes, and responsibilities, and how it interacts with other parts of the system. As a result, information is structured differently within the computer. A system developed using the object-oriented approach typically consists of a collection of objects that communicate with one another to solve a problem. You could say that object-oriented systems are defined using objects. One of the great advantages of the object-oriented approach is that it makes it easy to re-use objects. We’ll discuss re-use in more detail later in this chapter. Some programming languages that use object orientation are: • C++ • Delphi • Smalltalk • Java Ed 3 BPP 4th pgs.indb 218 2012/11/26 2:45 PM INTRODUCTION TO OBJECT-ORIENTED PROGRAMMING • 219 Outcomes When you have completed this chapter, you should be able to: • understand the basic concepts of object orientation, • understand the importance of encapsulation and information hiding, • distinguish the relationships between classes, and • follow the basic steps of object oriented design. 1 Concepts of object orientation Most of the concepts in procedural languages also feature in most OO languages. Sometimes an OO language may refer to a familiar concept in a different way, but it will still be the same concept. For example, variables, procedures, invocation of procedures and passing parameters to and from procedures are concepts common to both types of programming languages. Control structures like sequence, selection and iteration structures also feature in OO languages. However, in object orientation there is a whole new set of concepts, which we’ll introduce now. 1.1 Objects The real world is full of objects, such as motor cars, dogs, cities, people, customers, cash registers, and so on. We can also consider an object to be a container for data, with attributes, and the operations needed to manipulate that data. Objects function well as software modules because they can be created, used and maintained independently of one another. Figure 1 shows an object with properties, or attributes, and operations, or methods. (Data) Properties Operations Figure 1: An object with properties and operations Ed 3 BPP 4th pgs.indb 219 2012/11/26 2:45 PM 220 • BASIC PROGRAMMING PRINCIPLES For example, consider a motor car object. Typical attributes for such an object might be fuel consumption, speed, power and engine size. Possible operations might be stop, accelerate, change gears and reverse. Typically, the speed of the motor car is not modified directly, but will be modified by, for example, the accelerate operation. The accelerate operation, in turn, will modify the speed data, or value of the speed attribute. From this it is clear that we use operations primarily to change the data of an object. All the objects we’ve considered so far contain tangible things. However, there are other kinds of objects in the real world that aren’t tangible, such as roles, incidents and interactions. For example, roles can include lecturer, student and pilot; cycle race or political meeting would be an incident; and interview and conversation would be interactions. Table 1 shows examples of the characteristics of an object. Characteristics Examples Are abstractions, concepts or things Human being Human being knows his or her physical capabilities References to use for species Have clear boundaries Are found in the problem domain Know things about themselves Interact with other objects Height, weight Interact with other humans and things Table 1: Characteristics of the object human being 1.2 Properties Objects often need to hold information about themselves. Let’s use an object called Bob as an example. Bob needs to know his name, age, gender, and so on. We refer to these items as the object’s properties or attributes. Each of these properties normally has a scope, a type and a value, just as variables in the procedural approach do. The scope of an attribute can be private or public. An attribute that has a private scope is visible only inside the object it applies to. This means that the private attributes of an object are not visible to other objects within the same system. A property that has a public scope is visible within the object it applies to as well as to other objects within the same system. Ed 3 BPP 4th pgs.indb 220 2012/11/26 2:45 PM INTRODUCTION TO OBJECT-ORIENTED PROGRAMMING • 221 Table 2 shows some of the properties, both private and public, of the object called Bob. Property Name Scope Type Value Name Public String Bob Age Private Integer 23 Gender Private String Male Weight Private Integer 82 Height Private Real 1.86 Table 2: Properties of Bob Every property, like a variable, has a type. Property types are normally simple types, such as string, integer, real, and so on. Note that a property can also be another object. We refer to the state of an object as the values of all the properties of that object at a specific time. For example, in Table 2 the Value column reflects the state of the object called Bob. 1.3 Operations Objects communicate with one another by sending messages. Consider the objects car and driver. In order for the driver to use the car, the driver object needs to send the message to the car object to start and drive the car. This requires the car object to be able to receive the message. We refer to these messages as the operations or methods of an object. These messages are defined in the receiving object. Operations are similar to the procedures and functions that we used in procedural solutions. We also refer to the messages that an object can receive as the services provided by one object to another. An operation in an object has a unique signature consisting of its name, optional parameters and optional return values. This concept is similar in procedures and functions. Similar to properties, operations also have scope, which can be private or public. Operations with private scope are visible only to the object in which the operation is defined, and operations with public scope are also visible to other objects within the system. The collection of operations in an object is sometimes referred to as the behaviour of the object. The driver object only has access to all the public attributes and methods of the car object. Some of the attributes of the car object are hidden to the driver, such as engine and the gearbox. Ed 3 BPP 4th pgs.indb 221 2012/11/26 2:45 PM 222 • BASIC PROGRAMMING PRINCIPLES 1.4 Classes An object is an instance of a class. We can create one or more objects from a single class. This makes a class a sort of template or pattern. A class defines the basic characteristics and behaviour – properties (attributes) and operations (methods) – that are available to all objects in that class. The action of creating an object from a class is referred to as the instantiation of an object. When an object is instantiated, it receives all the attributes and operations of its class. If there is more than one object belonging to the same class, their states may be different. This means that, except for sharing a similar structure, objects of the same class are completely independent. Consider a class called Car and two instances of this class, as shown in Table 3. Class: Car Attribute Name Type Type String Make String Model String Colour String Object: Car Object: Car Attribute Name Type Attribute Name Type Type Passenger Type Passenger Make Audi Make VW Model A4 Model Polo Colour Blue Colour White Table 3: The class called Car, and two instances of the class You can see that the two instances of the class Car have the same attributes, but different values. 2 Encapsulation and information hiding In the object-oriented approach, classes, and therefore also objects of that class, are similar to black boxes with a clearly defined interface. This interface is the only mechanism that other objects can use to communicate with the object. We say that inside a class, behind the interface, the data and the implementation of the operations are encapsulated or enclosed in a capsule. Ed 3 BPP 4th pgs.indb 222 2012/11/26 2:45 PM INTRODUCTION TO OBJECT-ORIENTED PROGRAMMING • 223 This makes the internal workings of a class invisible to all other classes. This is a good technique, since there is no need for other classes to know the internal structure of this class, in other words, how it represents its data and how it performs its operations. We call this encapsulation information hiding. Figure 2 shows an object receiving a message from another object via its interface: Interface Public attributes and operations Message from another object Implementation Private attributes and operations Figure 2: An object receives a message from another object We hide information within a class by making some properties and operations private. We make only the properties and operations that can be manipulated by other classes public. The collection of these public attributes and operations forms the interface of a class. Because other parts of the system can interact with an object only through its interface, the other parts of a system cannot accidentally change private property values in an object. This means that information hiding makes objects more robust. By hiding information we can change the implementation of a class without affecting other classes that rely on it. We achieve this by not changing the interface on which other classes rely. The opposite is also true. Changes to other parts of a system will not affect the internal workings of this class. As a result, information hiding ensures the independence of classes and objects. Because information hiding makes objects more robust and independent, they are easily re-used in the object-oriented approach. Once we have defined a class, we can re-use it, or instantiate it, in other parts of a system, and even in other systems. The independence of classes also reduces the impact when we have to make corrections and changes to a system. As a result, the cost of corrections and changes tends to be lower. Consider a class called Sorter, which sorts a list of integers. The interface of the Sorter class consists of one operation named Sort. Sort accepts a list of integers as a parameter. Ed 3 BPP 4th pgs.indb 223 2012/11/26 2:45 PM 224 • BASIC PROGRAMMING PRINCIPLES Class: Sorter Attributes Operations Public Sort (pIntegerList : Array of integers) Table 4: The class called Sorter Now suppose the Sort operation (method) uses the bubble sort algorithm to sort the list of integers. This doesn’t work well, so the programmer has to change it to use the quick sort algorithm. To make the change, the programmer only has to re-write the Sort operation. The interface stays exactly the same, so the classes whose objects use objects in the Sorter class don’t need to be changed. 3 Design notations Three people who have done a lot of work in the OO design notation area are James Rumbaugh, Grady Booch and Ivar Jacobson. At first, each of them had their own method of representing an OO design. Not only were the representations different, the underlying theories of object behaviour and interaction were also different. A couple of years ago, Rumbaugh, Booch and Jacobson conceived of the Unified Modelling Language, or UML. UML enables the designer to represent classes, with their attributes and operations, as well as the relationships between classes. 4 Relationships between classes The relationships between classes fall into three categories: • association, • aggregation, and • inheritance. Let’s consider each of these categories. Ed 3 BPP 4th pgs.indb 224 2012/11/26 2:45 PM INTRODUCTION TO OBJECT-ORIENTED PROGRAMMING • 225 4.1 Association We’ve already said that objects communicate with one another in that one object uses the services of another. This implies some form of dependency between objects and, consequently, the classes to which these objects belong. An association expresses the relationship between two classes. Note that association is found at the class level. We can identify associations during the analysis phases of the problem by looking for verbs in source documents. For example, if we read, “An Employee works for the company”, we can deduce that there is an association between the employee and company classes. There are different kinds of associations between classes. A relationship can be one to one, one to many or many to many. Consider the classes Parent and Child. A parent might have more than one child and a child can have two parents. Therefore the association between the Parent and Child classes will be many to many, or more specifically, two to many. Figure 3 shows an example of an association. Employee Uses Company Figure 3: The association between Employee and Company classes 4.2 Aggregation An aggregation is a specific form of association, and is not an independent relationship. In an aggregation, one class is part of another class. This type of relationship is often referred to as a “part-of ” relationship. Note that the class that is a part of another class can exist only as part of the container class, so it cannot exist independently. Note also that, like association, aggregation works at the class level not the object level. Consider a car, which consists of a body, wheels, windows, and so on. There are thus relationships between the motor car and its components. More specifically, an aggregation relationship exists between the car class and the body, wheel and window classes. Figure 4 shows an example of an aggregation. Ed 3 BPP 4th pgs.indb 225 2012/11/26 2:45 PM 226 • BASIC PROGRAMMING PRINCIPLES car body wheel Figure 4: The aggregation relationship between car class and body and wheel classes 4.3 Inheritance Inheritance is the third type of relationship between classes. Inheritance between classes takes the form of a tree structure linking a super class to its subclasses. All subclasses inherit the characteristics of their associated super class. For example, consider the classes, vehicle, motorbike, truck, and car. A motorbike, truck and motor car are all different types of vehicles. So we can have a class called vehicle and have the classes motorbike, truck and car as subclasses of the vehicle class. We say that a super class generalises its subclasses. A subclass is a specialisation of the super class. We can extract behaviour common to different classes into a common super class. For example, if the three subclasses, motorbike, truck and car, all have a property number of wheels, we can remove it from the subclasses and add it to the super class, vehicle. Figure 5 will help you to understand inheritance, where you can see that the motorbike, truck and car classes inherit all the attributes from the vehicle class. However, motorbike has a unique attribute, stroke. The same applies to the operations: truck has two special operations, load() and unload(). Ed 3 BPP 4th pgs.indb 226 2012/11/26 2:45 PM INTRODUCTION TO OBJECT-ORIENTED PROGRAMMING • 227 Inheritance is a type of relationship that we often refer to as a “kind-of ” relationship. It is another aspect of the object-oriented approach that allows us to improve re-use. In the vehicle example, if we want to create a bus class, we can create it as another subclass of the vehicle class. This means that all the properties and operations defined in the vehicle class are automatically defined in the bus class. All that remains is to define the properties and operations specific to the bus class. Vehicle Fuel_consumption Speed Power Engine_Size Number_of_Wheels Properties Stop() Accelerate() Change gears() Operations Motorbike Stroke Truck Max_Load Car Max_Passengers Load() Unload() Figure 5: Inheritance between a super class and subclasses It is also possible for a subclass to inherit from more than one super class. This is referred to as multiple inheritance. Not all programming languages support multiple inheritance. When you use the object-oriented approach to solve a problem, use inheritance, and especially multiple inheritance, sparingly, as the relationships can become quite complex. 5 More concepts This chapter is a basic introduction to OO, but you should know that there are some advanced concepts that we have not covered here. These include abstract classes, polymorphism, overriding and overloading. Ed 3 BPP 4th pgs.indb 227 2012/11/26 2:45 PM 228 • BASIC PROGRAMMING PRINCIPLES 6 Designing an object-oriented solution The object-oriented approach is about far more than just a couple of new programming structures and techniques. As we mentioned before, it’s a whole new way of thinking. This means that objects are not only part of the programming of a system but are used right from the start during the analysis and design phases. Here are some basic steps to follow when solving a problem using the OO approach: 1. Read the problem statement and identify classes. 2. Look for properties and methods that apply to the classes identified. 3. Determine the relationship and interaction between classes. 4. Design the algorithms for the methods using structured design. 5. Develop the main algorithm. You can see that the whole approach to designing a system is different. Now try some problems. Exercises 1. Explain the difference between a class and an object. 2. List some of the advantages of object orientation. 3. Assume we have a class called dog. Name three possible attributes and three possible operations for this class. 4. Assume we have a class called bicycle. Name four possible attributes and three possible operations for this class. 5. A retail company needs an ordering system to keep a record of orders per customer. For each customer, there is a delivery address, which has to be maintained. Each order consists of order line items. For an order line item, the company needs the item code and quantity that the customer ordered. Identify classes for this problem. Define attributes and operations for each of the classes you identify. 6. A soccer club requires a system that can be used to keep track of its teams and the players in each team. Currently the club has four teams, A, B, C and D. The club needs basic information on each player, such as first name, surname, age, date of birth, weight, height and the position in which they play. The club needs to be able to change a player’s position, add a player to or remove a player from a team, and assign a team to a match. For each team, the club wants to know the number of games played and the number of games won. In addition, the club wants to keep track of matches, where they are played, which teams play which matches and when they play them. Identify classes for this problem. Define properties and operations for each of the classes you identified. Then identify relationships between the classes. Ed 3 BPP 4th pgs.indb 228 2012/11/26 2:45 PM 229 Appendix A Tools for planning programs Introduction Pseudocode has been discussed and used throughout this book when planning programs. There are, however, different methods that can be used when representing an algorithm. We’ll briefly discuss the use of flowcharts and Nassi-Shneiderman methods. First we’ll write the algorithms for solving two problems in pseudocode, we’ll repeat the process using flowcharts, followed by a Nassi-Shneiderman diagram. 1 Pseudocode Example 1 Write an algorithm to enter two numbers that are not equal and display the bigger number. FindTheBigger display “Enter a number” enter num1 display “Enter the next number – not equal to the first number” enter num2 if num1 > num2 then display “num1 is bigger than num2” else display “num2 is bigger than num1” endif end Ed 3 BPP 4th pgs.indb 229 2012/11/26 2:45 PM 230 • BASIC PROGRAMMING PRINCIPLES Example 2 Write an algorithm to enter integers between 5 and 20 and accumulate their sum until it exceeds 200. Display how many integers were entered. CountTheNumber sum = 0 count = 0 do while sum <= 200 display “Enter an integer between 5 and 20” enter num sum = sum + num count = count + 1 loop display “The number of integers is “, count end 2 Flowcharts A flowchart is a schematic representation of an algorithm. It illustrates the steps in a process and it consists of a number of specific diagrams joined in a specific manner. It graphically represents the program logic by using a series of standard geometric symbols and connecting lines. Different flowchart symbols are used for different aspects of the process. Flowchart symbols The following symbols are used: Symbol Description Terminal This symbol indicates the starting or stopping point in the logic. Every flowchart should begin and end with this symbol. Input/Output This symbol represents an input or output process in the algorithm, such as reading, writing and displaying. Processing This symbol is used for types of processing, such as arithmetic statements and assigning values. Ed 3 BPP 4th pgs.indb 230 2012/11/26 2:45 PM T OOLS FOR PLANNING PROGRAMS • 231 Decision This symbol is used to compare variables/values that may change the flow of the logic. It may cause the logic to branch in another direction. Module This symbol represents another module that must be processed. This module will have its own flowchart. Connector The connector joins two parts of the flowchart, e.g. from one page to the next page. Connecting lines These lines connect flowchart symbols with one another. Table 1: Flowchart symbols Ed 3 BPP 4th pgs.indb 231 2012/11/26 2:45 PM 232 • BASIC PROGRAMMING PRINCIPLES Example 1 Draw a flowchart to enter two numbers that are not equal, and display the bigger number. Begin Ask for num1 Enter num1 Ask for num2 Enter num2 False num1 > num2? “num2 is bigger than num1” True “num1 is bigger than num2” End Figure 1: Flowchart for Example 1 Example 2 Draw a flowchart to enter integers between 5 and 20 and accumulate their sum until it exceeds 200. Display how many were entered. Ed 3 BPP 4th pgs.indb 232 2012/11/26 2:45 PM T OOLS FOR PLANNING PROGRAMS • 233 Begin sum = 0 count = 0 Sum <= 200 False True Ask for num Enter num sum=sum + num count=count+1 “The number of integers is” count End Figure 2: Flowchart for Example 2 3 Nassi-Shneiderman diagrams A Nassi-Shneiderman diagram (or NSD) is a graphical representation for structured programming. Developed in 1972 by Isaac Nassi and Ben Shneiderman, these diagrams are also called structograms, because they show a program’s structures. Everything you can represent with a Nassi-Shneiderman diagram you can also represent with a flowchart. Ed 3 BPP 4th pgs.indb 233 2012/11/26 2:45 PM 234 • BASIC PROGRAMMING PRINCIPLES Symbols used to construct a Nassi-Shneiderman diagram Process block A process block represents the simplest of steps. When a process block is encountered, the statements within the block are processed. When the statements have been processed, processing proceeds to the next block. Decision block This block enables the programmer to include a condition in the diagram, which will produce different branches or paths for true and false processing. Iteration block An iteration block allows the programmer to repeat a block of instructions a number of times while a specific condition is true or until a specific condition is true. Now we’ll draw Nassi-Shneiderman diagrams to solve our two problems: Example 1 Draw a Nassi-Shneiderman diagram to enter two numbers that are not equal, and display the bigger number. FindTheBigger display “Enter a number” enter num1 display “Enter the next number – not equal to the first number” enter num2 num1 > num2? True False display “num2 is bigger than num1” display “num1 is bigger than num2” end Figure 3: Nassi-Shneiderman diagram for Example 1 Ed 3 BPP 4th pgs.indb 234 2012/11/26 2:45 PM T OOLS FOR PLANNING PROGRAMS • 235 Example 2 Draw a Nassi-Shneiderman diagram to enter integers between 5 and 20 and accumulate their sum until it exceeds 200. Display how many were entered. CountTheNumber sum = 0 count = 0 sum < = 200 display “Enter an integer between 5 and 20” enter num sum = sum + num count = count + 1 display “The number of integers is”, count end Figure 4: Nassi-Shneiderman diagram for Example 2 Ed 3 BPP 4th pgs.indb 235 2012/11/26 2:45 PM 236 Appendix B Error handling and debugging techniques Introduction Beginners aren’t expected to write flawless programs! The best way to learn to program without errors is to practise, practise and, once more, practise. It is said that practice makes perfect! There are, however, techniques that can assist programmers to find errors in the logic. Outcomes When you have studied this appendix, you should be able to: • distinguish between different types of errors and • use a trace table to test the correctness of a program logic before the program is coded in a programming language 1 Types of errors 1.1 Syntax errors At the moment you’re reading an English sentence, in which the rules of the English language have been followed. If you read the sentence “The boook have many pages.”, you would immediately see two syntax errors: the word “book” was incorrectly spelt, and the word “have” should have been “has”. These errors are syntax errors. They violate the rules of English grammar. Ed 3 BPP 4th pgs.indb 236 2012/11/26 2:45 PM ERROR HANDLING AND DEBUGGING TECHNIQUES • 237 Computer programs are written in programming languages, each of which has specific rules that must be taken into consideration. Even though we’re only doing generic work by planning programs, we also have to adhere to specific rules, for instance spelling the name of a variable exactly the same throughout an algorithm. 1.2 Logical errors Logical errors can sometimes be very difficult to correct. In everyday life it is not possible to leave your house before you’re dressed. This is not a logical way to behave! Here’s a very simple example of a logical error in an algorithm. This algorithm contains an instruction that asks the computer to add a variable called number to another variable called total. But the programmer has forgotten to ensure that the variable number has a valid value! The instructions could have been the following: total = total + number enter number These two instructions are in the wrong order! 1.3 Data errors Data errors are usually found in the input data. We have repeatedly tested input data in our examples to ensure that valid values have been entered. For instance, does the variable contain a numeric value, did the user enter a valid character, and so on. Error messages were displayed whenever incorrect data was entered, and often the user was asked to re-enter the data until valid data was entered. 2 Trace tables A trace table can be used to test the correctness of a program. There may be only a small error that isn’t obvious. However, when a program is carefully checked, the chances are very good that the output will be correct. Trace tables were explained in earlier chapters, but are repeated here. Let’s use an example to illustrate this concept. Write an algorithm to calculate the product of two integers, the variables num1 and num2. Store the answer in the variable product. Ed 3 BPP 4th pgs.indb 237 2012/11/26 2:45 PM 238 • BASIC PROGRAMMING PRINCIPLES Algorithm CalcProduct ~ This program calculates the product of two integers display “Enter the first integer” enter num1 display “Enter the second integer” enter num2 product = num1 * num2 display “The product is “, product end To create a trace table we need an instruction column, a column for each of the variables and a column for the output (which will be shown on the screen). The instructions will be written in the first column in the same sequence as in the program. To test the program, we’ll use num1 = 4 and num2 = 5. Instruction num1 num2 product display enter 4 Enter the second integer display enter Output Enter the first integer 5 calculate display 20 The product is 20 Table 1: The trace table for CalcProduct This method is also called desk checking, because it is done before the program is written in programming language. Let’s do a second example that contains selection statements, to show how these types of statements should be included. The programmer must plan a program to sell tickets for a show to customers. The price of a ticket is R30, but if a customer buys from 10 to 20 tickets, the price per ticket is only R28. The price for more than 20 tickets is R25 per ticket. The customer must enter the number of tickets he or she wants, then the program must display the amount due. We need to include another column in the trace table to show the outcome of the if statement. Ed 3 BPP 4th pgs.indb 238 2012/11/26 2:45 PM ERROR HANDLING AND DEBUGGING TECHNIQUES • 239 Algorithm BuyTickets display “How many tickets do you want to buy? “ enter noTickets if noTickets < 10 then amtDue = noTickets * 30 else if noTickets < 20 then amtDue = noTickets * 28 else amtDue = noTickets * 25 endif endif display “The amount due for “, noTickets, “ tickets is R”, amtDue end Now we’re going to test this algorithm using 20 as the number of tickets. Instruction noTickets amtDue Outcome of If How many tickets do you want to buy? display enter 20 if False if False calculate Output 500 display The amount due for 20 tickets is R500 Table 2: The trace table for BuyTickets This answer is incorrect! When a person buys 20 tickets, the price is R28 per ticket and then the amount due must be R560. When we study the if statements, we notice that the second if statement should be: if noTickets <= 20 instead of if noTickets < 20. Ed 3 BPP 4th pgs.indb 239 2012/11/26 2:45 PM 240 • BASIC PROGRAMMING PRINCIPLES The correct algorithm will now be: BuyTickets display “How many tickets do you want to buy? “ enter noTickets if noTickets < 10 then amtDue = noTickets * 30 else if noTickets <= 20 then amtDue = noTickets * 28 else amtDue = noTickets * 25 endif endif display “The amount due for “, noTickets, “ tickets is R”, amtDue end You can redo the trace table using other values to test the algorithm to ensure that the program will produce the correct answers. It is quite important to test your algorithm in this way for correctness. Exercises Write the algorithms and then create trace tables for each of the problems to test the algorithm for correctness. 1. Enter the temperature in degrees Fahrenheit (F) and convert it to degrees Celsius (C) using the following formula: 9C = 5(F – 32) Display the temperature in Fahrenheit and Celsius. Test the algorithm using 32 °F and 212 °F. The answers should be 0 °C and 100 °C. 2. Enter two numbers. If the numbers are equal, increase the sum of the two numbers by 20%, but if the first number is less than the second number, calculate the difference between the two numbers. If the first number is greater than the second number, decrease the product of the two numbers by 25%. In each case, store the answer in a variable called answer. Display the value of answer on the screen. Test the algorithm using the numbers 12 and 5, 4 and 8, and 7 and 7. In each case, calculate the answers beforehand to ensure that your algorithm produces the correct answers. Ed 3 BPP 4th pgs.indb 240 2012/11/26 2:45 PM GLOSSARY • 241 Glossary Accumulation Accumulation is used in problem solving to calculate a total or an average. When you add 1 to the accumulator during every execution of the loop, the accumulator is called a counter. Accumulator A variable that acts as a register to store the results of an accumulation process. Aggregation In terms of the relationships between object classes, aggregation occurs when one class is part of another class. Algorithm A set of instructions written in a specific sequence to solve a problem. Argument list The list of variables in the call statement that correspond to the list of parameters in the function or subprocedure. Array Variables of the same data type grouped under a single name. Array element A single variable in an array that can contain a value at a given time. Association An expression of the relationship between two object classes. Boolean variable A variable that can take only one value, true or false. Bubble sort A sorting method in which elements in an array are compared to each other in pairs; when an element is not in sequence, it trades places with the other element until all elements are sorted in the required sequence. Ed 3 BPP 4th pgs.indb 241 Character A single number, letter or special character; any one stroke that can be typed on a keyboard. Character variable A variable that contains a single letter, number or special character, Compound If statement A statement used to test more than one condition before the result can be evaluated to be either true or false. Class A construct used as a template to create objects that have predefined properties. Constant A fixed value that cannot change throughout the entire program; may be any data type. Data A collection of facts, such as values, measurements, or readings. Database A number of related files or tables. Data errors Incorrect data that causes a program to cease processing or provide incorrect results. Data processing A sequence of operations performed on data to generate information. Data validation A test to check that input data can be used by the program in its current format. Data warehouse The largest structure used to collect and store data for processing, analysis and reporting; may consist of several databases. Encapsulation Also known as information hiding, a technique that makes the internal workings of a class invisible to all other classes. 2012/11/26 2:45 PM 242 • BASIC PROGRAMMING PRINCIPLES End-of-file character A character used to signal that the file doesn’t contain any data that has not been read. Field Also known as a data item, a field is a number of characters or a name. File A collection of related records organised and stored in a specific way. File pointer Indicates the position in the file where text must be read or written. For loop Also known as a fixed count loop or an automatic count loop, a statement used when the number of iterations of a set of instructions is known. For-next loop Used to repeat a section of code a number of times with a control variable that has a differing value each time through the loop. Function call A statement that activates or calls a function from another part of the algorithm. Function header The first line of a function, which contains the word function, a function name and a possible list of parameters. Function procedure Instructions that perform a specific task that is often repeated are coded separately so that they can be reused whenever required. Hierarchy chart A diagram that provides a global view of the modules in a program, showing how they link together to function as a complete program. If statement An instruction that controls program flow by allowing a section of code to execute only when a specified condition is true. If-then-else statement An If statement that specifies two actions: one action to take when the specified condition is true and another action to take when the condition is not true. Index Also known as a subscript, an indicator of the position of an element in an array. Ed 3 BPP 4th pgs.indb 242 Information The result of data processing. Inheritance As a relationship between object classes, the passing of characteristics from super classes to sub classes. Input The data entered into a system for processing into output. Input file Stored data that can be specified as input to a program when read from the file during processing. Integer variable A variable that contains a whole number that has no fractional or decimal part; the number can be positive, negative or zero. Intermediate variables Variables used in a solution to help with the calculations. IPO chart An Input/Processing/Output (IPO) chart, which enables programmers to do comprehensive planning; the Input and Output columns contain only variable names, and the Processing column provides an overview of the steps. Iteration Also known as looping, a type of programming used when sets of instructions are repeated a number of times. Logical error An error resulting from faulty reasoning; a bug in a program that causes it to terminate abnormally or to produce incorrect output. Logical operator An operator that joins two Boolean expressions to yield a Boolean result, either true or false. Modularisation The division of a program into smaller pieces called modules to improve flexibility and shorten development time. Nested If statement One or more If statements contained within another If statement. Nested loop A loop contained within another loop. 2012/11/26 2:45 PM GLOSSARY New line character The new line character indicates the end of a record in a file. Object A container for data, with attributes, and the operations needed to manipulate that data. One-dimensional array The simplest form of an array, consisting of one column of elements. Operator A symbol used in an expression or equation, which tells the computer how to process the data. Output The result of processing input data. Output file A file used by a program to store new data by writing to the file. Parallel arrays Two or more arrays that are related to one another and have the same number of elements. Parameter Data in the form of variables or values that is sent to a function or a sub procedure so that it can perform the task it has to do.When dealing with a subprocedure, a parameter may also contain the address in memory to obtain and manipulate a value. Post-test loop A Do-while loop in which the statements in the body of the loop are processed at least once, and the condition is tested only after the statements in the body of the loop have been processed. Pretest loop A Do-until loop in which the condition is tested before the statements in the body of loop are processed. Private scope An object property that is visible only inside the object it applies to. Properties The attributes of an object, each of which has a scope, a type and a value. Pseudocode The way in which algorithm steps are written so that they can be followed easily and understood. Ed 3 BPP 4th pgs.indb 243 • 243 Public scope A object property that visible within the object it applies to as well as to other objects within the same system. Real number A variable that contains a positive or negative number with a decimal part. Record A group of related fields. Reference parameter A parameter that is passed by reference to a location in memory. Relational operator The operator used in a comparison between two values, the outcome of which is always a Boolean value. Select case Structures used to perform processing steps depending on the outcome of a tested condition, in which the same variable is tested for many different values. Selection sort An array sort method that selects the smallest value from the array and exchanges it with the first element in the array, after which the second smallest element is selected from the array and exchanged with the second element; a process that continues until the entire array is in a pre-specified order. Sentinel A value that is not a legitimate data value and is used to terminate a loop. Sequential access file Also known as a text file, a file in which the characters and fields are stored in sequential order, one record after another. String A variable consisting of two or more alphanumeric characters. Subprocedure A separate procedure that consists of lines of code to solve a specific part of a larger problem. Subprocedure call A statement that activates or calls a subprocedure. 2012/11/26 2:45 PM 244 • BASIC PROGRAMMING PRINCIPLES Subprocedure header The first line of a subprocedure, which contains the word subprocedure, the subprocedure name and a possible list of parameters. Syntax error An error in the grammar of a statement. Table A structure made up of rows and columns, in which each row represents the data of one entity and each column contains a category of data. Trace table Also known as desk checking or a walkthrough table, a method of testing the logic of an algorithm normally done prior to writing it in a programming language. Two-dimensional array An array consisting of a number of rows and a number of columns. Value parameter A copy of the value is passed to the function or subprocedure as a parameter. Bibliography Erasmus HG, Fourie M & Pretorius CM 2002. Basic programming principles. Sandton: Heinemann. Farrell J 2002. Programming logic and design introductory. (2nd edn) Boston: Thomson Course Technology. Farrell J 2007. Programming logic and design comprehensive. (4th edn) Boston: Thomson Course Technology. Farrell ME 2005. Learning computer programming: It’s not about languages. Hingham: Thomson Delmar Learning. Robertson LA 2004. Simple program design. (4th edn) Boston: Thomson Course Technology. Spranckle M 1992. Problem solving and programming concepts. Hillsdale: Prentice Hall International. Vickers, P 2008. How to think like a programmer (problem solving for the bewildered). London: Cengage Learning. Ed 3 BPP 4th pgs.indb 244 2012/11/26 2:45 PM INDEX • 245 Index Entries are listed in letter-by-letter alphabetical order. A accumulator 115 aggregation 225–226 algorithm 19, 20 calculations 46–48 examples 29 phases 23 steps 33–36, 39 testing 36–45 writing 29 alternative problem solutions 25 analysis, problem 24–25 argument list 184 arithmetic equations 10–11, 13 arithmetic expressions 9–10 arithmetic operators 11–13, 53 array name 154 array properties 154–155 arrays 153 assignment statement 13–14, 184 assignment symbol 8 association 225 B Boolean value 6, 53, 54 brackets 12–14 bubble sort method 177–178 bubble sort method example 178–179 C calculations, algorithm 46–48 CalcSum 185 calling a function 187 calling a function examples 187–190 calling statement 185 call function 184–185 character 2–3 character variable 6 class 222 Ed 3 BPP 4th pgs.indb 245 closing, sequential access files 205–207 compilers 4 compound If statements 71–77 compound If statement examples 71–77 constant examples 14–15 constants 8, 13 counter 115 D data errors 237 hierarchy 2–4 item 3 processing 23–24 processing examples 23–24 type 154 validation 77 warehouse 4 databases 3–4 date 2 date structures 2 debugging logical errors 237 design notations 224 desk checking 26, 36 display statement 185 Do loop 133–136 Do-loop-until statement 135 Do-until loop examples 142–144 Do-while loop 134 Do-while loop examples 136–142 Do-while statement 134 E element 154 encapsulation 222–223 equals sign meanings 11 errors, data 237 evaluate algorithm 26 examples, algorithm 29 examples of names, types and values 7 2012/11/26 2:45 PM 246 • BASIC PROGRAMMING PRINCIPLES F false value 6 fields 2, 3 file pointer 206 files 2, 3 fixed value 8, 14 flowcharts 29, 145–146, 230–233 For-next-loop 110–111 For-next-loop examples 111–125 for statements, nested 128–129 function call 184–185 header 185–186 name 185–186 procedures 181, 184–192 function, no parameters 199–204 H header, data 184–185 hierarchy chart 182 hierarchy data 2–4 I If statement 52, 57–65, 58, 158 If statement examples 62–65 If statement testing 59–61 If statement, nested 80–86 If statement, nested in programs, examples 87–94 If statement, nested examples 82–86 If-then-else statement 52, 66 If-then-else statement examples 67–70 implementation 223 independent subprocedure examples 194–199 index 154 information 23 information hiding 222–223 inheritance 226–227 initial value 8 input 23, 205 Input/Processing/Output (IPO) chart 32–36, 37 integer variables 5–6, 15 item, data 3 interface 223 Intermediate variables 60 iteration 31, 133–136 Ed 3 BPP 4th pgs.indb 246 K key words in arithmetic expressions 9–10 L list all steps 25–26 logical errors, debugging 237 logical operator 54 logical operator examples 54–57 logical variable 6 loop, nested 128–129 loop, nested examples 129–132 M main module 182 methods 221 modularisation 182 modules 181 multiple inheritance 227 N name, function 185–186 naming a variable 4–5 naming variable rules 4 Nassi-Shneidermann diagrams (NSD) 29, 233–235 nested for statements 128–129 If statements 80–86 If statements in programs, examples 87–94 If statement examples 82–86 loop 128–129 loop examples 129–132 non-numeric variables 6 non-zero value 6 no parameters function 199–204 no parameters subprocedure 199–204 numeric variables 5–6 O object characteristics 220 object-oriented approach 218 object-oriented solution design 228 objects 219 one-dimensional array 154, 156–157 one-dimensional array examples 157–162, 171 OO language 219 opening sequential access files 206–207 operands 11, 13 operations, object 219, 221–222 operator precedence 55, 56 2012/11/26 2:45 PM INDEX operators 11–13 order of precedence 13 output 23 output files 206 relationships 224–228 return statement 185 rows 3 rules of precedence 11–13 P paired arrays 169 parallel arrays 169 parallel arrays example 169 parameters 183–184 parentheses 12–14, 57 phases, algorithm 23 post-test loop 135 post-test loop flowcharts 146 pre-test loop 134 pre-test loop flowcharts 144–145 private attributes 223 private scope 220 problem analysis 24–25 solving 18–19 solving steps 18–19 statement 19 statement examples 19–22 problem-solving approach 24–30 procedures, function 181, 184–192 processing 23 processing, data 23–24 processing examples, data 23–24 program planning 31–36 program planning examples 31–48 programmers 4 properties, object 219, 220–221 pseudocode 26–29, 53, 229–230 pseudocode example 26–28 public attributes 223 public scope 220 S same sequential access files 214–217 select case structure 98–99 select case structure examples 100–103 selection 31 selection control structure 52 selection sort method 179 selection sort method example 180 sentinel 135 sequence 31 sequential access files 205–207 closing 207 opening 206–207 reading 208–211 same 214–217 writing 212–214 signature 221 solving, problem 18–19 solving steps, problem 18–19 sorting arrays 176–180 statement, problem 19 statement examples, problem 19–22 steps, algorithm 33–36, 39 string variable 6 sub class 227 sub modules 182 subprocedure call 193 subprocedure header 193–194 subprocedure, no parameters 199–204 subprocedures 181, 183, 193–204 subscript 154 super class 227 syntax errors 236–237 Q quotes, use of 6 R reading sequential access files 208–211 real number variables 6, 15 records 2, 3 reference parameters 183–184 referencing 155 relational comparisons 53 relational operations 53–54 relational operators 53 Ed 3 BPP 4th pgs.indb 247 • 247 T tables 2, 3 terminating execution of a loop 135–136 testing, algorithm 36–45 text files 205 trace tables 36, 237–240 true value 6 two-dimensional arrays 171–172 type, data 154 types and values, examples of names 7 2012/11/26 2:45 PM 248 • BASIC PROGRAMMING PRINCIPLES U understanding the problem 19–22 using a function 187 using a function examples 187–190 using a subprocedure 194–199 V validation, data 77 value parameters 183 values 4 Ed 3 BPP 4th pgs.indb 248 variable examples 14–15 variable expressions 8 variable value 6–7 variables 4–8 W walkthrough table 36 warehouse, data 4 writing, algorithm 29 writing sequential access files 212–214 2012/11/26 2:45 PM