1 / 16

ICOM 4015 Advanced Programming

ICOM 4015 Advanced Programming. Lecture 0 Review of Programming I Reading: LNN Chapters 1-3,5-6. Review of Programming I Lecture Outline. Course Information C++ Basics Writing modular programs Separate Compilation Definitions and Summary of Concepts. Course Information.

beate
Download Presentation

ICOM 4015 Advanced Programming

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. ICOM 4015 Advanced Programming Lecture 0 Review of Programming I Reading: LNN Chapters 1-3,5-6 ICOM 4015 - Lecture 0

  2. Review of Programming I Lecture Outline • Course Information • C++ Basics • Writing modular programs • Separate Compilation • Definitions and Summary of Concepts ICOM 4015 - Lecture 0

  3. Course Information • Favor leer el prontuario HOY! • Asistencia requerida • Correo electronico requerido • asumimos mensaje recibido en 48 horas • Laboratorios requeridos • Evaluacion • 36% Examen Final • 34% Examenes parciales (3) • 20% Programas • 10% Laboratorio • Website del curso http://www.ece.uprm.edu/~bvelez/courses/Fall2001/Icom4015/icom4015.htm ICOM 4015 - Lecture 0

  4. Hard-coded values user interface (UI) mixed up with main computation Roots of 2x2 + 3x + 4A monolithic program(A typical INGE3016 approach) #include <cmath> #include <iostream> int main() { float a = 1.0; float b = 4.0; float c = 4.0; float d = b * b - 4.0 * a * c; float root1 = (-b + sqrt(d)) / (2.0 * a); float root2 = (-b - sqrt(d)) / (2.0 * a); cout << “root1 = ” << root1 << endl; cout << “root2 = ” << root2 << endl; return 0; } Potential Runtime error roots.cc > gcc roots1.cc -o roots1 > roots1 root1 = 2.0 root2 = ?? > SHELL monolithic => low modularity => low reusability ICOM 4015 - Lecture 0

  5. Roots of 2x2 + 3x + 4A monolithic program Suggest improvements to our design: 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. ICOM 4015 - Lecture 0

  6. function contract function parameters local declaration Roots of ax2 + bx + cModular design using functions #include <cmath> #include “roots.h” // roots(a, b, c, r1, r2) - returns the number of // real roots of ax^2 + bx + c. If two roots exists // they are returned is r1 and r2. If only one root // exists, it is returned in r1. Otherwise the value // of r1 and r2 is undetermined. int roots(float a, float b, float c, float& r1, float& r2) { float d = b * b - 4.0 * a * c; if (d < 0) { return 0; } r1 = (-b + sqrt(d)) / (2.0 * a); if (d == 0) { return 1; } r2 = (-b - sqrt(d)) / (2.0 * a); return 2; } roots.cc ICOM 4015 - Lecture 0

  7. Roots of ax2 + bx + cModular design using functions // rootsUI.cc // Simple text-based interactive user interface for // finding the roots of polynomials #include <iostream> void readCoefficients(float& a, float& b, float& c) { cout << "Enter coefficient for cuadratic term (a): "; cin >> a; cout << "Enter coefficient for linear term (b): "; cin >> b; cout << "Enter coefficient for constant term (c): "; cin >> c; } void reportRoots(float a, float b, float c, int numRoots, float root1, float root2) { cout << "a = " << a << " b = " << b << " c = " << c << ":: "; switch (numRoots) { case 0: cout << "No real roots" << endl; break; case 1: cout << "One real root: " << root1 << endl; break; case 2: cout << "Two real roots: " << root1 << " and " << root2 << endl; break; default: cout << "Error: bad number of roots" << endl; } } rootsUI.cc ICOM 4015 - Lecture 0

  8. Roots of ax2 + bx + cModular design using functions // rootsUI.h // Header File // Simple text-based interactive user interface for // finding the roots of polynomials extern void readCoefficients(float& a, float& b, float& c); extern void reportRoots(float a, float b, float c, int numRoots, float root1, float root2); rootsUI.h // roots(a, b, c, r1, r2) - returns the number of // real roots of ax^2 + bx + c. If two roots exists // they are returned is r1 and r2. If only one root // exists, it is returned in r1. Otherwise the value // of r1 and r2 is undetermined. extern int roots(float a, float b, float c, float& r1, float& r2); roots.h Header files provide linkage information // rootsMain.cc // Main module for finding the roots of polynomials #include "roots.h" #include "rootsUI.h" int main() { float a,b,c; readCoefficients(a, b, c); float root1, root2; int numRoots = roots(a, b, c, root1, root2); reportRoots(a, b, c, numRoots, root1, root2); } rootsMain.cc Main module glues everything together Keep it simple! ICOM 4015 - Lecture 0

  9. API USER INTERFACE rootsUI.cc API POLY ROOTS COMPONENT roots.cc Complete Layered Application MAIN rootsMain.cc roots.h rootsUI.h ICOM 4015 - Lecture 0

  10. Separate Compilation source files roots.cc rootsUI.cc rootsMain.cc compile compile compile compile time object files roots.o rootsUI.o rootsMain.o compile link time executable files roots run time ICOM 4015 - Lecture 0

  11. Layered Software Design GUI Text-based Batch Interface Text-based Interactive Interface Appl Programming Interface (API) Library/Component ICOM 4015 - Lecture 0

  12. An Alternative Use of roots FunctionFinding the roots of polynomials with integer coefficients in [0, 4) #include <iostream> #include “roots.h” int main() { for (float a = 0; a < 4; a++) { for (float b = 0; b < 4; b++) { for (float c = 0; c < 4; c++) { float root1 = 0.0; float root2 = 0.0; int rootNo = roots(a, b, c, root1, root2) switch (rootNo) { case 0: cout << “No real roots” break; case 1: cout << “One real root: “ << root1 << endl; break; case 2: cout << “Two real roots: “ << root1 << “ and “ << root2 << endl; break; default: cout << “Ërror: bad number of roots” << endl; } } } } } rootsMany.cc ICOM 4015 - Lecture 0

  13. Example 3Factorization of an integer #include <iostream> int factors(int number) { int factors = 0; int quotient = number; // outer loop computes next quotient while (quotient > 1) { // inner loop finds next factor for (int factor = 2; factor <= quotient; factor++) { if (quotient % factor == 0) { cout << “Next factor is: “ << factor << endl; factors++; break; } } quotient /= factor; } return factors; } A Brute Force Algorithm: Why? Challenge: Can we find a faster algorithm? ICOM 4015 - Lecture 0

  14. Definitions andSummary of Concepts I • Monolithic code • Very few reusable components • Modular code • Lots of reusable pieces or “modules” • Modules can be code segments, functions, files, classes, etc. • Self-documenting code • Easier to read, understand and maintain • Techniques include: • meaningful indentation/alignment • meaningful “semantic” naming • concise comments when needed • simplicity of expressions • Abstraction – Hides irrelevant detail • Via naming (e.g. named constants) • Via parameterization (e.g. functions) • Tool for controlling complexity of software • Hard-coding • The opposite of parameterization • Parameter values explicitly specified in code ICOM 4015 - Lecture 0

  15. Definitions andSummary of Concepts II • Scope rules • Local declarations take precedence over global ones • Less need to worry about name collisions • Facilitate modularity • Separate compilation (C++ version) • A program can consists of several separate file modules • Compiler links the modules together • Modules import declarations of other modules via #include of header files containing declarations • File modules provide another unit of modularity • Library • Reusable object file providing definitions of general purpose constants, variables, functions, types, classes and other objects. ICOM 4015 - Lecture 0

  16. Definitions andSummary of Concepts III • Compile-time error • Detected by compiler • Examples: • Syntax error (missing ;) • Undefined identifiers • Runtime error • Undetectable (in general) by compiler • Examples • Array bounds violation • Division by zero • Square root of a negative • Software development cycle • Gather/Specify requirements • Design • Code • Test • Maintain ICOM 4015 - Lecture 0

More Related