icom 4015 advanced programming
Download
Skip this Video
Download Presentation
ICOM 4015 Advanced Programming

Loading in 2 Seconds...

play fullscreen
1 / 16

ICOM 4015 Advanced Programming - PowerPoint PPT Presentation


  • 82 Views
  • Uploaded on

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.

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about ' ICOM 4015 Advanced Programming' - beate


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.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript
icom 4015 advanced programming

ICOM 4015 Advanced Programming

Lecture 0

Review of Programming I

Reading: LNN Chapters 1-3,5-6

ICOM 4015 - Lecture 0

review of programming i lecture outline
Review of Programming I Lecture Outline
  • Course Information
  • C++ Basics
  • Writing modular programs
  • Separate Compilation
  • Definitions and Summary of Concepts

ICOM 4015 - Lecture 0

course information
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

roots of 2 x 2 3 x 4 a monolithic program a typical inge3016 approach

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

roots of 2 x 2 3 x 4 a monolithic program
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

roots of a x 2 b x c modular design using functions

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

roots of a x 2 b x c modular design using functions1
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

roots of a x 2 b x c modular design using functions2
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

complete layered application

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

separate compilation
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

layered software design
Layered Software Design

GUI

Text-based

Batch

Interface

Text-based

Interactive

Interface

Appl Programming Interface (API)

Library/Component

ICOM 4015 - Lecture 0

slide12
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

example 3 factorization of an integer
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

definitions and summary of concepts i
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

definitions and summary of concepts ii
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

definitions and summary of concepts iii
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

ad