1 / 22

CMSC 202

CMSC 202. Lesson 5 Functions I. Warmup. Use setw() to print the following (in tabular format) Fred Flintstone Barney Rubble Bugs Bunny Daffy Duck. Announcements. CMSC Help Center is now open! Location: ITE 201E Announcement on BB with link for hours Project 1 is out

petula
Download Presentation

CMSC 202

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. 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! • 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 • 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 • 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 • 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; // 16 + 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 • 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: retTypefuncName( typevarName, … ){ … }

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

  17. 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: retTypefuncName( 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); cout << a << “ “ << b << endl; 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?

More Related