# Chapter 3 Function Basics Copyright 2016 Pearson, Inc.

Chapter 3 Function Basics Copyright 2016 Pearson, Inc. All rights reserved. Learning Objectives Predefined Functions Those that return a value and those that dont Programmer-defined Functions Defining, Declaring, Calling Recursive Functions Scope Rules Local variables

Global constants and global variables Blocks, nested scopes Copyright 2016 Pearson Addison-Wesley. All rights reserved. 3-2 Introduction to Functions Building Blocks of Programs Other terminology in other languages: Procedures, subprograms, methods In C++: functions I-P-O Input Process Output Basic subparts to any program

Use functions for these "pieces" Copyright 2016 Pearson Addison-Wesley. All rights reserved. 3-3 Predefined Functions Libraries full of functions for our use! Two types: Those that return a value Those that do not (void) Must "#include" appropriate library e.g., , (Original "C" libraries) (for cout, cin)

Copyright 2016 Pearson Addison-Wesley. All rights reserved. 3-4 Using Predefined Functions Math functions very plentiful Found in library Most return a value (the "answer") Example: theRoot = sqrt(9.0); Components: sqrt = name of library function theRoot = variable used to assign "answer" to

9.0 = argument or "starting input" for function In I-P-O: I= P= O= 9.0 "compute the square root" 3, which is returned & assigned to theRoot Copyright 2016 Pearson Addison-Wesley. All rights reserved. 3-5 The Function Call

Back to this assignment: theRoot = sqrt(9.0); The expression "sqrt(9.0)" is known as a function call, or function invocation The argument in a function call (9.0) can be a literal, a variable, or an expression The call itself can be part of an expression: bonus = sqrt(sales)/10; A function call is allowed wherever its legal to use an expression of the functions return type Copyright 2016 Pearson Addison-Wesley. All rights reserved. 3-6 A Larger Example:

Display 3.1 A Predefined Function That Returns a Value (1 of 2) Copyright 2016 Pearson Addison-Wesley. All rights reserved. 3-7 A Larger Example: Display 3.1 A Predefined Function That Returns a Value (2 of 2) Copyright 2016 Pearson Addison-Wesley. All rights reserved. 3-8 More Predefined Functions #include Library contains functions like:

abs() labs() *fabs() // Returns absolute value of an int // Returns absolute value of a long int // Returns absolute value of a float *fabs() is actually in library ! Can be confusing Remember: libraries were added after C++ was "born," in incremental phases Refer to appendices/manuals for details Copyright 2016 Pearson Addison-Wesley. All rights reserved.

3-9 More Math Functions pow(x, y) Returns x to the power y double result, x = 3.0, y = 2.0; result = pow(x, y); cout << result; Here 9.0 is displayed since 3.02.0 = 9.0 Notice this function receives two arguments A function can have any number of arguments, of varying data types Copyright 2016 Pearson Addison-Wesley. All rights reserved.

3-10 Even More Math Functions: Display 3.2 Some Predefined Functions (1 of 2) Copyright 2016 Pearson Addison-Wesley. All rights reserved. 3-11 Even More Math Functions: Display 3.2 Some Predefined Functions (2 of 2) Copyright 2016 Pearson Addison-Wesley. All rights reserved.

3-12 Predefined Void Functions No returned value Performs an action, but sends no "answer" When called, its a statement itself exit(1); // No return value, so not assigned This call terminates program void functions can still have arguments All aspects same as functions that "return a value" They just dont return a value! Copyright 2016 Pearson Addison-Wesley. All rights reserved.

3-13 Random Number Generator Return "randomly chosen" number Used for simulations, games rand() Takes no arguments Returns value between 0 & RAND_MAX Scaling Squeezes random number into smaller range rand() % 6 Returns random value between 0 & 5 Shifting rand() % 6 + 1

Shifts range between 1 & 6 (e.g., die roll) Copyright 2016 Pearson Addison-Wesley. All rights reserved. 3-14 Random Number Seed Pseudorandom numbers Calls to rand() produce given "sequence" of random numbers Use "seed" to alter sequence srand(seed_value); void function Receives one argument, the "seed" Can use any seed value, including system time:

srand(time(0)); time() returns system time as numeric value Library

"%" is modulus operator (remainder) Random int between 10 & 20: rand() % 10 + 10 Copyright 2016 Pearson Addison-Wesley. All rights reserved. 3-16 Programmer-Defined Functions Write your own functions! Building blocks of programs Divide & Conquer Readability Re-use

Your "definition" can go in either: Same file as main() Separate file so others can use it, too Copyright 2016 Pearson Addison-Wesley. All rights reserved. 3-17 Components of Function Use 3 Pieces to using functions: Function Declaration/prototype Information for compiler To properly interpret calls Function Definition Actual implementation/code for what

