1 / 39

Modular Programming: Pointers, Scope, and Testing Skills

This chapter covers the concepts of pointers, scope of names, and testing skills in modular programming. It explains the meaning and usage of the * symbol, multiple calls to functions with input/output parameters, and the scope of names. The chapter also provides a case study on arithmetic with common fractions and demonstrates the implementation of arithmetic operations on fractions.

barrettn
Download Presentation

Modular Programming: Pointers, Scope, and Testing Skills

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 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

  2. 本章重點 • Pointer • Name scope • Testing skill

  3. If a reference x is of type “whatever-type”, the reference &x is of type “pointer to whatever-type,” that is, “whatever-type *.”

  4. Figure 6.5 Comparison of Direct and Indirect Reference

  5. 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)

  6. 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 allocatesmemory 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.

  7. Figure 6.1 Function separate

  8. Pointer variable A memory cell whose content is the address of another memory cell Fig 1.4 Fig 3.15 Actual & Formal

  9. 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.

  10. Figure 6.6 Program to Sort Three Numbers

  11. Figure 6.6 Program to Sort Three Numbers (cont’d) Comparing to p.164, Fig 4.5

  12. 6.2 (cont) Trace of Program to Sort Three Numbers

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

  14. 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.

  15. 6.3 Scope of Names • The scope of a namerefers 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.

  16. Figure 6.8Outline of Program for Studying Scope of Names

  17. Scope of Names Use in Fig. 6.8

  18. 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.

  19. Figure 6.9 Function scan_fraction nump &slash denomp Driver: Fig 6.15

  20. Figure 6.10 Data Areas for scan_fraction and Its Caller scanf()

  21. 6.5 A Program with Multiple FunctionsCASE STUDY Arithmetic with Common Fractions

  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

  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

  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

  25. Figure 6.11 Structure Chart for Common Fraction Problem Fig 6.9 HW5

  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

  27. Figure 6.12 Program to Perform Arithmetic Operations on Common Fractions 直接看程式…

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

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

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

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

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

  33. Figure 6.13 Sample Run of a Partially Complete Program Containing Stubs

  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

  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

  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.

  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

  38. 6.7 Common Programming Errors • N O T • Beware of name scope and life time • Is there any identifier referenced outside its scope? • Does the identifier refer to what you want to? • …

More Related