chapter 6 modular programming j. h. wang ( 王正豪 ), ph. d. assistant professor dept. computer...

Post on 16-Dec-2015

220 Views

Category:

Documents

1 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Chapter 6Modular Programming

J. H. Wang (王正豪 ), Ph. D.

Assistant Professor

Dept. Computer Science and Information Engineering

National Taipei University of Technology

Copyright ©2004 Pearson Addison-Wesley. All rights reserved. 6-2

Functions with Simple Output Parameters

• When a function call executes, the computer allocates memory space in the function data area for each formal parameter.

• The value of each actual parameter is stored in the memory cell allocated to its corresponding formal parameter.

Copyright ©2004 Pearson Addison-Wesley. All rights reserved. 6-3

Figure 6.1 Function separate()

Copyright ©2004 Pearson Addison-Wesley. All rights reserved. 6-4

Figure 6.2 Diagram of Function separate() with Multiple Results

Copyright ©2004 Pearson Addison-Wesley. All rights reserved. 6-5

Functions with Simple Output Parameters(Cont’d)

• Asterisks– before the parameter names– in front of the parameter names in the

assignment statements

• char *signp tells the compiler that signp will contain the address of a type char variable.

• pointer – a memory cell whose content is the address of

another memory cell

Copyright ©2004 Pearson Addison-Wesley. All rights reserved. 6-6

Figure 6.3 Program That Calls a Function with Output Arguments (cont’d)

Copyright ©2004 Pearson Addison-Wesley. All rights reserved. 6-7

Figure 6.3 Program That Calls a Function with Output Arguments (cont’d)

Copyright ©2004 Pearson Addison-Wesley. All rights reserved. 6-8

Functions with Simple Output Parameters(Cont’d)

• The calling function must declare variables in which function separate can store the multiple results it computes.

• Changing of the values of memory cells in the data area of the calling function is considered a side effect of the call to function separate.

• The addresses of the arguments sn, whl, and fr are stored in the corresponding output parameters signp, wholep, and fracp.

Copyright ©2004 Pearson Addison-Wesley. All rights reserved. 6-9

Figure 6.4 Parameter Correspondence for separate(value, &sn, &whl, &fr);

Copyright ©2004 Pearson Addison-Wesley. All rights reserved. 6-10

Functions with Simple Output Parameters(Cont’d)

Copyright ©2004 Pearson Addison-Wesley. All rights reserved. 6-11

Figure 6.5 Comparison of Direct and Indirect Reference

Copyright ©2004 Pearson Addison-Wesley. All rights reserved. 6-12

Functions with Simple Output Parameters(Cont’d)

• The formal parameter is preceded by the indirection operator, unary *.– *signp = '+';– *wholep = floor(magnitude);– *fracp = magnitude - *wholep;

Copyright ©2004 Pearson Addison-Wesley. All rights reserved. 6-13

Meanings of * Symbol

• Three distinct meanings of the symbol *– the binary operator meaning multiplication.– in the declarations, read as “pointer to”– the unary indirection operator, “follow the

pointer”

Copyright ©2004 Pearson Addison-Wesley. All rights reserved. 6-14

Figure 6.6 Program to Sort Three Numbers

Copyright ©2004 Pearson Addison-Wesley. All rights reserved. 6-15

Figure 6.6 Program to Sort Three Numbers (cont’d)

Copyright ©2004 Pearson Addison-Wesley. All rights reserved. 6-16

Multiple Calls to a Function with Input/OutputParameters

• sort – a rearrangement of data in a particular sequence (increasing or

decreasing)

• input/output parameters– the function uses the current actual argument values as inputs and

may return new values

Copyright ©2004 Pearson Addison-Wesley. All rights reserved. 6-17

Figure 6.7 Data Areas After temp = *smp; During Call order(&num1, &num3);

Copyright ©2004 Pearson Addison-Wesley. All rights reserved. 6-18

Copyright ©2004 Pearson Addison-Wesley. All rights reserved. 6-19

Scope of Names

• scope of a name – the region in a program where a particular

meaning of a name is visible

• All of the formal parameters and local variables are visible only from their declaration to the closing brace in which they are declared.

Copyright ©2004 Pearson Addison-Wesley. All rights reserved. 6-20

Figure 6.8 Outline of Program for Studying Scope of Names

Copyright ©2004 Pearson Addison-Wesley. All rights reserved. 6-21

Copyright ©2004 Pearson Addison-Wesley. All rights reserved. 6-22

Figure 6.9 Function scan_fraction (incomplete)

Copyright ©2004 Pearson Addison-Wesley. All rights reserved. 6-23

Figure 6.9 Function scan_fraction (incomplete) (cont’d)

Copyright ©2004 Pearson Addison-Wesley. All rights reserved. 6-24

Figure 6.10 Data Areas for scan_fraction and Its Caller

Copyright ©2004 Pearson Addison-Wesley. All rights reserved. 6-25

CASE STUDY Arithmetic with Common Fractions

• To perform computations with common fractions and get results that are common fractions in reduced form

• Add, subtract, multiply, and divide several pairs of common fractions.

