1 / 73

Functions

Functions. pointDist1.cpp. // compute the distances between three points ... int main() { double px, py, qx, qy, rx, ry; double dx, dy, dist_pq, dist_pr, dist_qr; // read input cout << "Enter point 1 (2 floats): "; cin >> px >> py; cout << "Enter point 2 (2 floats): ";

kiral
Download Presentation

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. Functions The Ohio State University

  2. pointDist1.cpp // compute the distances between three points ... int main() { double px, py, qx, qy, rx, ry; double dx, dy, dist_pq, dist_pr, dist_qr; // read input cout << "Enter point 1 (2 floats): "; cin >> px >> py; cout << "Enter point 2 (2 floats): "; cin >> qx >> qy; cout << "Enter point 3 (2 floats): "; cin >> rx >> ry; The Ohio State University

  3. pointDist1.cpp (2) ... // calculate distances dx = px - qx; dy = py - qy; dist_pq = sqrt(dx*dx + dy*dy); dx = px - rx; dy = py - ry; dist_pr = sqrt(dx*dx + dy*dy); dx = qx - rx; dy = qy - ry; dist_qr = sqrt(dx*dx + dy*dy); ... The Ohio State University

  4. pointDist1.cpp (3) ... // output distances cout << "Distance between (" << px << "," << py << ") " << "and (" << qx <<"," << qy << ") = " << dist_pq << endl; cout << "Distance between (" << px << "," << py << ") " << "and (" << rx <<"," << ry << ") = " << dist_pr << endl; cout << "Distance between (" << qx << "," << qy << ") " << "and (" << rx <<"," << ry << ") = " << dist_qr << endl; return 0; } The Ohio State University

  5. pointDist1.cpp (3) > pointDist1.exe Enter point 1 (2 floats): 0 0 Enter point 2 (2 floats): 3 0 Enter point 3 (2 floats): 0 4 Distance between (0,0) and (3,0) = 3 Distance between (0,0) and (0,4) = 4 Distance between (3,0) and (0,4) = 5 5 4 3 The Ohio State University

  6. pointDist1.cpp (2) ... // calculate distances dx = px - qx; dy = py - qy; dist_pq = sqrt(dx*dx + dy*dy); dx = px - rx; dy = py - ry; dist_pr = sqrt(dx*dx + dy*dy); dx = qx - rx; dy = qy - ry; dist_qr = sqrt(dx*dx + dy*dy); ... The Ohio State University

  7. Functions Examples of C++ functions: • sqrt(a) • exp(a) • cos(a) • pow(a,b) The Ohio State University

  8. Functions From wikipedia.org: • “A function is a portion of code within a larger program which performs a specific task and is relatively independent of the remaining code.” • “The components of a function include: • A body of code to be executed when the function is called; • Parameters that are passed to the function; • A value that is returned by the function.” The Ohio State University

  9. Function dist() // function dist double dist(double x1, double y1, double x2, double y2) // four input parameters: x1, y1, x2, y2 // function dist returns a value of type double { double dx, dy, d; dx = x1 - x2; dy = y1 - y2; d = sqrt(dx*dx + dy*dy); // return the distance from (x1,y1) to (x2,y2) return(d); } The Ohio State University

  10. A Breakdown of Function dist()(1) double dist(double x1, double y1, double x2, double y2) • This statement is called the function header: • The first doublesays that this function returns a value of type double. This is the return data type. • The function’s name is dist. • This function has 4 parameters: • A parameter of type double called x1 • A parameter of type double called y1 • A parameter of type double called x2 • A parameter of type double called y2 The Ohio State University

  11. A Breakdown of Function dist() (2) double dist(double x1, double y1, double x2, double y2) { double dx, dy, d; dx = x1 - x2; dy = y1 - y2; d = sqrt(dx*dx + dy*dy); // return the distance from (x1,y1) to (x2,y2) return(d); } • Lines after the function header form the body of the function. They calculate and return the distance between points (x1,y1) and (x2,y2). • Notice, because we are returning d which is of type double, the return data type in the header must be double. The Ohio State University

  12. pointDist2.cpp ... // main function int main() { double px, py, qx, qy, rx, ry; double dist_pq, dist_pr, dist_qr; // read input cout << "Enter point 1 (2 floats): "; cin >> px >> py; cout << "Enter point 2 (2 floats): "; cin >> qx >> qy; cout << "Enter point 3 (2 floats): "; cin >> rx >> ry; The Ohio State University

  13. pointDist2.cpp // calculate distances dist_pq = dist(px, py, qx, qy); dist_pr = dist(px, py, rx, ry); dist_qr = dist(qx, qy, rx, ry); // output distances cout << "Distance between (" << px << "," << py << ") " << "and (" << qx <<"," << qy << ") = " << dist_pq << endl; cout << "Distance between (" << px << "," << py << ") " << "and (" << rx <<"," << ry << ") = " << dist_pr << endl; cout << "Distance between (" << qx << "," << qy << ") " << "and (" << rx <<"," << ry << ") = " << dist_qr << endl; return 0; } The Ohio State University

  14. pointDist2.cpp ... // calculate distances dist_pq = dist(px, py, qx, qy); dist_pr = dist(px, py, rx, ry); dist_qr = dist(qx, qy, rx, ry); ... > pointDist2.exe Enter point 1 (2 floats): 0 0 Enter point 2 (2 floats): 3 0 Enter point 3 (2 floats): 0 4 Distance between (0,0) and (3,0) = 3 Distance between (0,0) and (0,4) = 4 Distance between (3,0) and (0,4) = 5 The Ohio State University

  15. Outline of program pointDist2.cpp #include <iostream> #include <cmath> using namespace std; // function dist double dist(double x1, double y1, double x2, double y2) { // body of function dist . . . return(d); } // main function int main() { // body of the main function . . . return 0; } The Ohio State University

  16. pointDist2.cpp // output distances // Note redundancy in these statements cout << "Distance between (" << px << "," << py << ") " << "and (" << qx <<"," << qy << ") = " << dist_pq << endl; cout << "Distance between (" << px << "," << py << ") " << "and (" << rx <<"," << ry << ") = " << dist_pr << endl; cout << "Distance between (" << qx << "," << qy << ") " << "and (" << rx <<"," << ry << ") = " << dist_qr << endl; return 0; } The Ohio State University

  17. Function output_distance() // function output_distance // Note: return data type is void void output_distance(double x1, double y1, double x2, double y2, double distance) // five input parameters: x1, y1, x2, y2, distance // function output_distance returns nothing (void) { cout << "Distance between (" << x1 << "," << y1 << ") " << "and (" << x2 <<"," << y2 << ") = " << distance << endl; } The Ohio State University

  18. pointDist3.cpp // include & namespace statements . . . // function definitions . . . // main function int main() { double px, py, qx, qy, rx, ry; double dist_pq, dist_pr, dist_qr; // read input cout << "Enter point 1 (2 floats): "; cin >> px >> py; cout << "Enter point 2 (2 floats): "; cin >> qx >> qy; cout << "Enter point 3 (2 floats): "; cin >> rx >> ry; The Ohio State University

  19. pointDist3.cpp . . . // calculate distances dist_pq = dist(px, py, qx, qy); dist_pr = dist(px, py, rx, ry); dist_qr = dist(qx, qy, rx, ry); // output distances output_distance(px, py, qx, qy, dist_pq); output_distance(px, py, rx, ry, dist_pr); output_distance(qx, qy, rx, ry, dist_qr); return 0; } The Ohio State University

  20. pointDist3.cpp > pointDist3.exe Enter point 1 (2 floats): 0 0 Enter point 2 (2 floats): 3 0 Enter point 3 (2 floats): 0 4 Distance between (0,0) and (3,0) = 3 Distance between (0,0) and (0,4) = 4 Distance between (3,0) and (0,4) = 5 5 4 3 The Ohio State University

  21. C++ Functions • In C++, a function has four parts: • Name of the function • Data type(s) of the argument(s) • Data type of the return value • Body of the function • In general, the function template: returnDataType functionName(argument list) { //function body statement1; statement2; ... } Interface Implementation The Ohio State University

  22. Advantages of functions From wikipedia.org: • Functions reduce duplication of code in a program; • Functions enable reuse of code across multiple programs (i.e., sqrt(), exp(), pow(),…) • Using functions, complex programs can be decomposed into simpler pieces; • Functions can hide/abstract parts of a program. The Ohio State University

  23. Information Hiding • Adding is a function that takes 2 numbers a and b, and returns 1 number, the sum of a and b. • We do not care what happens inside the box. We just know that when we feed it a and b, we get the correct result! • This is how we have been using cmath functions such as pow() and sqrt(). See the convenience of functions? The Ohio State University

  24. Information Hiding (2) • Abstraction: Separation of interface and implementation • When you were told to use pow() or sqrt(), I only told you about their usage interface. • For example, all you knew about pow() was that pow(x,y) returns the value xy • At no point in time were you ever interested in its algorithmic details (i.e. how exactly it gets xy) The Ohio State University

  25. Abstraction • Why is abstraction useful? • Separates complexities of algorithm from its usage interface. It makes a programmer’s life easier! • A programmer who is simply interested in using this function should not need to worry about details of its implementation. The Ohio State University

  26. Abstraction (2) • For instance, we interact with an ATM to withdraw, transfer, and query from our bank accounts. • We care about its interface: • How to interact with the ATM (input) • What it gives back to us (output) • But we don’t need to care about what goes on inside its machinery to make these things happen! • It is only the programmers of the complex software within the ATM that worry about its implementation. The Ohio State University

  27. Abstraction (3) • Abstraction also allows for a transparent re-implementation of a function. • Let’s say someone wrote a function, pow2(x,y), which calculated xy the in half the time used by the cmath function pow(). • We can replace pow()’s implementation, and as long as we don’t alter the function’s usage interface, this change will be transparent across everyone’s code! • Any program using pow() will find that it now executes faster! The Ohio State University

  28. Function computeCircleArea() // function to compute the area of a circle double computeCircleArea(double radius) { double area(0.0); // area of circle area = M_PI * radius * radius; return(area); } The Ohio State University

  29. circleArea.cpp . . . // function computeCircleArea() definition . . . int main() { double area(0.0); // area of circle double radius(0.0); // radius of circle for (int i = 1; i <= 5; i++) { radius = i; // radius of circle area = computeCircleArea(radius); // call function cout << "Radius: " << radius << " Area: " << area << endl; } return 0; } The Ohio State University

  30. int main() { double area(0.0); // area of circle double radius(0.0); // radius of circle for (int i = 1; i <= 5; i++) { radius = i; // radius of circle area = computeCircleArea(radius); // call function cout << "Radius: " << radius << " Area: " << area << endl; } … > circleArea.exe Radius: 1 Area: 3.14159 Radius: 2 Area: 12.5664 Radius: 3 Area: 28.2743 Radius: 4 Area: 50.2655 Radius: 5 Area: 78.5398 The Ohio State University

  31. Compute Cylinder Volume • Input: Radius of the circular base, Height. • Cylinder volume = (Circular base area) × Height Radius Height The Ohio State University

  32. Function computeCylVolume() // function to compute the volume of a cylinder double computeCylVolume(double radius, double height) { double volume(0.0); // volume of cylinder double base_area(0.0); // area of cylinder base // call function computeCircleArea() base_area = computeCircleArea(radius); volume = base_area * height; return(volume); } The Ohio State University

  33. cylinderVolume.cpp // include & namespace statements . . . // function computeCircleArea() definition double computeCircleArea(double radius) { . . . } // function computeCylVolume() definition double computeCylVolume(double radius, double height) { . . . } int main() { . . . return 0; } The Ohio State University

  34. cylinderVolume.cpp ... int main() { double volume(0.0); // volume of cylinder double rad(0.0); // radius of circular base double h(0.0); // height of cylinder for (int i = 1; i <= 3; i++) { for (int j = 3; j <= 7; j += 2) { rad = i; // radius of circular base h = j; // height of cylinder volume = computeCylVolume(rad, h); // call function cout << "Radius: " << rad << “ Height: " << h << " Volume: " << volume << endl; } } ... The Ohio State University

  35. for (int i = 1; i <= 3; i++) { for (int j = 3; j <= 7; j += 2) { rad = i; // radius of circular base h = j; // height of cylinder volume = computeCylVolume(rad, h); // call function cout << "Radius: " << rad << “ Height: " << h << " Volume: " << volume << endl; } } > cylinderVolume.exe Radius: 1 Height: 3 Volume: 9.42478 Radius: 1 Height: 5 Volume: 15.708 Radius: 1 Height: 7 Volume: 21.9911 Radius: 2 Height: 3 Volume: 37.6991 Radius: 2 Height: 5 Volume: 62.8319 Radius: 2 Height: 7 Volume: 87.9646 > The Ohio State University

  36. circleArea.cpp . . . // function computeCircleArea() definition BEFORE main() . . . int main() { double area(0.0); // area of circle double radius(0.0); // radius of circle for (int i = 1; i <= 5; i++) { radius = i; // radius of circle area = computeCircleArea(radius); // call function cout << "Radius: " << radius << " Area: " << area << endl; } return 0; } The Ohio State University

  37. circleAreaError.cpp // include & namespace statements . . . int main() { . . . for (int i = 1; i <= 5; i++) { radius = i; // radius of circle area = computeCircleArea(radius); // call function . . . } return 0; } // function computeCircleArea() definition double computeCircleArea(double radius) { . . . return(area); } The Ohio State University

  38. for (int i = 1; i <= 5; i++) { radius = i; // radius of circle area = computeCircleArea(radius); // call function ... } // function computeCircleArea() definition double computeCircleArea(double radius) { ... return(area); } > g++ circleAreaError.cpp Compiling circleAreaError.cpp into circleAreaError.exe. circleAreaError.cpp: In function ‘int main()’: circleAreaError.cpp:17: error: ‘computeCircleArea’ was not declared in this scope > The Ohio State University

  39. cylinderVolume.cpp // include & namespace statements . . . // function computeCircleArea() definition // BEFORE computeCylVolume() definition double computeCircleArea(double radius) { . . . } // function computeCylVolume() definition double computeCylVolume(double radius, double height) { . . . } int main() { . . . return 0; } The Ohio State University

  40. cylinderVolumeError.cpp // include & namespace statements . . . // function computeCylVolume() definition double computeCylVolume(double radius, double height) { . . . } // function computeCircleArea() definition double computeCircleArea(double radius) { . . . } int main() { . . . return 0; } The Ohio State University

  41. // function computeCylVolume() definition // BEFORE computeCircleArea() definition double computeCylVolume(double radius, double height) { . . . // call function computeCircleArea() base_area = computeCircleArea(radius); . . . } . . . // function computeCircleArea() definition double computeCircleArea(double radius) . . . > g++ cylinderVolumeError.cpp Compiling cylinderVolumeError.cpp into cylinderVolumeError.exe. cylinderVolumeError.cpp: In function ‘double computeCylVolume(double, double)’: cylinderVolumeError.cpp:15: error: ‘computeCircleArea’ was not declared in this scope > The Ohio State University

  42. Function Prototype (1) • Like variables, before a function can be used, it must first be declared. • But this part is easy. The declaration simply consists of the function header that we have already seen. • The function declaration is also called a function prototype. The Ohio State University

  43. circleArea2.cpp // include & namespace statements . . . // function computeCircleArea() prototype double computeCircleArea(double radius); int main() { . . . for (int i = 1; i <= 5; i++) { . . . area = computeCircleArea(radius); // call function . . . } return 0; } // function computeCircleArea() definition AFTER main() double computeCircleArea(double radius) { . . . return(area); } The Ohio State University

  44. Function Prototype (2) • Prototypes describe a function’s interface! • What do each of the following tell us? double computeCircleArea(double radius); double dist(double x1, double y1, double x2, double y2); void output_distance(double x1, double y1, double x2, double y2, double distance); double average(int i, int j); double life_expectancy (int age, double height, double weight, bool sex); bool is_prime(int k); The Ohio State University

  45. cylinderVolume2.cpp // include & namespace statements . . . // function prototypes // NOTE: Order here does not matter double computeCylVolume(double radius, double height); double computeCircleArea(double radius); int main() { . . . return 0; } // NOTE: Order no longer matters // function computeCylVolume() definition . . . // function computeCircleArea() definition . . . The Ohio State University

  46. Function Prototype (3) • Function prototypes can be placed: • Anywhere above where the function will be called (just like variables) • In general, at least for this course, just place prototypes above int main(). The Ohio State University

  47. Function Prototype (4) double dist(double x1, double y1, double x2, double y2); double life_expectancy (int age, double height, double weight, bool sex); • Alternative function prototype format (used by text): // Note: Variable name is omitted double dist(double, double, double, double); double life_expectancy(int, double, double, bool); The Ohio State University

  48. Function Definition • After declaring the function prototype, we have to define what it does. • In this course, you should place all function definitions after main(). The Ohio State University

  49. #include <iostream> using namespace std; int maxInt(int a, int b); int main() { cout << maxInt(88, 102) << endl; return 0; } int maxInt(int a, int b) { if (a >= b) { return a; } else { return b; } } Function Prototype Function Call Function Definition The Ohio State University

  50. pointDist4.cpp // include & namespace statements . . . // function protoypes double dist(double x1, double y1, double x2, double y2); void output_distance(double x1, double y1, double x2, double y2, double distance); // main function int main() { . . . } // function definitions . . . The Ohio State University

More Related