function does Function Call Transfer control to function Copyright 2016 Pearson Addison-Wesley. All rights reserved. 3-18 Function Declaration Also called function prototoype An "informational" declaration for compiler Tells compiler how to interpret calls Syntax: FnName(); Example:

double totalCost( int numberParameter, double priceParameter); Placed before any calls In declaration space of main() Or above main() in global space Copyright 2016 Pearson Addison-Wesley. All rights reserved. 3-19 Function Definition Implementation of function Just like implementing function main() Example: double totalCost(

int numberParameter, double priceParameter) { const double TAXRATE = 0.05; double subTotal; subtotal = priceParameter * numberParameter; return (subtotal + subtotal * TAXRATE); } Notice proper indenting Copyright 2016 Pearson Addison-Wesley. All rights reserved. 3-20 Function Definition Placement Placed after function main() NOT "inside" function main()!

Functions are "equals"; no function is ever "part" of another Formal parameters in definition "Placeholders" for data sent in "Variable name" used to refer to data in definition return statement Sends data back to caller Copyright 2016 Pearson Addison-Wesley. All rights reserved. 3-21 Function Call Just like calling predefined function

bill = totalCost(number, price); Recall: totalCost returns double value Assigned to variable named "bill" Arguments here: number, price Recall arguments can be literals, variables, expressions, or combination In function call, arguments often called "actual arguments" Because they contain the "actual data" being sent Copyright 2016 Pearson Addison-Wesley. All rights reserved. 3-22 Function Example:

Display 3.5 A Function to Calculate Total Cost (1 of 2) Copyright 2016 Pearson Addison-Wesley. All rights reserved. 3-23 Function Example: Display 3.5 A Function to Calculate Total Cost (1 of 2) Copyright 2016 Pearson Addison-Wesley. All rights reserved. 3-24 Alternative Function Declaration Recall: Function declaration is "information" for compiler

Compiler only needs to know: Return type Function name Parameter list Formal parameter names not needed: double totalCost(int, double); Still "should" put in formal parameter names Improves readability Copyright 2016 Pearson Addison-Wesley. All rights reserved. 3-25 Parameter vs. Argument Terms often used interchangeably

Formal parameters/arguments In function declaration In function definitions header Actual parameters/arguments In function call Technically parameter is "formal" piece while argument is "actual" piece* *Terms not always used this way Copyright 2016 Pearson Addison-Wesley. All rights reserved. 3-26 Functions Calling Functions

Were already doing this! main() IS a function! Only requirement: Functions declaration must appear first Functions definition typically elsewhere After main()"s definition Or in separate file Common for functions to call many other functions Function can even call itself "Recursion" Copyright 2016 Pearson Addison-Wesley. All rights reserved. 3-27

Boolean Return-Type Functions Return-type can be any valid type Given function declaration/prototype: bool appropriate(int rate); And functions definition: bool appropriate (int rate) { return (((rate>=10)&&(rate<20))||(rate==0); } Returns "true" or "false" Function call, from some other function: if (appropriate(entered_rate)) cout << "Rate is valid\n"; Copyright 2016 Pearson Addison-Wesley. All rights reserved.

3-28 Declaring Void Functions Similar to functions returning a value Return type specified as "void" Example: Function declaration/prototype: void showResults( double fDegrees, double cDegrees); Return-type is "void" Nothing is returned Copyright 2016 Pearson Addison-Wesley. All rights reserved. 3-29

Declaring Void Functions Function definition: void showResults(double fDegrees, double cDegrees) { cout.setf(ios::fixed); cout.setf(ios::showpoint); cout.precision(1); cout << fDegrees << " degrees fahrenheit equals \n" << cDegrees << " degrees celsius.\n"; } Notice: no return statement Optional for void functions Copyright 2016 Pearson Addison-Wesley. All rights reserved.

3-30 Calling Void Functions Same as calling predefined void functions From some other function, like main(): showResults(degreesF, degreesC); showResults(32.5, 0.3); Notice no assignment, since no value returned Actual arguments (degreesF, degreesC) Passed to function Function is called to "do its job" with the data passed in Copyright 2016 Pearson Addison-Wesley. All rights reserved.

3-31 More on Return Statements Transfers control back to "calling" function For return type other than void, MUST have return statement Typically the LAST statement in function definition return statement optional for void functions Closing } would implicitly return control from void function Copyright 2016 Pearson Addison-Wesley. All rights reserved.

3-32 Preconditions and Postconditions Similar to "I-P-O" discussion Comment function declaration: void showInterest(double balance, double rate); //Precondition: balance is nonnegative account balance // rate is interest rate as percentage //Postcondition: amount of interest on given balance, // at given rate Often called Inputs & Outputs Copyright 2016 Pearson Addison-Wesley. All rights reserved.

