1 / 22

# CMSC 202 - PowerPoint PPT Presentation

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

I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.

## PowerPoint Slideshow about 'CMSC 202' - Angelica

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

Lesson 5

Functions I

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

Fred Flintstone

Barney Rubble

Bugs Bunny

Daffy Duck

• 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)

• 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

• 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

• New stuff

• Scope (partial review…)

• Parameters

• Call by value

• Call by reference

• Constant

• Default

• Function return types

• 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!!!

//------------------------------------------------------

// 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";

}

}

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

• 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)

• 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!

• 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

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;

}

• 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…

• 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, … ){ … }

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

• 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”

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

• 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)

• What happens in the following?

void mystery(int &b)

{

b++;

cout << b << endl;

}

int main()

{

mystery(6);

return 0;

}

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

}

• 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