Copyright ©2004 Pearson Addison-Wesley. All rights reserved. 6-26

CASE STUDY Arithmetic with Common Fractions (Cont’d)

• DATA REQUIREMENTS– Problem Inputs

• int n1, d1 /* numerator, denominator of first fraction */• int n2, d2 /* numerator, denominator of second fraction */• char op /* arithmetic operator + - * or / */• char again /* y or n depending on user's desire to continue */

– Problem Outputs• int n_ans /* numerator of answer */• int d_ans /* denominator of answer */

Copyright ©2004 Pearson Addison-Wesley. All rights reserved. 6-27

CASE STUDY Arithmetic with Common Fractions (Cont’d)

• INITIAL ALGORITHM– 1. Repeat as long as user wants to continue.– 2. Get a fraction problem.– 3. Compute the result.– 4. Display problem and result.– 5. Check if user wants to continue.

• Step 2 Refinement– 2.1 Get first fraction.– 2.2 Get operator.– 2.3 Get second fraction.

Copyright ©2004 Pearson Addison-Wesley. All rights reserved. 6-28

CASE STUDY Arithmetic with Common Fractions (Cont’d)

• Step 3 Refinement– 3.1 Select a task based on operator:– '+': 3.1.2 Add the fractions.– ‘-': 3.1.3 Add the first fraction and the negation of the second.– '*': 3.1.4 Multiply the fractions.– '/': 3.1.5 Multiply the first fraction and the reciprocal of the second.– 3.2 Put the result fraction in reduced form.

• Step 3.2 Refinement– 3.2.1 Find the greatest common divisor (GCD) of the numerator

and denominator.– 3.2.2 Divide the numerator and denominator by the GCD.

Copyright ©2004 Pearson Addison-Wesley. All rights reserved. 6-29

Figure 6.11 Structure Chart for Common Fraction Problem

Copyright ©2004 Pearson Addison-Wesley. All rights reserved. 6-30

Figure 6.12 Program to Perform Arithmetic Operations on Common Fractions

Copyright ©2004 Pearson Addison-Wesley. All rights reserved. 6-31

Figure 6.12 Program to Perform Arithmetic Operations on Common Fractions (cont’d)

Copyright ©2004 Pearson Addison-Wesley. All rights reserved. 6-32

Figure 6.12 Program to Perform Arithmetic Operations on Common Fractions (cont’d)

Copyright ©2004 Pearson Addison-Wesley. All rights reserved. 6-33

Figure 6.12 Program to Perform Arithmetic Operations on Common Fractions (cont’d)

Copyright ©2004 Pearson Addison-Wesley. All rights reserved. 6-34

Figure 6.12 Program to Perform Arithmetic Operations on Common Fractions (cont’d)

Copyright ©2004 Pearson Addison-Wesley. All rights reserved. 6-35

Figure 6.12 Program to Perform Arithmetic Operations on Common Fractions (cont’d)

Copyright ©2004 Pearson Addison-Wesley. All rights reserved. 6-36

Figure 6.13 Sample Run of a Partially Complete Program Containing Stubs

Copyright ©2004 Pearson Addison-Wesley. All rights reserved. 6-37

Debugging and Testing a Program System

• Not all functions will be ready at the same time

• use of stubs enables us to test and debug the main program flow and those functions that are available

• top-down testing – the process of testing flow of control between a

main function and its subordinate functions

Copyright ©2004 Pearson Addison-Wesley. All rights reserved. 6-38

Debugging and Testing a Program System (Cont’d)

• stub – a skeleton function that consists of a header

and statements that display trace messages and assign values to output parameters; enables testing of the flow of control among functions before this function is completed

Copyright ©2004 Pearson Addison-Wesley. All rights reserved. 6-39

Figure 6.14 Stub for Function multiply_fractions

Copyright ©2004 Pearson Addison-Wesley. All rights reserved. 6-40

Debugging and Testing a Program System (Cont’d)

• unit test – a test of an individual function– Perform a preliminary test of a new function– It is easier to locate and correct errors when dealing

with a single function rather than with a complete program system.

• Perform a unit test by writing a short driver function to call it.

• Once a function works properly, substitute it for its stub

Copyright ©2004 Pearson Addison-Wesley. All rights reserved. 6-41

Figure 6.15 Driver for Function scan_fraction

Copyright ©2004 Pearson Addison-Wesley. All rights reserved. 6-42

Debugging and Testing a Program System (Cont’d)

• bottom-up testing – the process of separately testing individual

functions of a program system

• system integration tests – testing a system after replacing all its stubs with

functions that have been pretested

Copyright ©2004 Pearson Addison-Wesley. All rights reserved. 6-43

Debugging Tips for Program Systems

• A list of suggestions for debugging a program system follows.– Carefully document each function parameter

and local variable using comments– Create a trace of execution by displaying the

function name as you enter it– Trace or display the values of parameters upon

entry to a function– Trace or display the values of all function

outputs

Copyright ©2004 Pearson Addison-Wesley. All rights reserved. 6-44

Common Programming Errors

• An actual output argument must be of the same pointer data type as the corresponding formal parameter.

• The C scope rules

top related