Cmsc 202 l.jpg
This presentation is the property of its rightful owner.
Sponsored Links
1 / 22

CMSC 202 PowerPoint PPT Presentation


  • 283 Views
  • Uploaded on
  • Presentation posted in: Funny / Jokes

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

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.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 l.jpg

CMSC 202

Lesson 5

Functions I


Warmup l.jpg

Warmup

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

    Fred Flintstone

    Barney Rubble

    Bugs Bunny

    Daffy Duck


Announcements l.jpg

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 l.jpg

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 l.jpg

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 l.jpg

Functions

  • New stuff

    • Scope (partial review…)

    • Parameters

      • Call by value

      • Call by reference

      • Constant

      • Default

    • Function return types

    • Function overloading


Functions design l.jpg

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 l.jpg

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 l.jpg

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 l.jpg

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 l.jpg

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 l.jpg

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 l.jpg

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 l.jpg

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 l.jpg

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 l.jpg

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 l.jpg

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 l.jpg

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 l.jpg

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 l.jpg

Call-by-Reference – Issue!

  • What happens in the following?

    void mystery(int &b)

    {

    b++;

    cout << b << endl;

    }

    int main()

    {

    mystery(6);

    return 0;

    }


Practice l.jpg

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 l.jpg

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?


  • Login