Steps in Program Development • • • • • • • Define the problem Outline the solution Develop the outline into an algorithm Test the algorithm for correctness Code the algorithm into a programming language Run the program on computer Document and maintain the program Structured programming • • • • • Top-down development Modular design Structure theorem Algorithms Pseudocode Top-down development • Consider the problem as a whole and break it down into component parts. • Each part becomes a problem to be solved in its own right. • Using stepwise refinement, the problem is repeatedly broken down into smaller parts until it becomes manageable. Modular design • A module is – a step or sub-task resulting from stepwise refinement. – a problem solution which has a well-defined set of inputs, processing and outputs. • Algorithms are written at module level. The Structure Theorem • Only three constructs should ever be used in programming:–1 –2 –3 Sequence Selection Iteration • i.e. no unstructured GOTOs or STOPs. Algorithm Definition • Lists the steps involved in accomplishing a task which must – be lucid, precise and unambiguous – give the correct solution in all cases – eventually end • Algorithms can be written in pseudocode, or can be expressed by means of a flowchart • Other specification techniques include JSD or Nassi-Schneiderman diagram. Pseudocode • Statements are written in simple English. • Each instruction is written on a separate line. • Keywords and indentation are used to signify particular control structures. • Each set of instructions is written from top to bottom with only 1 entry and 1 exit. • Groups of statements may be formed into modules and that group can be given a name. Stored program concept • • • • Data area Procedural area Input input Output Data Instructions Output Program Stored program concept • Data area is specific and rigorously defined • Procedural area can: – Take data into the data area from outside – Put information out from the data area – Manipulate the data in the data area Writing pseudocode • 6 basic operations:– – – – – – 1. Receive a piece of data 2. Put out data 3. Perform arithmetic 4. Assign a value to a piece of data 5. Select a group of actions 6. Repeat a group of actions Receive data • Takes data in from outside the algorithm • Sample informal keywords used – READ student name … – GET system date ... – INPUT number1, number2 Put out data • Sends data out of the algorithm – PRINT student number – WRITE 'message’ – OUTPUT name, address, staff number Perform arithmetic • with specific pieces of data, where the operands and destination are explicitly specified. • An operator • An operand • Source and destination Operations in arithmetic • • • • • • + Add - Subtract * Multiply / Divide () Precedence ** To the power of Assign a value to a piece of data • Initialise TOTAL to 0 … • Set COUNT to 0 • COUNT = COUNT + 1 ... Consider a problem • Take three numbers into the program, add them together and output the result Defining the problem • • • • Determine INPUT Determine OUTPUT Determine processing This can be done using an IPO chart (Input, Processing, Output): INPUT Number1 Number2 Number3 PROCESSING Read 3 numbers Add numbers together Print total OUTPUT Total Designing a solution algorithm Draw a rough sketch of the steps required to solve the problem. Add-Three-Numbers Read Number1, Number2, Number3 Total = Number1 + Number2 + Number3 Print Total END The algorithm is suitably named. The end of the algorithm is marked as END. Statements between the start and end are indented. Checking the algorithm • Choose 2 or 3 simple input test cases which are valid. • Establish what the expected results should be. • Make a table of the relevant variable names within the algorithm • Walk the first test case through the algorithm, keeping a record of the contents of each variable in the table as the data passes through the logic. • Repeat the walkthrough process, using the other test data cases. • Check the expected results against the actual results. This is NOT a program proof. Selection - making choices • How do you decide what to do? – Look at the condition(s) – Specify the alternatives very clearly – Specify the conditions under which an alternative option will be taken very clearly – Any instructions that are not optional should not be subject to the condition. Selection control structure • • • • • Simple selection Null ELSE statement Combined IF statement Nested IF statement CASE statement Simple selection if (accountbalance < 300) - condition servicecharge = 5.00 - executed if condition true else servicecharge = 2.00 - executed if condition false Endif Null ELSE statement If StudentAttendance = Parttime Add 1 to Parttime-Count Endif Nested IF statement: If oper = ‘*’ c=a*b else if oper = ‘+’ c=a+b else if oper = ‘-’ c= a - b else display “Illegal operator” endif endif endif Display c, ‘=‘, a, oper, b Case statement: Case oper of: ‘*’: c=a*b ‘+’ : c= a + b ‘-’: c=a-b Other: display ‘illegal operator’ End Case display c, ‘=‘,a,operator,b Part B - case statement switch (oper) { case '*': c = a * b; break; case '+': c = a + b; break; case '-': c = a - b; break; default: printf("Illegal operator\n"); c = 0; } printf("%f = %d%c%d\n",c,a,oper,b); return 0; } • The block is enclosed in braces • Once an appropriate option has been found, the code is executed • If the ‘break’ is omitted, following statements may also be carried out. Structure theorem revisited 6 basic operations:1. Receive a piece of data 2. Put out data 3. Perform arithmetic 4. Assign a value to a piece of data 5. Select a group of actions 6. Repeat a group of actions Repetition Control Structure • Coding which needs to be repeated for a defined set of circumstances. • Define the coding which needs to be repeated. • Define the conditions under which the coding should be repeated. 1. Leading edge tested loop DOWHILE condition coding ENDDO • Condition is tested before the coding is executed - if the condition is false, no coding is executed. • The coding is done WHILE the condition is TRUE. The condition is tested every time execution loops around. • When the condition is found to be false, execution continues at the next statement after the ENDDO Flowchart notation of WHILE Condition true? True code False Sample leading edge loop e.g. A temperature data entry consists of 15 entries, each containing a temperature in degrees Fahrenheit. A program is to be written which will read and print the temperatures in two columns on a report, one column in degrees Fahrenheit and the other in degrees Celsius. Column headings which read Degrees F and Degrees C are to be printed at the top of the page. IPO chart INPUT 15 entries F-temp PROCESSING Print column headings For each entry Read F-temp Convert F-temp to C-temp Print F-temp, C-temp OUTPUT Headings F-temp C-temp Fahrenheit-Celsius conversion Print 'Degrees F' and 'Degrees C' Entry-counter = 0 DOWHILE Entry-counter < 15 Read F-temp C-temp = (F-temp - 32) * 5/9 Print F-temp, C-temp Entry-counter = Entry-counter + 1 ENDDO END Don't forget to desk-check. 2. Trailing edge tested loop REPEAT coding UNTIL condition • • • • The coding is executed The condition is tested If the condition is false, the process is repeated If the condition is true, execution continues at the next line. – e.g. Display "Do you wish to continue [Y/N]?" Repeat Input ANSWER until ANSWER = 'Y' or 'N’ Flowchart notation of Repeat code False Condition true? True Example A program is required to read a series of inventory entries which contain item number and stock figure. The last entry in the file has an item number of zero. The program is to produce a 'Low Stock Items' report, by printing only those entries which have a stock figure of less than 20 items. A heading is to print at the top of the report and a total low stock item count to print at the end. IPO chart INPUT Inventory entry with: Item number Stock figure PROCESSING Print heading For each entry:Read Entry Print Entry Increment Totallow-stock-items Print Total-low-stockitems OUTPUT Heading 'Low stock items' Inventory list with:Item number stock-figure Total-low-stock- items Process-inventory-entries (pseudocode) Set Total-Low-Stock-Items to zero Print 'Low-Stock Items' Heading REPEAT Read inventory Entry IF item number > 0 THEN IF stock figure < 20 THEN print item number,stock figure increment Total-Low-Stock-Items ENDIF ENDIF UNTIL item number = 0 Print Total-Low-Stock-Items END 3. Auto-increment loop If the exact number of loop iterations is known in advance, then the execution of the loop can be controlled by a loop index or counter, which is initialised for the first pass through the loop, auto-increments on each pass through the loop and stops at a predestined point:DO loop-index = initial-value to final-value statement block ENDDO How the DO loop works • The DO loop does the following:– Initialise the loop-index to the required initial-value – increment the loop-index by 1 for each pass through the loop – test the value of loop-index at the beginning of each loop to ensure that it is within the stated range of values – terminate the loop when the loop-index has exceeded the specified final-value Example A program is required to read a file of 350 student entries containing student number, sex and age and to produce a STUDENT LIST. If a student is under 18 years of age, then an asterisk '*' is to be printed beside that student's details. A total of the number of students under 18 years of age is also to be printed at the end of the report. IPO chart INPUT 350 student entries studnt-no sex age PROCESSING Print heading For each student: read Entry print details print '*’ increment total-studentsunder-18 OUTPUT Print total-students-under-18 Total-students-under-18 Heading'STUDENT LIST' Student details containing: studnt-no sex age Print-student-list 1 Print 'STUDENT LIST' Heading 2 Set Total-Students-Under-18 to zero 3 DO loop-index = 1 to 350 4 read student Entry 5 print student details IF age <18 THEN 6 print '*’ 7 increment Total-Students-Under-18 ENDIF ENDDO 8 Print Total-Student-Under-18 END Desk checking • For two valid entries (change loop size to 2 from 350): - Number Sex Age Record 1 14872 M 25 Record 2 15543 F 17 Desk checking statemnt Tot-u-18 Loop idx 1 2 0 3 0 1 4 0 1 5 0 1 6 7 3 4 5 6 7 8 / / 0 0 0 0 1 / / 2 2 2 2 2 Studntno 14872 14872 / / 14872 15543 15543 15543 15543 Sex Age PrintStud? Print * Final M M 25 25 Yes - - M F F F F / / 25 17 17 17 17 / / Yes - / / Yes - / / Yes Comparison between WHILE and REPEAT WHILE REPEAT Add-numbers Sum = 0 Read number While number not = 999 sum = sum + number read number end-while Print sum END Add-Numbers Sum = 0 Repeat read number if number not = 999 sum = sum + number end-if until number = 999 Print sum END