Where Are We, and Where To Go?: Operation
Where Are We, and Where To Go?: Operation
Simple types of variables Static objects (variables=objects) Array, struct Dynamic objects
pointer
(member) variables
class
objects
operation
3 program structures (assignment, conditional, iteration) Functions on objects (member) functions Algorithms
C, Pascal
C++, Java
Slide 2
Programming paradigms
Imperative
Object-oriented
programming
Generic
programming
Slide 3
procedural programming:
main(), is the first function, and is composed of a sequence of procedures (or functions in C++). Functions communicate by passing parameters.
int main() { int x,y,z; int a,b,c; int main() { A a; B b; C c; a.f1(); b.f2(); c.f3(); } Class A { Int x; Int f1(); }
Slide 4
Pass by reference: they are the same variables, but different names! should carefully handled!
Slide 5
Reference: X&
int& b a; b is an alternative name for a
10
Slide 6
Call by Value
int f(int x) { cout << value of x = << x << endl; x = 4; } main() { int v = 5; f(v); cout << value of v = << v << endl; }
Output: Value of x = Value of v = When a variable v is passed by value to a function f, its value is copied to the corresponding variable x in f Any changes to the value of x does NOT affect the value of v Call by value is the default mechanism for parameter passing in C++
5 5
Slide 7
Call by Reference
int f(int &x) { cout << value of x = << x << endl; x = 4; } main() { int v = 5; f(v); cout << value of v = << v << endl; }
5 Output: Value of x = 4 Value of v = When a variable v is passed by reference to a parameter x of function f, v and the corresponding parameter x refer to the same variable Any changes to the value of x DOES affect the value of v
Slide 8
Passing variable v by constant reference to parameter x of f will NOT allow any change to the value of x. It is appropriate for passing large objects that should not be changed by the called function.
Slide 9
Parameter Passing
Call by value
for small objects that should not be changed by the function for large objects that should not be changed by the function
Call by reference
is appropriate for all objects that may be changed by the function, not recommended!!! rare!
Slide 10
Return Passing
return by value,
for small objects that should not be changed by the function for large objects that should not be changed by the function
return by reference,
for all objects that may be changed by the function, not recommended!!! rare!
Slide 11
Scope of variables
The scope of a declaration is the block of code where the identifier is valid for use. Some code enclosed in braces
A global declaration is made outside the bodies of all functions and outside the main program. It is normally grouped with the other global declarations and placed at the beginning of the program file. A local declaration is one that is made inside the body of a function. Locally declared variables cannot be accessed outside of the function they were declared in. Local to a function (the variables in Main are also local, local to main function) It is possible to declare the same identifier name in different parts of the program: local to a block
Slide 12
Local to functions
int main() { int x,y,z; } void f() { int x; }
Local to blocks
void f() { int x; x=1; { int x; x=2; cout << x << endl; } cout << x << endl; }
Slide 13
In a for-loop
{ int i; for (i=1;i<10;i++) cout << A[i]; }
equivalent
Slide 14
Global Variables
Undisciplined use of global variables may lead to confusion and debugging difficulties.
Instead of using global variables in functions, try passing local variables by reference.
Slide 15
Summary
Pass by value
Global variable
Pass by reference
MIN; d min(int,int); main() { int x,y; cin >> x >> y >> endl; min(x,y); cout << MIN;
void min(int,int,int&); int main() { int x,y,mini; cin >> x >> y >> endl; min(x,y,mini); cout << mini; } void min(int a, int b, int& m) { if (a<b) m=a; else m=b; }
int min(int,int); int main() { int x,y,mini; cin >> x >> y >> endl; mini=min(x,y); cout << mini; } int min(int a, int b) { int m; if (a<b) m=a; else m=b; return (m); }
d min(int a, int b)
Good style!!!
Slide 16
Functional programming
A procedure is more a mathematical function
Recursion
Slide 18
Slide 19
void move(int k, char X, char Y) { cout << move disc << k << from << X << to Y << endl; }
Slide 20
Trace tower(4,A,B,C)
Slide 21
Recursive function
int fac(int n){ int product;
Functions are calling (DIFFERENT) functions One function (three) is the last stopping function
calling the SAME function ( with different parameters) The stopping function is already included as a condition
Slide 22
Recursive function
A recursive function is just a function which is calling one (or more) other functions which happen to be the same!!! Though the function is the same, parameters are always smaller There is always at least one stopping case to terminate
It is a kind of loop, even more powerful as a general problem-solving technique! --- thinking recursively!
Slide 23
A recursive solution may be simpler to write (once you get used to the idea) than a non-recursive solution.
But a recursive solution may not be as efficient as a nonrecursive solution of the same problem.
Slide 24
Everything is recursive
Linear search Length of a string Min, max of an array Selection sort Bubble sort Binary search:
Compare search element with middle element of the array: If not equal, then apply binary search to half of the array (if not empty) where the search element would be.
Slide 25
For n elements:
Start from the first element While (not yet finished) do do the current element move to the next one toto(n) If 0 or 1 element, just do it else decompose into first element and the n-1 remaining elements do the first element toto(n-1)
Slide 26
Exponential
How to write exp(int x, int y) recursively? int exp(int x, int y) { int power; if(y==0) power = 1; else power = x * exp(x, y-1); return power; }
Slide 27
Slide 28
Product of an array
Write a recursive function that takes a double array and its size as input and returns the product of the array:
double aprod(int a[], int size) { doulbe prod; if(size==0) prod=1; else prod=aprod(a,size-1)*a[size-1]; return prod; }
Slide 29
Write a recursive function that counts the number of zero digits in a non-negative integer zeros(10200) returns 3
int zeros(int n){ int z; if (n<10) if (n==0) z=1; else z=0; else z=zeros(n/10)+zeros(n%10);
return z;
}
n/10 the number n with the last digit removed n%10 the last digit of n
Slide 30
Find factors
Write a recursive function to determine how many factors m are part of n. For example, if n=48 and m=4, then the result is 2 (48=4*4*3).
int factors(int n, int m){ int f; if(n%m != 0) f=0; else f=1+factors(n/m, m); return f; }
Slide 31
Binary search
int bsearch(int data[],lower,upper,value) { if (lower<=upper) { mid=(lower+upper)/ 2; if (data[mid] == value) pos=mid;}; else if (data[mid]>value) pos=bsearch(data,lower,mid1,value); else pos=bsearch(data,mid+1,upper,value); } return pos; }
Slide 32
Sorting
Take the minimum, then sort the remaining elements