2.18k likes | 2.33k Views
CPSC 230 Computers and Programming I. Fall 2004 Dr. Lynn Lambert. This course will teach you:. C++ Object-oriented concepts Programming Some stabs at problem solving. How computers work. Computers understand machine language only Each computer has its own language
E N D
CPSC 230Computers and Programming I Fall 2004 Dr. Lynn Lambert
This course will teach you: • C++ • Object-oriented concepts • Programming • Some stabs at problem solving
How computers work • Computers understand machine language only • Each computer has its own language • All computer languages are in binary (1s and 0s) • No computer understands English, Powerpoint, or C++
A computer program: Add X to Y and store in Z In machine language: • 01040100 (already simplified to decimal) • 01050160 • 04040506 • 02060180 HUH!?
Assembly Each machine instruction has matching, more English-like assembler: • Load X (was: 01040100) • Load Y (was: 01050160) • Add X Y Z (was: 04040506) • Store Z (was: 02060180) Better, but … all this for one addition!?
z=x+y; Much better! BUT, no machines understand source code. Only machine code. C++
Designing a Program • Decide the problem to solve. • Design the solution!!!!!! • Translate design to C++ • Type the C++ program (source code) using an editor (emacs): program.cc • Compile (g++). Translates C++ into machine language (object, machine, executable code) • Link (g++). Creates executable. Can be done with step 5 or separately. • Run the program (after 1-6).
At each step: • Think • Do • Debug • Test
Write a program to calculate the volume of a sphere • Problem well-defined • Design solution: • Read radius • Calculate volume: V = 4/3(p)r3 • Print answer
Extreme Programming • Also called Agile Programming, Agile Methods • Goal is to produce easily modifiable, reliable code that corresponds to user wants • Pairs programming, tests created before program is written
Test for volume program • Radius input: 2.0 // nice normal test • Answer should be: 33.5 • Radius input: 2 // testing integer input • Answer should be: 33.5 • Radius input: 0 // ALWAYS test for 0 • Answer should be: 0 • Others tests: negative, large, small, etc.
C++ Program #include <iostream> // allows reading in and out using namespace std; // standard namespace int main() { float radius; // radius of a sphere float volume; // volume of sphere; float is decimal. // other types are int, char, bool, double
const float mypi = 3.14159; // const values cannot be changed // M_PI also defined in cmath cout << “This program calculates the volume “ << “of a sphere given its radius.” << endl; // lots of other ways to do this cout. cout << “Enter the radius> “; cin >> radius;
// volume = 4/3 p r3 try 1: volume = 4/3 M_PI r …? 3? try 2: volume = 4 / 3 * M_PI * r * r; try 2.b: volume = 4/3 * M_PI * pow(r, 3); // pow is in cmath cout << "The volume of a sphere with radius "; cout << radius << " is " << volume << endl; return EXIT_SUCCESS; // in <cstdlib> }
Class Work Write a program that converts a user entered number of inches to the equivalent number of centimeters (1 inch = 2.54 centimeters). • Work with your partner. • Write an algorithm first • Write the tests next (input value for what variable, why this test, expected answer) • Gradually convert the algorithm to C++
FunctionsChapter 3 (modified from Deitel & Deitel web page)
Why functions? • divide and conquer • repeatable. reuse reliable code • encapsulated
Program Components in C++ • Modules: functions and classes • Programs use new and “prepackaged” modules • New: programmer-defined functions, classes • Prepackaged: from the standard library • Functions invoked by function call • Function name and information (arguments/parameters) it needs • Function definitions • Only written once
Program Components in C++ • Boss to worker analogy • A boss (the calling function or caller) asks a worker (the called function) to perform a task and return (i.e., report back) the results when the task is done
Library Functions • Functions called by writing • functionName(argument1, argument2, …); • Perform common mathematical calculations • Include the header file <cmath> • Call the appropriate function
Library Functions • Example volume = 4.0 / 3.0 * M_PI * pow(r, 3); • pow (exponentiation) function returns baseexponent (pow(2,3) would return 8) • Other math functions listed on p. 173 of text • All functions in math library return a double
Parameters/Arguments • Function arguments can be • Constants • sqrt( 4 ); • Variables • sqrt( x ); • Expressions • sqrt( sqrt( x ) ) ; • sqrt( 3 - 6x );
Header Files • Header files contain • Function prototypes • Definitions of data types and constants • Header files ending with .h • Programmer-defined header files #include “myheader.h” • Library header files #include <cmath>
Other libraries • Perform string operations, include <string> • Perform character manipulations, include <cctype> • file handling, <fstream> • standard constants and routines <cstdlib> • Lots of others
To find a function or library • Look in your textbook • Ask your partner/class mates • Ask me • Look on google (or other search engine) • Look on google groups
Writing your own functions • To call a function, you need: • Function call – invokes function execution • done • To write your own function, you need: • Function call (e.g., pow, sqrt). We know this. • Function prototype (shown in function libraries, like <cmath> -- contains interface information) • Function definition– contains the C++ that defines how that function will be executed (e.g., main). Really, we know this.
Function call • Calling/invoking a function • Tells C++ to go do function. If never called, never performed • nothing new. No change in how library functions, your functions are called • After finished, passes back result. Calling function can store or use result • x = pow(2, 3); • cout << pow(2, 3);
Function Call • Syntax • nameoffunction(arg1, arg2, …) • square(x); • Parentheses an operator used to call function • Pass argument x • Function gets its own copy of arguments • Write a function call that prints the result of sqrt of 4. Discuss with 2 others.
Function definition • Format for function definition return-value-type function-name( parameter-list ){ declarations and statements} • Parameter list • Comma separated list of arguments • Data type needed for each argument • If no arguments, use void or leave blank • Return-value-type • Data type of result returned (use void if nothing returned)
Function definition • Example function int square( int y ) { return y * y; } • return keyword • Returns data, and control goes to function’s caller • If no data to return, use return; • Function ends when reaches right brace • Control goes to caller • Functions cannot be defined inside other functions
You try • Write a function definition, sum3, that returns the sum of 3 integers.
Function Prototypes • Purpose • Tells compiler argument(s) type and return type of function • int square( int ); • Function takes an int and returns an int • Syntax • Function name • Parameters (number and data type) • Return type (void if returns nothing) • Only needed if definition after function call • semicolon (unlike header in function definition)
Function Prototypes • Prototype must match function header • Function prototype int sqr(int); • Function Header in Function Definition int sqr(int y) { … } • Write a function prototype for sum3
// Fig. 3.3: fig03_03.cpp. But modified from code in book // Creating and using a programmer-defined function. #include<iostream> #include <cstdlib> using namespace std;// modified from code in book int square( int ); // function prototype intmain() { int number; // Ask user for number square then square that number cout << “This program calculates the square of an integer.” << endl; cout << “Enter a number> “; cin >> number; // next line is function call cout << number << “ squared is “ << square(number) << endl; returnEXIT_SUCCESS;// indicates successful termination }// end main Function prototype: specifies data types of arguments and return values. square expects and int, and returns an int. Function call.: Parentheses () cause function to be called. When done, it returns the result.
// this continues program begun on previous slide // square function definition returns // square of an integer int square( int y ) // y is a copy of argument to function { return y * y; // returns square of y as an int } // end function square OR int square(int nbr) { int answer; answer = nbr * nbr; return answer; } function body: C++ statements in between {}s. function header: return type function name, parameter list.
void • Empty parameter lists • void or leave parameter list empty • Indicates function takes no arguments • Function print takes no arguments and returns no value • void print(); • void print( void );
print function example • Prototype • void printinfo(void); • Function call int main () { ... printinfo(); … }
print function example cont'd • function definition void printinfo() { cout << "this program calculates"; cout << " the area of a sphere"; cout << endl; }
void can be anywhere or nowhere Return type OR argument list OR both or neither can be void • void printint(int x) • int getint() • void printinstructions() • int square(int x)
Function overloading • Function overloading • Functions with same name and different parameters • Should perform similar tasks • i.e., function to square ints and function to square floats int square( int x) {return x * x;} float square(float x) { return x * x; } • Similar to overloaded +, /, etc. operators
Function overloading cont'd • Overloaded functions distinguished by signature • Based on position, number, and type of parameters (order of parameters matters) • Name mangling • Encodes function identifier with parameters • Type-safe linkage • Ensures proper overloaded function called
// Fig. 3.25: fig03_25.cpp 2 // Using overloaded functions. 3 #include <iostream> 4 5 using std::cout; 6 using std::endl; 7 8 // function square for int values 9 int square( int x ) 10 { 11 cout << "Called square with int argument: " << x << endl; 12 return x * x; 13 14 } // end int version of function square 15 16 // function square for double values 17 double square( double y ) 18 { 19 cout << "Called square with double argument: " << y << endl; 20 return y * y; 21 } // end double version of function square 23
24 int main() 25 { 26 int intResult = square( 7 ); // int version called 27 double doubleResult; 28 doubleResult= square( 7.5 ); // calls double version 29 cout << "\nThe square of integer 7 is " << intResult 30 << "\nThe square of double 7.5 is " 31 << doubleResult << endl; 32 33 return 0; // indicates successful termination 34 35 } // end main Called square with int argument: 7 Called square with double argument: 7.5 The square of integer 7 is 49 The square of double 7.5 is 56.25
Class Work • With your partner, write a program that calculates the volume of a sphere, and uses a function calcspherevolume. • Talk to your neighbors • Use the book • Use your notes
If Statements Sections 1.25, 2.4-2.6
Control Structures • All code thus far executes every line of code sequentially • We want to be able to repeat, to choose some lines of code • Three types of control: sequence, conditional, repetition/iteration
Types of control structures • Sequence – default in C++, execute each instruction sequentially as it reached • Conditional – choose whether to execute some C++ statement (if, if -else switch) • Iteration – loop. Repeat some set of statements multiple times
Conditional • Choose which statement to execute. • Form: if (some condition is true), then do some action • If (comparison) then (action) • Many examples in English: • If raining, wear raincoat. • If cold, wear winter coat. • When in Rome, do as the Romans (if in Rome, act like a Roman)