Download presentation
Presentation is loading. Please wait.
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?
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.