3-33 main(): "Special" Recall: main() IS a function "Special" in that: One and only one function called main() will exist in a program Who calls main()? Operating system Tradition holds it should have return statement Value returned to "caller" Here: operating system Should return "int" or "void"

Copyright 2016 Pearson Addison-Wesley. All rights reserved. 3-34 Scope Rules Local variables Declared inside body of given function Available only within that function Can have variables with same names declared in different functions Scope is local: "that function is its scope" Local variables preferred Maintain individual control over data Need to know basis

Functions should declare whatever local data needed to "do their job" Copyright 2016 Pearson Addison-Wesley. All rights reserved. 3-35 Procedural Abstraction Need to know "what" function does, not "how" it does it! Think "black box" Device you know how to use, but not its method of operation Implement functions like black box User of function only needs: declaration Does NOT need function definition

Called Information Hiding Hide details of "how" function does its job Copyright 2016 Pearson Addison-Wesley. All rights reserved. 3-36 Global Constants and Global Variables Declared "outside" function body Global to all functions in that file Declared "inside" function body Local to that function Global declarations typical for constants:

const double TAXRATE = 0.05; Declare globally so all functions have scope Global variables? Possible, but SELDOM-USED Dangerous: no control over usage! Copyright 2016 Pearson Addison-Wesley. All rights reserved. 3-37 Blocks Declare data inside compound statement Called a "block" Has "block-scope"

Note: all function definitions are blocks! This provides local "function-scope" Loop blocks: for (int ctr=0;ctr<10;ctr++) { sum+=ctr; } Variable ctr has scope in loop body block only Copyright 2016 Pearson Addison-Wesley. All rights reserved. 3-38 Nested Scope Same name variables declared in multiple blocks

Very legal; scope is "block-scope" No ambiguity Each name is distinct within its scope Copyright 2016 Pearson Addison-Wesley. All rights reserved. 3-39 Summary 1 Two kinds of functions: "Return-a-value" and void functions Functions should be "black boxes" Hide "how" details Declare own local data

Function declarations should self-document Provide pre- & post-conditions in comments Provide all "caller" needs for use Copyright 2016 Pearson Addison-Wesley. All rights reserved. 3-40 Summary 2 Local data Declared in function definition Global data Declared above function definitions OK for constants, not for variables

Parameters/Arguments Formal: In function declaration and definition Placeholder for incoming data Actual: In function call Actual data passed to function Copyright 2016 Pearson Addison-Wesley. All rights reserved. 3-41

## Recently Viewed Presentations

• Any space where there is the presence of mechanical hazards. Lesson 9 Learning Activity #9.1 Slides #1 - #4 * Some examples of confined spaces are: Holding Tank Empty Water Well Septic Tank Culvert Grain Bin Tanker Trailer * What...
• The first sight of 'this Someone' makes John fall down at his feet as if dead! Then 'this Someone' lovingly places his hand on John's shoulder and tells him not to be afraid. He tells him that he is the...
• Microarray workflow. Reading raw data and metadata. Plotting raw data QC plots. RMA Normalization . Plotting Post-normalization QC plots. PCA & clustering. Limma call for Differentially Expressed Genes DEG . Plotting contrasts plots. Enrichment analysis using GSEA package (developed internally...
• Media That Transmit Sound. Any elastic substance — solid, liquid, gas, or plasma — can transmit sound. In liquids and solids, the atoms are relatively close together, respond quickly to one another's motions, and transmit energy with little loss.
• Rectangularly symmetric Obtainable in spherical-planar resonator by adjusting plane mirror angle Also obtainable by an intra-cavity crosswire, when the laser is operating in a multimode Indices (m,n) refer to the number of intensity minima in the x and y directions...
• Hands-On Ethical Hacking and Network Defense ... to a computer with shared folders or files * Additional Enumeration Tools NetScanTools Pro DumpSec Hyena NessusWX * NetScanTools Pro Produces a graphical view of NetBIOS running on a network Enumerates any shares...
• Οι κατηγορίες διαχωρίζονται με βάση την βαθμολογία τους από την προσθετική συνάρτηση χρησιμότητας και τα όρια χρησιμότητας : Όπου u1, u2, …, uQ-1 ορίζονται τα όρια τα οποία διαχωρίζουν τις ...
• The SP submitted to the College for the purposes of the Fellowship Scholarly Project requirement can only be used for the POA Certificate if it is relevant to the practice of POA. RANZCP>Pre-Fellowship>2012 Fellowship Program>Certificates of Advanced Training>Psychiatry of old...