Announcements HW 1 grades is announced this week

  • Slides: 17
Download presentation
Announcements HW 1 grades is announced this week New (2 nd) homework is assigned

Announcements HW 1 grades is announced this week New (2 nd) homework is assigned will be due next week 2 nd March Wednesday 19: 00 About functions and if-else statements Common Submission Mistakes In HW 1, some students submitted empty/wrong files Make sure that you send the cpp file; otherwise we cannot grade Please submit the required files only, not the entire project folder 7 z, rar and tar format is not allowed for compression; please use zip Do not use blanks, Turkish characters, special symbols in the filenames Only English alphabet letters, digits and underscore allowed General rules about homeworks Use of global variables (variables defined outside of functions) prohibited No abrupt program termination in the middle of the program. Modularity and code duplication are important Code duplication must be avoided Please write comments to your programs. 1

Functions Overview Functions are sequence of statements with its own local variables supports modularity,

Functions Overview Functions are sequence of statements with its own local variables supports modularity, reduces code duplication Data transfer between function to be called and caller function by means of parameters currently one-way from caller function into function to be called We will see how to return data back to the caller function 2

Function Prototype (from 2. 6) Functions definition has two parts function heading name, parameters,

Function Prototype (from 2. 6) Functions definition has two parts function heading name, parameters, return type function body (local variables and statements within curly brackets) void display (string name) { cout << “Hello ” << name << endl; } Like variables, a function must be declared before its first call Problem of function declaration order You cannot call a function before you declare it SOLUTION: You may define function prototypes (a copy of the heading) at the beginning without function declarations 3

Function Prototype – Example Problem What is the problem below (program order. cpp) ?

Function Prototype – Example Problem What is the problem below (program order. cpp) ? void Hi (string name) { cout << "Hi " << name << endl; Greetings(); } void Greetings() { cout << "Things are happening inside this computer" << endl; } int main() { Hi("Fred"); return 0; } Greetings() is called in Hi() but it is declared afterwards 4

Function Prototype – Solution Add function prototypes to the beginning (order 2. cpp) #include

Function Prototype – Solution Add function prototypes to the beginning (order 2. cpp) #include <iostream> #include <string> using namespace std; void Hi(string); void Greetings(); Function Prototypes void Hi (string name) { cout << "Hi " << name << endl; Greetings(); } Declarations void Greetings() { } cout << "Things are happening inside this computer" << endl; int main() { Hi("Fred"); return 0; } 5

Function Prototypes *** Do not forget semicolon after the prototype definition *** no semicolon

Function Prototypes *** Do not forget semicolon after the prototype definition *** no semicolon after the parameters in normal definition Sometimes prototypes are not necessary if the order of function calls allows but it is good programming practice to have them Parameter names are not needed in prototypes but it is OK if you have the parameter names In #included files we have the functions’ prototypes only implementations of function bodies are in libraries or in other cpp files they are linked together 6

Functions that return values Functions we’ve written so far are void functions They do

Functions that return values Functions we’ve written so far are void functions They do a job and return back to caller, but without a value Parameters are used for one-way data transfer into the function to be called How about transfer a computed value out of a function? to the main program or to other function (the caller) Non-void functions can return values of any type function call becomes an expression when the function finishes, the function call is replaced by the returned value this way, values computed in functions can be transferred into the caller functions void function call is not used in an expression, i. e. no value is associated with a void function Head(); Do. That(); Verse("cow", "moo"); 7

Functions that return values Example (see area_func_return. cpp): suppose circlearea function takes the radius

Functions that return values Example (see area_func_return. cpp): suppose circlearea function takes the radius as parameter and returns the area. In the program we call circlearea as an expression (you have to use the returned value somewhere) area = circlearea(r); cout << circlearea(12) << endl; if (circlearea(r/2) >= 100) { cout << “large circle” << endl; } circlearea(r); 8 //syntax ok, but meaningless because //function call returned value is not used.

Math library functions Mathematical functions like square root, logarithm, sin, cos, etc. Prototypes are

Math library functions Mathematical functions like square root, logarithm, sin, cos, etc. Prototypes are in header file cmath #include <cmath> Full list is in page 758 (Table F. 1) – partial list is in table 4. 5. correction in Table F. 1: int abs (int x) Keep these math library functions on your cheat-sheet for the exam Example use of function sqrt 9 see usemath. cpp how did we use sqrt function? in cout as an expression could we use sqrt in assignment? How? yes, let’s do it. what happens if value is negative? try and see! we can add some if statements to display an error message in case of negative value

