1 / 14

First Midterm Exam

First Midterm Exam. November 22 , 200 8 , Saturday , 1 0 :40 – 1 2 :20, max 100 minutes One A4 size cheat-note allowed (both sides could be used) Closed book, closed notes, no calculators and no laptops Until the end of loops up to 5.4 from book (excluding 4.6.3)

ardara
Download Presentation

First Midterm Exam

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. First Midterm Exam • November 22, 2008, Saturday, 10:40 – 12:20, max 100 minutes • One A4 size cheat-note allowed (both sides could be used) • Closed book, closed notes, no calculators and no laptops • Until the end of loops • up to 5.4 from book (excluding 4.6.3) • but you are responsible everything covered in class even if not covered in book • e.g. robot class (all member functions; not only the ones you used in hw) • several examples • Problem set and solutions are up on the web

  2. First Midterm Exam – Exam Places if (lastname >= "Acar" && lastname <= "Başar")     cout << " FENS L045" << endl; else if  (lastname >= "Başaran" && lastname <= "Canarslan")     cout << " FENS L062 " << endl; else if  (lastname >= "Cev" && lastname <= "Çokay")     cout << " FENS L063 " << endl; else if (lastname >= "Çokuysal" && lastname <= "Koç")     cout << " FENS G077 amfi" << endl; else if (lastname >= "Konukoğlu" && lastname <= "Ongun")     cout << " FENS G035 " << endl; else if (lastname >= "Onur" && lastname <= "Öztürk")     cout << " FASS G022 " << endl; else if (lastname >= "Özüpekoğlu" && lastname <= "Stamati")     cout << " FASS G049 " << endl; else if (lastname >= "Su" && lastname <= "Tokman")     cout << " FASS G052 " << endl; else if (lastname >= "Tomaç" && lastname <= "Zilan")     cout << " FASS G062 amfi" << endl;

  3. Reference parameters (6.2.3) • It’s useful for a function to return more than one value • Find roots of a quadratic • two return values. What are they? • Get first and last name of a user and return them • two return values • Functions are limited to one return value using return • If you need to return several values back from a function • Use reference parameters • The idea is that when the value of the parameter is modified function modifies the value of the corresponding argument as well

  4. Value Parameters - Pass by value • The parameters we have seen so far are value parameters • their arguments are passed by value • if you change the value of a parameter in function, corresponding argument does NOT change in the caller function • Example: see passbyvalue.cpp (not in book) • parameter a changes in function average, but corresponding argument, num1, does not change in main Enter two integers: 10 15 in main before calling average: num1 = 10, num2 = 15 beginning of function average: a = 10, b = 15 end of function average: a = 25, b = 15 average is 12.5 in main after calling average: num1 = 10, num2 = 15

  5. Reference Parameters – Pass by Reference • Reference parameters are used to change the value of the argument in the caller function as well • ampersand between type and name void myfunction (int & num) • if you change the value of a reference parameter in function, corresponding argument changes in the caller function • Argument of a reference parameter must be a variable • This is a reasonable rule, because otherwise its value wouldn’t change • See passbyreference.cpp (not in book) • parameter a changes in function average; corresponding argument, num1, changes in main as well Enter two integers: 10 15 in main before calling average: num1 = 10, num2 = 15 beginning of function average: a = 10, b = 15 end of function average: a = 25, b = 15 average is 12.5 in main after calling average: num1 = 25, num2 = 15

  6. Underlying Mechanisms • For value parameters, the arguments’ values are copied into parameters • arguments and parameters have different memory locations double average (int a, int b) average(num1, num2) 10 15 copy value copy value main function 10 15

  7. Underlying Mechanisms • For reference parameters, the parameter and the argument share the same memory location • parameter is an alias of argument double average (int & a, int b) average(num1, num2) 15 refers to the same memory location copy value main function 10 15

  8. Example: Swap • Write a function that swaps the values of its two integer parameters void swap (int & a, int & b) { int temp; temp = a; a = b; b = temp; } • How do we use this in main? int a=5, b=8; swap (a,b); // a becomes 8, b becomes 5 swap(a,5); // syntax error, arguments must be variables

  9. Examples • What’s prototype for a void function that takes a stringas parameter and returns the number of vowels and consonants in it. void letters (string s, int & vowels, int & consonants); • What’s prototype for a void function that returns the number of hours, minutesin N seconds. Where N is a parameter? void TimeConversion (int N, int & hours, int & minutes);

  10. Reference Parameters are not only to return multiple values • Even if you have a single value to return, you may prefer to return it as a reference parameter, not as the return value of the function. • ToLower function,defined in strutils, changes its argument to all lowercase. It is actually a void function, i.e. does not return anything as the function’s return value • Prototype is void ToLower(string & s); • Example use string s = "HeLLo"; ToLower(s); // s becomes “hello”

  11. Example (See roots.cpp) • Roots of quadratic equation ax2 + bx + c = 0 • what could be a prototype? void roots (double a, double b, double c, double & r1, double &r2); • What happens if • one root? • no roots? • how will you inform the caller function about the number of roots? • necessary in order to let the caller function to interpret arguments for r1 and r2 • Solution: let the function return (as the return value) an integer value for the number of roots • So, the prototype becomes int roots (double a, double b, double c, double & r1, double & r2);

  12. Parameter Passing: const-reference • Pass by value (value parameters) has overheads • copying the value • memory allocation for both parameter and argument • Sometimes we want to avoid the overhead of making the copy, but we don’t want to allow the argument to be changed. • const-reference parameters avoid copies, but cannot be changed in the function • trying to change a const-reference parameter is a syntax error • defined with const before a reference parameter void demo (const int & num, const string & s);

  13. Example • Count # occurrences of a letter in a string • write a function for it • Look at every character in the string int LetterCount(const string& s, const string& letter) // post: return number of occurrences of letter in s { int k, count = 0, len = s.length(); for(k=0; k < len; k++) { if (s.substr(k,1) == letter) { count++; } } return count; } • Calls below are legal int ec = LetterCount("elephant", "e"); string s = "hello"; cout << LetterCount(s, "a");

  14. General rules for Parameters • Const-reference parameters allow constants and literals to be passed • For example, “elephant” cannot be passed asan argument for a reference parameter, but it is ok with const-reference • Some good-programming tips • Built-in types (int, double, bool, char) - pass by value unless you change it and return from the function • All other types - pass by const-reference unless you change it and return from the function • When you change and eant to return the changed value, use reference parameters • What about using classes as the parameter type? • use reference parameters if changing the state of the parameter object • that is why we use reference parameters for Robot objects • use const reference if you are not changing the state of the parameter object

More Related