1 / 90

Modular Programming using Functions

Value and Reference Parameters Functions with Output and Input Parameters Function Syntax & Arguments Using Objects with Functions Debugging and Testing a Program System Common Programming Errors --------- Recursive functions (not included). Modular Programming using Functions.

eris
Télécharger la présentation

Modular Programming using Functions

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. Value and Reference Parameters Functions with Output and Input Parameters Function Syntax & Arguments Using Objects with Functions Debugging and Testing a Program System Common Programming Errors --------- Recursive functions (not included) Modular Programmingusing Functions

  2. Modular Programmingusing Functions • Modular program: a collection of small building blocks called functions Main program int main() … Function 1 Function 2 Function N

  3. 6.1 Value and Reference Parameters Each function (building block) has a return type – what the function returns after finishing, a name, & Input/output parameters For example: intcomputeSumAve (intx, int y, int sum, float mean); Type: the function returns an integer value Name: computeSumAve Input parameters: intx, int y Output parameters: int sum, float mean

  4. computeSumAve.cpp // File: computeSumAve.cpp #include <iostream> using namespace std; void computeSumAve (float, float, float&, float&); int main () { float x, y, sum, mean;

  5. computeSumAve.cpp cout << "Enter 2 numbers: "; cin >> x >> y; computeSumAve (x, y, sum, mean); cout << " Sum is " << sum << endl; cout << " Average is " << mean << endl; return 0; }

  6. computeSumAve.cpp // COMPUTES THE SUM AND AVERAGE OF NUM1 AND NUM2 // Pre: num1 and num2 are assigned values. // Post: The sum and average of num1 and num2 // are computed and returned as function outputs. void computesumave(float num1, float num2, float& sum, float& average) { sum = num1 + num2; average = sum / 2.0; }

  7. Before Execution

  8. After Execution

  9. Call-by-Value and Call-by-Reference Parameters Call by Value Local function copy Call by Reference (&) Actual memory location

  10. Call-by-Value and Call-by- Reference & Call by Reference Formal Argument in function heading Argument list in function proto-type Used to modify values in a function Input Input/Output Output

  11. Call by Value Local copy of argument made at time of the function call Local copy used in function Modified local copy not actual value When finished local copy destroyed Actual value not changed

  12. Call by Reference Memory address of the actual argument is what is passed to the function Because it is the address in memory of the actual argument you can modify its value Data can flow into a function and out of the function

  13. Protection and Usage of Value and Reference Parameters Value arguments not changeable Reference use could create a side effect If one return value is enough use value arguments with a return If more than one return is needed use reference arguments for the ones needing return values

  14. Protection and Usage of Value and Reference Parameters Typically use reference arguments in getData() type functions Value arguments used with printing type functions When a function must return more than one value a reference argument must be used Avoid using reference arguments because of side effects (Large Projects)

  15. Value and Reference Parameters Expressions can be passed to functions Always passed by value Only variables can be passed by reference

  16. 6.2 Functions with Output and Input Parameters Now examine functions that have only output or inout (input/output) parameters. testGetFrac.cpp Data items are entered at the keyboard sort3Numbers.cpp Demonstrate multiple calls to a function with inout parameters

  17. testGetFrac.cpp // File: testGetFrac.cpp // Tests the fractions. #include <iostream> using namespace std; getFrac(int&, int& ); int main() {

  18. testGetFrac.cpp int num,denom; cout << "Enter a common fraction " << "as 2 integers separated by a slash: "; getFrac(num, denom); cout << "Fraction read is " << num << " / " << denom << endl; return 0; }

  19. testGetFrac.cpp // Reads a fraction. // Pre: none // Post: numerator returns fraction numerator, // denominator returns fraction denominator void getFrac(int& numerator, int& denominator) { char slash; // Read the fraction cin >> numerator >> slash >> denominator; }

  20. testGetFrac.cpp Program Output Enter a fraction as 2 integers separated by a slash : 3 / 4 The Fraction is : 3 / 4

  21. sort3Numbers.cpp // FILE: sort3Numbers.cpp // READS THREE FLOATING POINT NUMBERS AND SORTS // THEM IN ASCENDING ORDER #include <iostream> using namespace std; // SORTS A PAIR OF NUMBERS void order(float&, float&); int main () {

  22. sort3Numbers.cpp // Local data ... float num1, num2, num3; // Read and sort numbers. cout << "Enter 3 numbers to sort:"; cin >> num1 >> num2 >> num3; order (num1, num2); order (num1, num3); order (num2, num3);

  23. sort3Numbers.cpp // Display results. cout << "The three numbers in order are:" << endl; cout << num1 << " " << num2 << " " << num3 << endl; return 0; }

  24. sort3Numbers.cpp // SORTS A PAIR OF NUMBERS REPRESENTED BY x AND y void order(float& x, float& y) // Pre: x and y are assigned values. // Post: x is the smaller of the pair and y is // the larger. { // Local data ... float temp;

  25. sort3Numbers.cpp // Compare x and y and exchange values if not // properly ordered. if (x > y) { temp = x; x = y; y = temp; } }

  26. sort3Numbers.cpp Program Output Enter 3 numbers to be sorted separated by spaces: 7.5 9.6 5.5 The three numbers in order are: 5.5 7.5 9.6

  27. Sort3Numbers.cpp

  28. 6.3 Function Syntax & Arguments Correspondence between actual and formal arguments is determined by position in their respective argument lists. These lists must be the same size. The names of corresponding actual and formal arguments may be different Formal arguments and corresponding actual arguments should agree with respect to type

  29. Function Syntax & Arguments For reference arguments, an actual argument must be a variable. For value arguments, an actual argument may be a variable, a constant or an expression

  30. 6.3 Stepwise Design with Functions Use functions as building blocks in design Start small and add functions compiling as you go Case study the sum and average problem Classic Stepwise design steps

  31. Stepwise Design with Functions Problem statement Problem analysis Program design Program implementation Test and verification

  32. Case Study Structure Chart ComputeSum ComputeAve PrintSumAve

  33. computeSumAve.cpp // File: computeSumAve.cpp // Computes and prints the sum and average of // a collection of data. // File: computeSumAveFunctions // Computes the sum and average of a collection // of data #include <iostream> using namespace std;

  34. computeSumAve.cpp // Functions used ... // Computes sum of data float computeSum (int); // Computes average of data float computeAve (int, float); // Prints number of items, sum, and average void printSumAve (int, float, float);

  35. computeSumAve.cpp int main() { // Local data . . . int numItems; float sum; float average; // Read the number of items to process. cout << "Enter the number of items to process:"; cin >> numItems;

  36. computeSumAve.cpp // Compute the sum of the data. sum = computeSum(numItems); // Compute the average of the data. average = computeAve(numItems, sum); // Print the sum and the average. printSumAve(numItems, sum, average); return 0; }

  37. computeSumAve.cpp // Insert definitions for functions computeSum, // computeAve, and printSumAve here. // Computes sum of data. // Pre: numItems is assigned a value. // Post: numItems data items read; their sum // is stored in sum. // Returns: Sum of all data items read if // numItems >= 1; otherwise, 0. float computeSum (int numItems) {

  38. computeSumAve.cpp // Local data ... float item, sum; // Read each data item and accumulate it in // sum. sum = 0.0; for (int count = 0; count < numItems; count++) { cout << "Enter a number to be added: "; cin >> item; sum += item; } // end for return sum; } // end computeSum

  39. computeSumAve.cpp // Computes average of data // Pre: numItems and sum are defined; numItems // must be greater than 0. // Post: If numItems is positive, the average is // computed as sum / numItems; // Returns: The average if numItems is positive; // otherwise, 0.

  40. computeSumAve.cpp float computeAve (int numItems, float sum) { // Compute the average of the data. if (numItems < 1) { cout << "Invalid value for numItems = " << numItems << endl; cout << "Average not computed." << endl; return 0.0; } // end if return sum / numItems; } // end computeAve

  41. computeSumAve.cpp // Prints number of items, sum, and average of // data // Pre: numItems, sum, and average are defined. // Post: Displays numItems, sum and average if // numItems > 0. void printSumAve (int numItems, float sum, float average) { // Display results if numItems is valid. if (numItems > 0) {

  42. computeSumAve.cpp cout << "The number of items is " << numItems << endl; cout << "The sum of the data is " << sum << endl; cout << "The average of the data is " << average << endl; } else { cout << "Invalid number of items = " << numItems << endl;

  43. computeSumAve.cpp cout << "Sum and average are not defined." << endl; cout << "No printing done. Execution terminated." << endl; } // end if } // end printSumAve

  44. computeSumAve.cpp Program Output Enter the number of items to be processed: 3 Enter a number to be added: 5 Enter a number to be added: 6 Enter a number to be added: 17 The number of items is 3 The sum of the data is 28.00 The average of the data is 9.3333

  45. 6.4 Using Objects with Functions Two ways to use functions to process objects Member function modifies the objects attributes testString.remove (0, 5); Pass object as a function argument Passing string object in function doReplace.cpp

  46. moneyToNumberTest.cpp // File: MoneyToNumberTest.cpp // Tests function moneyToNumberString #include <string> #include <iostream> using namespace std; // Function prototype void moneyToNumberString(string&);

  47. moneyToNumberTest.cpp int main() { string mString; cout << "Enter a dollar amount with $ and commas: "; cin >> mString; moneyToNumberString(mString); cout << "The dollar amount as a number is " << mString << endl; return 0; }

  48. moneyToNumberTest.cpp // Removes the $ and commas from a money string. // Pre: moneyString is defined and may contain // commas and begin with $ or -$. // Post: $ and all commas are removed from // moneyString. void moneyToNumberString (string& moneyString) {

  49. moneyToNumberTest.cpp { // Local data . . . int posComma; // position of next comma // Remove $ from moneyString if (moneyString.at(0) == '$') moneyString.erase(0, 1); else if (moneyString.find("-$") == 0) moneyString.erase(1, 1); // Remove all commas posComma = moneyString.find(",");

  50. moneyToNumberTest.cpp while (posComma >= 0 && posComma < moneyString.length()) { moneyString.erase(posComma, 1); posComma = moneyString.find(","); } } // end moneyToNumberString

More Related