CMSC 202 - PowerPoint PPT Presentation

About This Presentation
Title:

CMSC 202

Description:

Announcement on BB with link for hours. Project 1 is out. Design due ... Write a main function that will use getInfo to retrieve this information. Think about: ... – PowerPoint PPT presentation

Number of Views:27
Avg rating:3.0/5.0
Slides: 23
Provided by: danawo
Category:
Tags: cmsc

less

Transcript and Presenter's Notes

Title: CMSC 202


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 gt 0 rate gt0)
  • // code to calculate and display interest
  • else
  • cout ltlt "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 ltlt Error
    Denom 0 ltlt endl
  • Exif (NbrOfStudents lt 1) cerr ltlt Error
    NbrOfStud lt 1 ltlt 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 gt b
  • a a 1 // 16 1 gt 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
  • retType funcName( type varName, )

16
Call by Value Example
  • void mystery(int b)
  • b
  • cout ltlt b ltlt endl
  • int main()
  • int a 7
  • mystery(a)
  • cout ltlt a ltlt endl
  • return 0

b 7
Allocate
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
  • retType funcName( type varName, )

Look familiar? Works backwards
18
Call by Reference Example
  • void mystery(int b)
  • b
  • cout ltlt b ltlt endl
  • int main()
  • int a 7
  • mystery(a)
  • cout ltlt a ltlt 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 ltlt b ltlt 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 ltlt a ltlt ltlt b ltlt endl
  • int main()
  • int a 1
  • int b 1
  • mystery(a, b)
  • mystery(b, a)
  • mystery(a, a)
  • cout ltlt a ltlt ltlt b ltlt endl

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?
Write a Comment
User Comments (0)
About PowerShow.com