Functions Why we use functions C library functions Creating our own functions.

32
Functions • Why we use functions • C library functions • Creating our own functions

Transcript of Functions Why we use functions C library functions Creating our own functions.

Page 1: Functions Why we use functions C library functions Creating our own functions.

Functions

• Why we use functions

• C library functions

• Creating our own functions

Page 2: Functions Why we use functions C library functions Creating our own functions.

Why functions

• average human mind can hold 6 things at once. (directions example)

• Construct a large program from smaller pieces or modules

• in C++ the pieces are called functions

• final program made up of library pieces plus pieces you write.

Page 3: Functions Why we use functions C library functions Creating our own functions.

C Library Functions• mathematical calculations sqrt, exp, log, sin, cos,

tan, pow, etc. • string manipulations strcat, strcpy, strcmp, strstr • character manipulations isalpha, isdigit, islower,

isupper, atol • input/output cout, cin, printf, fopen, fclose,

fwrite, fread • memory allocation alloc, free • searching and sorting bsearch (binary search),

qsort (quick sort) • www.cplusplus.com

Page 4: Functions Why we use functions C library functions Creating our own functions.

Invoking a library function

Functions are called by writing the name of the function, followed by a left parentheses, followed by the argument list,followed by the right parentheses.

For example: cout << sqrt (900.0);

This code displays 30

Page 5: Functions Why we use functions C library functions Creating our own functions.

Invoking a library function#include <iostream> #include <cmath>using namespace std;

int main(){ for (double i = 1; i <= 10; i++) { cout << "The square root of " << i << " is "; cout << sqrt (i) << endl; }

return 0;}

Page 6: Functions Why we use functions C library functions Creating our own functions.

Invoking a library function#include <iostream> #include <cmath>using namespace std;

int main(){ double squareRoot; for (double i = 1; i <= 10; i++) { cout << "The square root of " << i << " is "; squareRoot = sqrt (i) cout << squareRoot << endl; } return 0;}

Page 7: Functions Why we use functions C library functions Creating our own functions.

Functions as black boxes

sqrt

y square root of y 

    

double double

Page 8: Functions Why we use functions C library functions Creating our own functions.

Function arguments• constants

double rootD1;

rootd1 = sqrt (900.0) ;

• variables double rootD1, d1 = 900.0;

rootd1 = sqrt (d1) ;

• expressionsdouble rootD1, d1 = 900.0;

rootd1 = sqrt (d1 + 20) ;

Page 9: Functions Why we use functions C library functions Creating our own functions.

More than one argument

#include <cmath>

  for (double i = 1; i <= 10; i++) { cout << i << " to the power of 10 is "; cout << pow (i, 10) << endl; }

pow

x (double)y (double)

x to the power y(double)

Page 10: Functions Why we use functions C library functions Creating our own functions.

Common programming errorusing a library function without reading the whole description

For example: the pow library function description says “ pow does not recognize integral floating point values greater than 264, such as 1.0E100” A library function will explain it’s deficiences and limitations.

Make sure you know what they are before using it!

Page 11: Functions Why we use functions C library functions Creating our own functions.

Exercise - use abort instead #include <fstream> // provides ifstream, ofstream#include <iostream> // provides cout

using namespace std;

int main(){ ifstream infile; infile.open("yards.in");

if (!infile) { cout << "Unable to open input file" << endl; cout << "Abnormal termination program" << endl; return 0; }

return 0;}

Page 12: Functions Why we use functions C library functions Creating our own functions.

Exercise - using rand

write a code segment to generate and display 5 random numbers between 0 and 1000.

assume srand has already been called with the current time to properly initialize the random generator

Page 13: Functions Why we use functions C library functions Creating our own functions.

function definition

return-value-type function-name (argument list)

{declarations and statements

}

Example: int Square (int y) { int result; result = y * y; return result;}

Page 14: Functions Why we use functions C library functions Creating our own functions.

function definitionreturn-value-type function-name (argument list)

{declarations and statements

}

• function-name - any valid identifier. Our standard - verb, each word capitalized (GetInput)

• return-value-type - any valid data type, plus void void  abort ();

• argument list - comma separated list of arguments. Each must have a data type. Okay if function has no arguments. bool IsEmpty();

Page 15: Functions Why we use functions C library functions Creating our own functions.

Example - Square functionint main () { int xSquared, int x = 10;

xSquared = Square (x); cout << “ the square of “ << x << “ is “ << xSquared; return 0;}int Square (int y) { int result; result = y * y; return result;}

What happens to xSquared, x, y, result? Walk through

Page 16: Functions Why we use functions C library functions Creating our own functions.

variables inside a function are not visible outside the function

