Presentation is loading. Please wait.

Presentation is loading. Please wait.

Announcements General rules about homeworks

Similar presentations


Presentation on theme: "Announcements General rules about homeworks"— Presentation transcript:

1 Announcements General rules about homeworks
HW1 grades will be announced this week New (2nd) homework was assigned last week will be due next week March 8th on Wednesday at 19:00 About functions and if-else statements Common Submission Mistakes In HW1, 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 7z, 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 are 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.

2 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

3 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

4 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

5 Function Prototype – Solution
Add function prototypes to the beginning (order2.cpp) #include <iostream> #include <string> using namespace std; void Hi(string); void Greetings(); 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; } Prototypes Function Declarations

6 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

7 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(); DoThat(); Verse("cow", "moo");

8 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); //syntax ok, but meaningless because //function call returned value is not used.

9 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 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

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

11 Function Syntax double SphereVol(double radius) {
return 4.0*radius*radius*radius*acos(-1)/3; } Function heading/prototype shows return type. 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

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

13 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?

14 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 pizza2.cpp

15 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 IsLeapYear(int year); // pre: year > 0 // post: return true if year is a leap year

16 Implementation and use of leap year function
bool IsLeapYear(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; } int main() { int year; cout << "enter a year "; cin >> year; if (IsLeapYear(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; } See isleap.cpp

17 There’s more than one way
No if/else necessary in the function body bool IsLeapYear(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?


Download ppt "Announcements General rules about homeworks"

Similar presentations


Ads by Google