Download Document

Survey
yes no Was this document useful for you?
   Thank you for your participation!

* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project

Document related concepts

History of the function concept wikipedia , lookup

Elementary mathematics wikipedia , lookup

Transcript
Chapter 6
Modular
Programming
Dr. J.-Y. Pan
Dept. Comm. Eng.
Nat. Chung Cheng Univ.
http://ant.comm.ccu.edu.tw
jypan@comm.ccu.edu.tw
本章重點
Pointer
Name scope
Testing skill
中正大學通訊工程系 潘仁義老師 Advanced Network Technology Lab
3-2
6.1 Function With Output Parameter
Argument lists provide the communication links
between the main function and its function
subprograms.
Arguments enable a function to manipulate
different data each time it is called.
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.
中正大學通訊工程系 潘仁義老師 Advanced Network Technology Lab
3-3
Figure 6.1 Function separate
中正大學通訊工程系 潘仁義老師 Advanced Network Technology Lab
3-4
Pointer
A memory cell whose content is
the address of another memory cell
Fig 1.4
Fig 3.15
Actual & Formal
中正大學通訊工程系 潘仁義老師 Advanced Network Technology Lab
3-5
If a reference x is of type “whatever-type”,
the reference &x is of type “pointer to
whatever-type,” that is, “whatever-type *.”
中正大學通訊工程系 潘仁義老師 Advanced Network Technology Lab
3-6
Figure 6.5 Comparison of Direct and Indirect
Reference
中正大學通訊工程系 潘仁義老師 Advanced Network Technology Lab
3-7
6.1 (cont) Meaning of * Symbol
Three distinct meanings of the symbol *
Multiplication
3 * x + 4 (expression)
Part of the names of the parameters’ data types
pointer to
char *signp; (declaration)
Unary indirection operator
follow the pointer
*signp = ‘+’; (execution statement)
中正大學通訊工程系 潘仁義老師 Advanced Network Technology Lab
3-8
6.2 Multiple Calls to a Function with
Input/Output Parameters
sort
A rearrangement of data in a particular
sequence (increasing or decreasing)
Example 6.2
The main function in Fig. 6.6 gets three data
values and rearranges the data in increasing
sequence.
中正大學通訊工程系 潘仁義老師 Advanced Network Technology Lab
3-9
Figure 6.6 Program to Sort Three Numbers
中正大學通訊工程系 潘仁義老師 Advanced Network Technology Lab
3-10
Figure 6.6 Program to Sort Three Numbers
(cont’d)
Comparing to p.164, Fig 4.5
中正大學通訊工程系 潘仁義老師 Advanced Network Technology Lab
3-11
6.2 (cont) Trace of Program to Sort Three
Numbers
Statement
num1 num2 num3 Effect
scanf(“...”, &num1, &num2, 7.5
&num3);
Order(&num1, &num2);
9.6
Order(&num1, &num3);
5.5
9.6
7.5
Switch
Order(&num2, &num3);
5.5
7.5
9.6
Switch
printf(“...”, num1, num2,
num3)
5.5
Enter data
No change
Display
中正大學通訊工程系 潘仁義老師 Advanced Network Technology Lab
3-12
Figure 6.7 Data Areas After temp = *smp;
During Call order(&num1, &num3);
中正大學通訊工程系 潘仁義老師 Advanced Network Technology Lab
3-13
Program Style
Functions that return a single value are the
easiest functions for a program reader to
deal with.
If a function subprogram has a meaningful
name, the reader can often get a good idea
of what is happening in the calling function.
中正大學通訊工程系 潘仁義老師 Advanced Network Technology Lab
3-14
6.3 Scope of Names
The scope of a name refers to the region of
a program where a particular meaning of a
name is visible or can be referenced.
Name is defined as constant macros and
their scope begins at their definition and
continues to the end of the source file.
中正大學通訊工程系 潘仁義老師 Advanced Network Technology Lab
3-15
Figure 6.8
Outline of Program for Studying Scope of Names
中正大學通訊工程系 潘仁義老師 Advanced Network Technology Lab
3-16
Scope of Names Use in Fig. 6.8
中正大學通訊工程系 潘仁義老師 Advanced Network Technology Lab
3-17
6.4 Formal Output Parameters as Actual
Arguments
Fig. 6.9 shows a function that scans a data
line representing a common fraction of the
form
numerator / denominator
Numerator is an integer
Denominator is a positive integer
Figure 6.10 shows the data areas for
scan_fraction and the function calling it.
中正大學通訊工程系 潘仁義老師 Advanced Network Technology Lab
3-18
Figure 6.9 Function scan_fraction
nump &slash denomp
Driver: Fig 6.15
中正大學通訊工程系 潘仁義老師 Advanced Network Technology Lab
3-19
Figure 6.10 Data Areas for scan_fraction and
Its Caller
scanf()
中正大學通訊工程系 潘仁義老師 Advanced Network Technology Lab
3-20
6.5 A Program with Multiple Functions
CASE STUDY Arithmetic with Common Fractions
中正大學通訊工程系 潘仁義老師 Advanced Network Technology Lab
3-21
中正大學通訊工程系 潘仁義老師 Advanced Network Technology Lab
3-22
6.5 (cont) Case Study:
Arithmetic with Common Fractions
Design
Initial Algorithm
1.Repeat as log 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
Refinement
2.1 Get first fraction
2.2 Get operator
2.3 Get second fraction
中正大學通訊工程系 潘仁義老師 Advanced Network Technology Lab
3-23
6.5 (cont) Case Study:
Arithmetic with Common Fractions
Design
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
中正大學通訊工程系 潘仁義老師 Advanced Network Technology Lab
3-24
6.5 (cont) Case Study:
Arithmetic with Common Fractions
Design
Refinement of 3.2
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
Fig. 6.11 shows the data flow among the steps
中正大學通訊工程系 潘仁義老師 Advanced Network Technology Lab
3-25
Figure 6.11 Structure Chart for Common Fraction Problem
Fig 6.9
中正大學通訊工程系 潘仁義老師 Advanced Network Technology
Lab
HW5
3-26
6.5 (cont) Case Study:
Arithmetic with Common Fractions
Implementation (Figure 6.12)
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
multiply_fractions and find_gcd use stubs
中正大學通訊工程系 潘仁義老師 Advanced Network Technology Lab
3-27
Figure 6.12
Program to
Perform
Arithmetic
Operations on
Common
Fractions
直接看程式…
中正大學通訊工程系 潘仁義老師 Advanced Network Technology Lab
3-28
Figure 6.12
Program to
Perform
Arithmetic
Operations on
Common
Fractions
(cont’d)
中正大學通訊工程系 潘仁義老師 Advanced Network Technology Lab
3-29
Figure 6.12
Program to
Perform
Arithmetic
Operations on
Common
Fractions
(cont’d)
中正大學通訊工程系 潘仁義老師 Advanced Network Technology Lab
3-30
Figure 6.12
Program to
Perform
Arithmetic
Operations on
Common
Fractions
(cont’d)
中正大學通訊工程系 潘仁義老師 Advanced Network Technology Lab
3-31
Figure 6.12
Program to
Perform
Arithmetic
Operations on
Common
Fractions
(cont’d)
中正大學通訊工程系 潘仁義老師 Advanced Network Technology Lab
3-32
Figure 6.12 Program to Perform Arithmetic
Operations on Common Fractions (cont’d)
中正大學通訊工程系 潘仁義老師 Advanced Network Technology Lab
3-33
Figure 6.13 Sample Run of a Partially
Complete Program Containing Stubs
中正大學通訊工程系 潘仁義老師 Advanced Network Technology Lab
3-34
Testing (Figure 6.13)
Insert a stub for each function not yet
completed
Each stub prints an identification message and
assigns values to its output parameters
中正大學通訊工程系 潘仁義老師 Advanced Network Technology Lab
3-35
6.6 Debugging and Testing a Program System
The number of statements in a program system
grows, the possibility of error also increases.
keep each function to a manageable size
Top-down testing
the process of testing flow of control between a main
function and its subordinate functions
Bottom-up testing
The process of separately testing individual functions of
a program system
Unit test
A test of an individual function
System integration tests
Testing a system after replacing all its stubs with
functions that have been pretested
中正大學通訊工程系 潘仁義老師 Advanced Network Technology Lab
3-36
Figure 6.15 Driver for Function scan_fraction
Driver
A short function written to test another function
by defining its arguments, calling it, and
displaying its result.
中正大學通訊工程系 潘仁義老師 Advanced Network Technology Lab
3-37
6.6 (cont) Debugging Tips for Program
Systems
Carefully document each function parameter and
local variable using comments.
Create a trace of execution by displaying names
Trace or display the values of all input and
input/output parameters
Trace or display the values of all function outputs
after returning from a function
Make sure that a function stub assigns a value to
the variable pointed to by each output parameter
Use “step into” and “step over” in debugger
中正大學通訊工程系 潘仁義老師 Advanced Network Technology Lab
3-38
6.7 Common Programming Errors
NOT
Beware of name scope and life time
Is there any identifier referenced outside its
scope?
Does the identifier refer to what you want to?
…
中正大學通訊工程系 潘仁義老師 Advanced Network Technology Lab
3-39