Presentation is loading. Please wait.

Presentation is loading. Please wait.

CMSC 202 Lesson 5 Functions I.

Similar presentations


Presentation on theme: "CMSC 202 Lesson 5 Functions I."— Presentation transcript:

1 CMSC 202 Lesson 5 Functions I

2 Warmup Use setw() to print the following (in tabular format)
Fred Flintstone Barney Rubble Bugs Bunny Daffy Duck

3 Announcements CMSC Help Center is now open! Project 1 is out
Location: ITE 201E Announcement on BB with link for hours Project 1 is out Design due this Sunday Homework 1 should be graded by Tuesday (~1 week after due)

4 C++ Functions Predefined Functions cmath library cstdlib library
sqrt(x) – takes the sqrt of x pow(x, n) – computes xn cstdlib library abs(x) – integer absolute value exit(x) – end program assert library assert(z) – ends program if z is false Tip: pay attention to the parameter types for these! The libraries are VERY particular

5 Functions You are familiar with functions that… Return a value
Do not return a value (void) Have parameters (primitives, structs, arrays) Have no parameters Call other functions

6 Functions New stuff Scope (partial review…) Parameters
Call by value Call by reference Constant Default Function return types Function overloading

7 Functions - Design Abstraction Pre-conditions Post-conditions
Hiding the details… Do not need to know how a function works to use it Pre-conditions Comment describing constraints on parameter values to ensure proper function execution Post-conditions Comment describing state of the program after function execution VERY IMPORTANT!!!

8 Pre/Post-condition Example
// // Function: ShowInterest // PreCondition: // balance is a nonnegative savings account balance // rate is the interest rate expressed as a percent // such as 5 for 5% // PostCondition: // the amount of interest for the given balance at the // given rate is displayed to cout. // if the parameters are invalid, "No Interest" is displayed // void ShowInterest( double balance, double rate ) { if (balance >= 0 && rate >=0) // code to calculate and display interest } else cout << "No Interest\n"; }

9 Preconditions How to write a good precondition?
Describe assumptions/limitations of each parameter Ex: denominator cannot be equal to zero Describe assumptions/limitations of the program state Ex: global array “students” must have at least one student in it What must the function do? Test every precondition!!! Ex: if (denominator == 0) cerr << “Error: Denom == 0” << endl; Ex: if (NbrOfStudents < 1) cerr << “Error: NbrOfStud < 1” << endl;

10 Preconditions How to deal with unmet preconditions?
Handle the error by returning a “safe” value or printing an error Prefer NOT to print errors from functions! Return a status value Throw an exception (later…) Last resort: Abort the program (exit or assert)

11 Postconditions How to write a good postcondition?
Describe all possible message from the function Ex: Error message is printed if preconditions are violated Describe all possible return values Ex: Return value is 0 if an error is encountered, otherwise, a positive value representing the current rate calculated is returned What must the function do? Functionality must match postcondition claims!

12 Scope Area of a program where a variable is defined Types of Scope
Denoted with { } Can be nested Types of Scope Global Scope Outside of all functions Entire file can use global variables Local Scope Within a pair of { } Only other code within the { } can use these If name conflict, overrides the outer-scope Getting back to global? :: scope resolution operator Accesses global variable if name conflict

13 Scope Issues int a = 1; int doubleVal(int a) { return 2 * a; }
int main() a = doubleVal(a + 7); char a = ‘a’; a = a + 1; // ‘a’ + 1 => ‘b’ ::a = ::a + 1; // => 17 return 0;

14 Scope Rules Variables can be declared anywhere
Declare them when you need them… Global variables should always be constant! Not all constants should be global For loops – initializer list is scoped inside the for loop for (int i = 0; …) // i is INSIDE the loop Try to avoid reusing variable names…

15 Function Parameters Argument Parameter (or Formal Parameter)
Value/variable passed IN to a function Parameter (or Formal Parameter) Variable name INSIDE the function Call-by-Value Changes to the parameter do not affect the argument Syntax: retType funcName( type varName, … ){ … }

16 Call by Value Example void mystery(int b) { b++;
cout << b << endl; } int main() int a = 7; mystery(a); cout << a << endl; return 0; Allocate b : 7 Copy value Allocate a : 7

17 Look familiar? Works “backwards”
Call by Reference Call by Reference Changes to the parameter change the argument Function declares that it will change argument Share memory Essentially a pointer Syntax: retType funcName( type &varName, … ){ … } Look familiar? Works “backwards”

18 Call by Reference Example
void mystery(int &b) { b++; cout << b << endl; } int main() int a = 7; mystery(a); cout << a << endl; return 0; Use this space b: Allocate a : 7

19 Value versus Reference?
Why choose value or reference? Value Data going in, nothing coming out Only one piece of data coming out (return it!) Reference Need to modify a value Need to return more than one piece of data Passed an array (by default are by reference, no ‘&’ needed)

20 Call-by-Reference – Issue!
What happens in the following? void mystery(int &b) { b++; cout << b << endl; } int main() mystery(6); return 0;

21 Practice What is printed in the following code block?
void mystery(int a, int &b) { a++; b++; cout << a << “ “ << b << endl; } int main() int a = 1; int b = 1; mystery(a, b); mystery(b, a); mystery(a, a); return 0;

22 Challenge Write a function named “getInfo”
Accepts 3 parameters: First name Last name Age Ask the user to give you these 3 pieces of information Write a main function that will use getInfo to retrieve this information Think about: Will you use value or reference?


Download ppt "CMSC 202 Lesson 5 Functions I."

Similar presentations


Ads by Google