ICOM 4015 Advanced Programming Lecture 6 Procedural Abstraction
ICOM 4015 Advanced Programming Lecture 6 Procedural Abstraction III Reading: Chapter 3 Prof. Bienvenido Velez 12/25/2021 ICOM 4015 1
Procedural Abstraction III Outline • Procedural arguments • Top-down stepwise refinement 12/25/2021 ICOM 4015 2
Example 0 Integration #include <iostream> // Forward definitions double integrate(double a, double b, double n, double f(double x)); double cube(double x); double sqr(double x); int main() { cout << "Integral of x^2 in [0, 1] = " << integrate(0. 0, 10000, sqr) << endl; cout << "Integral of x^3 in [0, 1] = " << integrate(0. 0, 10000, cube) << endl; } double integrate(double a, double b, double n, double f(double x)) { double delta = (b-a) / double(n); double sum = 0. 0; for (int i=0; i<n; i++) { sum += f(a + delta * i) * delta; } return sum; } double cube(double x) { return x * x; } double sqr(double x) { return x * x; } [bvelez@amadeus] ~/icom 4015/lec 05 >> example 2 Integral of x^2 in [0, 1] = 0. 333283 Integral of x^3 in [0, 1] = 0. 24995 12/25/2021 ICOM 4015 [bvelez@amadeus] ~/icom 4015/lec 05 >> 3
Step 0 - Outline // // // top-down. cc Computes weighted average score of grades. Grades include two asignments two midterm exams and one final exam. All grades are input from standar input, but the weights of each type of grade are hard coded. // C header files extern "C" { } // Standard C++ header files #include <iostream> // My own C++ header files // Macro definitions // Forward definitions of auxiliary functions // Global declarations // Main function int main() { // Read assignment grades // Read exam grades // Read final exam grade // Calculate average // Print report return 0; } // Auxiliary functions 12/25/2021 ICOM 4015 4
Step 2 - Stubs int main() { float assignment 1, assignment 2; float exam 1, exam 2; float final. Exam; read. Assignment. Grades(assignment 1, assignment 2); read. Exam. Grades(exam 1, exam 2); read. Final. Grade(final. Exam); float avg; avg = calculate. Average(assignment 1, assignment 2, exam 1, exam 2, final. Exam ); print. Report(assignment 1, assignment 2, exam 1, exam 2, final. Exam, avg); return 0; } // Auxiliary functions void read. Assignment. Grades(float& assignment 1, float& assignment 2) {} void read. Exam. Grades(float& ex 1, float& ex 2) {} void read. Final. Grade(float& final) {} float calculate. Average(float assignment 1, float assignment 2, float exam 1, float exam 2, float final. Exam) {} void print. Report(float assignment 1, float assignment 2, float exam 1, float exam 2, float final. Exam, float average) {} 12/25/2021 ICOM 4015 5
Step 3 - Refine // Auxiliary functions void read. Assignment. Grades(float& assignment 1, float& assignment 2) { // Read a float in [0, 100] into assignment 1 // Read a float in [0, 100] into assignment 2 } void read. Exam. Grades(float& ex 1, float& ex 2) { // Read a float in [0, 100] into ex 1 // Read a float in [0, 100] into ex 2 } void read. Final. Grade(float& final) { // Read a float in [0, 100] into final } float calculate. Average(float assignment 1, float assignment 2, float exam 1, float exam 2, float final. Exam) { // Calculate assignments average // Calculate exams average // Calculate weighted average } void print. Report(float assignment 1, float assignment 2, float exam 1, float exam 2, float final. Exam, float average) { // print assignment grades // print exam grades // print final exam grades // print weighted average } 12/25/2021 ICOM 4015 6
Top-down stepwise refinement cycle outline refine stubs 12/25/2021 ICOM 4015 7
- Slides: 7