Function Syntax return-type func-name(parameters) { local variables statements } Example: Function to calculate volume

Function Syntax return-type func-name(parameters) { local variables statements } Example: Function to calculate volume of a sphere function body 10 double Sphere. Vol(double radius) { return 4. 0*radius*radius*acos(-1)/3; }

Function Syntax double Sphere. Vol(double radius) { return 4. 0*radius*radius*acos(-1)/3; } Function heading/prototype shows

Function Syntax double Sphere. Vol(double radius) { return 4. 0*radius*radius*acos(-1)/3; } Function heading/prototype shows return type can be any type (including string) Function body may have several statements in it return statement is used to determine the value returned from function, so the expression after it must be of the return type Function body must include at least one return statement The return statement causes the function to exit immediately and to return the value after return A function can have more than one return statements, but only one is executed when the function is called (see next example) Only one return is a good programming style to have control of bigger functions 11

Functions can return strings A program piece that uses that function string Week. Day(int

Functions can return strings A program piece that uses that function string Week. Day(int day) // precondition: 0 <= day <= 6 // postcondition: return "Sunday" for 0, // "Monday" for 1, // { … if (0 == day) else if (1 == else if (2 == else if (3 == else if (4 == else if (5 == else if (6 == } "Saturday" for 6 return "Sunday"; day) return "Monday"; day) return "Tuesday"; day) return "Wednesday"; day) return "Thursday"; day) return "Friday"; day) return "Saturday"; string day. Name; int day. Num; cout << " enter day (0 -6): "; cin >> day. Num; day. Name = Week. Day(day. Num); Which is/are correct use of Week. Day function? Why? cout << Week. Day(5) << endl; int j = Week. Day(0); cout << Week. Day(2. 1) << endl; string s = Week. Day(22); Week. Day(3); 12

Function documentation Functions usually have a precondition What conditions (e. g. value of parameters)

Function documentation Functions usually have a precondition What conditions (e. g. value of parameters) must be true for the function to work as intended? If there are no parameters, then no precondition Some functions work for every parameter value no precondition Functions always have a postcondition If precondition is satisfied what does the function do? What does the function return? 13

Example – Compare cost of pizza sizes Problem: Calculate and compare price per square

Example – Compare cost of pizza sizes Problem: Calculate and compare price per square inch of large and small size pizzas Solution: A function, say Cost, that takes the pizza radius and price as parameters and returns price per square inch In main() input radiuses and prices of large and small pizzas calculate the per square inch costs by calling the cost function display the results on screen compare the unit costs to find out which one is best value See pizza 2. cpp 14

Example - When is a year a leap year? Every year divisible by four

Example - When is a year a leap year? Every year divisible by four is a leap year Except years divisible by 100 are not Except years divisible by 400 are Alternatively: Every year divisible by 400 is a leap year Otherwise, years divisible by 100 are not leap years Otherwise, years divisible by 4 are leap years Otherwise, not a leap year Boolean function bool Is. Leap. Year(int year); // pre: year > 0 // post: return true if year is a leap year 15

function 16 bool Is. Leap. Year(int year) // precondition: year > 0 // postcondition:

function 16 bool Is. Leap. Year(int year) // precondition: year > 0 // postcondition: returns true if year is a leap year, else returns false { if (year % 400 == 0) // divisible by 400 { return true; } else if (year % 100 == 0) // divisible by 100 { return false; } else if (year % 4 == 0) // divisible by 4 { return true; } return false; See } isleap. cpp int main() { int year; cout << "enter a year "; cin >> year; if (Is. Leap. Year(year)) { cout << year << " has 366 days, it is a leap year" << endl; } else { cout << year << " has 365 days, it is NOT a leap year" << endl; } return 0; }

There’s more than one way No if/else necessary in the function body bool Is.

There’s more than one way No if/else necessary in the function body bool Is. Leap. Year(int year) // precondition: year > 0 // post: return true if year is a leap year { return ( year % 400 == 0 ) || ( year % 4 == 0 && year % 100 != 0); } How does this work? Is this version more efficient? Are these two versions different from user perspective? 17