int main () { int xSquared; for (int x = 1; x <= 10; x++) { xSquared = Square (x); cout << xSquared << “ “ ; } cout << result; // would cause a compiler error return 0;}int Square (int y) { int result; result = y * y; return result;}

Page 17: Functions Why we use functions C library functions Creating our own functions.

y is not visible outside the function

int main () { int xSquared; for (int x = 1; x <= 10; x++) { xSquared = Square (x); cout << xSquared << “ “ ; } cout << y; // would cause a compiler error return 0;}int Square (int y) { int result; result = y * y; return result;}

Page 18: Functions Why we use functions C library functions Creating our own functions.

Returning control to caller - no return value

void DisplayErrorMessage(string errorMessage){ cout << errorMessage << endl;

}or void DisplayErrorMessage(string errorMessage){ cout << errorMessage << endl;

return ;}

Page 19: Functions Why we use functions C library functions Creating our own functions.

Returning control to caller with return value

bool IsEmpty(){ if (0 == bufferCount ) return true; else return false;}

Page 20: Functions Why we use functions C library functions Creating our own functions.

function prototype

Tells compiler:• type of data returned from function• number of arguments function expects to receive• type of arguments the function expects to receive• order in which those arguments are expected.

Example:

int Square (int y);

Page 21: Functions Why we use functions C library functions Creating our own functions.

function prototypeCompiler must see either the function itself or the function prototype before the function is actually called in the code.

int Square (int y); int main () { int xSquared; for (int x = 1; x <= 10; x++) { xSquared = Square (x); cout << xSquared << “ “ ; } return 0;}

Function itself may be in a different file as it is with library functions

Page 22: Functions Why we use functions C library functions Creating our own functions.

Area of a Triangle

AreaTriangle

side1

side2

side3(float)

(float)

(float)

area of thetriangle (float)

Page 23: Functions Why we use functions C library functions Creating our own functions.

#include < iostream>#include < cmath>using namespace std;

float AreaTriangle (float side1, float side2, float side3); // prototype

int main () { float a, b, c; // the three sides of the triangle float area; float area; cout << endl << "This program calculates the area of a triangle"; cout << endl << "with sides of length 3.0, 4.0, and 5.0" << endl;

a = 3.0; b = 4.0; c = 5.0; area = AreaTriangle(a, b, c); cout << endl << "The area of the triangle is " << area << endl; return 0;}

/* * PRE: side1, side2, and side3 are positive numbers that * form the sides of a triangle * POST: returns the area of a triangle with sides side1, * side2, side3 */ float AreaTriangle (float side1, float side2, float side3) { float s; // local variable - the semiperimiter s = (side1 + side2 + side3) / 2.0; return (sqrt ( s * (s - side1) * (s - side2) * (s - side3) ) ); }

Page 24: Functions Why we use functions C library functions Creating our own functions.

variables6.05.04.03.0

6.05.04.03.0

sside3side2side1areacba

          

 

s, side1, side2, side3 are variables in the AreaTriangle function

area, a, b and c are variables in the main program

At runtime a copy of a, b, c is made and used to initialize side1, side2 and side3

Page 25: Functions Why we use functions C library functions Creating our own functions.

miscellaneous

• you could skip writing a prototype all together and just put the function ahead of main. Not intuitive. Makes source code hard to read.

• you could implement AreaTriangle initially as a stub with no other code except return 0;

Page 26: Functions Why we use functions C library functions Creating our own functions.

1) Write a function named Smallest that takes three integer inputs and returns an integer that is the smallest of the three inputs. Write the prototype for the Smallest function. Write a program that gets 3 integers from a user and displays the smallest

2) Write a function that, given a letter of the alphabet, returns true if the letter is a vowel (lower or uppercase) and returns false if the letter is not a vowel.

IsAVowel true if letter is a vowelfalse if letter is not a vowel

letter (char)

3) Write a program to invoke the IsAVowel function. Inputs a letter and prints out whether it is or is not a vowel.

Page 27: Functions Why we use functions C library functions Creating our own functions.

Automatic conversionsWhat if the parameter you want to send is different than that expected by the function?

double Square (double y); int main () { double xSquared; for (int x = 1; x <= 10; x++) { xSquared = Square (x); cout << xSquared << “ “ ; } return 0;}

x converted to double. Works fine.

Page 28: Functions Why we use functions C library functions Creating our own functions.

Automatic conversionsWhat if the parameter you want to send is different than that expected by the function?

int Square (int y); int main () { double d1 = 9.8; cout << Square (d1); // displays 81 return 0; return 0;}

d1 converted to int. Information is lost. Beware!

Page 29: Functions Why we use functions C library functions Creating our own functions.

Promotion rules

• Specify which types can be converted to other types without losing data.

• As long as you follow the promotion rules then conversions are okay.

• Must promote to a data type higher in the hierarchy

Page 30: Functions Why we use functions C library functions Creating our own functions.

Promotion hierarchy

long doubledoublefloatunsigned long intlong intunsigned intintunsigned short intshort intunsigned charchar

Page 31: Functions Why we use functions C library functions Creating our own functions.

Common programming error

• Losing data by allowing the compiler to change a data type and not follow the promotion rules.

Page 32: Functions Why we use functions C library functions Creating our own functions.

Exercises1) Find the error in each of the following program segments and explain how to fix it. a) int sum (int x, int y) {

int result; result = x + y;}

b) int sum (int n) { if (0 == n) return 0; else n = n + n;}

c) in main program: double x = 1E10; cout << "square of 1E10 = " << square (x) << endl; int square (int x) { return x * x; }