cmsc 202 l.
Download
Skip this Video
Loading SlideShow in 5 Seconds..
CMSC 202 PowerPoint Presentation
Download Presentation
CMSC 202

Loading in 2 Seconds...

play fullscreen
1 / 22

CMSC 202 - PowerPoint PPT Presentation


  • 327 Views
  • Uploaded on

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

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 'CMSC 202' - Angelica


Download Now 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
cmsc 202

CMSC 202

Lesson 5

Functions I

warmup
Warmup
  • Use setw() to print the following (in tabular format)

Fred Flintstone

Barney Rubble

Bugs Bunny

Daffy Duck

announcements
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)
c functions
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
functions
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
functions6
Functions
  • New stuff
    • Scope (partial review…)
    • Parameters
      • Call by value
      • Call by reference
      • Constant
      • Default
    • Function return types
    • Function overloading
functions design
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!!!
pre post condition example
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";

}

}

preconditions
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;
preconditions10
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)
postconditions
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!
scope
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
scope issues
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;

}

scope rules
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…
function parameters
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, … ){ … }

call by value example
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

call by reference
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”

call by reference example
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

value versus reference
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)
call by reference issue
Call-by-Reference – Issue!
  • What happens in the following?

void mystery(int &b)

{

b++;

cout << b << endl;

}

int main()

{

mystery(6);

return 0;

}

practice
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;

}

challenge
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?