0% found this document useful (0 votes)
44 views32 pages

Where Are We, and Where To Go?: Operation

1. The document discusses different programming paradigms including procedural, object-oriented, functional, logical, generic and declarative programming. 2. It explains key concepts of procedural and object-oriented programming such as functions, parameters, classes, objects. It also covers recursion, scope of variables, parameter passing mechanisms. 3. The differences between declarative and procedural programming are discussed. Recursion is presented as an important technique for algorithm design and analysis. Several examples of recursive functions are provided.

Uploaded by

Vijaya Azimuddin
Copyright
© Attribution Non-Commercial (BY-NC)
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
44 views32 pages

Where Are We, and Where To Go?: Operation

1. The document discusses different programming paradigms including procedural, object-oriented, functional, logical, generic and declarative programming. 2. It explains key concepts of procedural and object-oriented programming such as functions, parameters, classes, objects. It also covers recursion, scope of variables, parameter passing mechanisms. 3. The differences between declarative and procedural programming are discussed. Recursion is presented as an important technique for algorithm design and analysis. Several examples of recursive functions are provided.

Uploaded by

Vijaya Azimuddin
Copyright
© Attribution Non-Commercial (BY-NC)
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPT, PDF, TXT or read online on Scribd
You are on page 1/ 32

Slide 1

Where are we, and where to go?


Procedural programming, Or structured programming, Or imperative programming (104), modularity OOP (104, 151) (171)

Simple types of variables Static objects (variables=objects) Array, struct Dynamic objects
pointer

(member) variables

class

objects

Data structure: Linear: list, stack, queue Nonlinear: tree, graph

operation
3 program structures (assignment, conditional, iteration) Functions on objects (member) functions Algorithms

C, Pascal

C++, Java

Data, variable, object Operation, function, procedure, subprogram, module, method

Algorithms+Data Structures = Programs Niklaus Wirth

Slide 2

Programming paradigms
Imperative

programming Declarative programming


Functional (Lisp) and logical (Prolog) programming Highly recursive

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(); }

a=f1(x); b=f2(y); c=f3(z); } int f1() { } int f2() { } int f3() { }

Class B { Int y; Int f2() }


Class C { Int z; Int f3(); }

Object oriented programming: a sequence of objects! Objects communicate by sending messages.

Slide 4

Communication between functions:

Pass by value: formal parameters and arguments are different variables.

ideal desirable behavior


(but not efficient some times)

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

void f(int& b) {}; int main() { int a; f(a); }

int a=10; int& b; int& b = a; int& c = a; b = 100; a ???


a
b

10

Relationship with pointers (later on)!

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

Call by Constant Reference


int f( const int &x ) { cout << value of x = << x << endl; x = 4; // invalid } main() { int v = 5; f(v); cout << value of v = << v << endl; }

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 constant reference

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 constant reference,

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; }

Global (local to the file)


int x; int main() { x=0; cout << x << endl;
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

for (int i=1;i<10;i++) cout << A[i];

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.

It is forbidden in structured programming!

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)

f (a<b) MIN=a; else MIN=b;

Good style!!!

Slide 16

Declarative vs. Procedural


What to do vs. how to do Interface vs. actions Separate compilation *.h (declaration) vs *.cc (actions, procedures)

Functional programming
A procedure is more a mathematical function

Recursion

Important for algorithm design and analysis

Slide 18

The tower of Hanoi


Move a stack of disks of different sizes from one rod to another through a third one: - only one disk is moved each time - always smaller ones on top of bigger ones

Check any webpage!

Slide 19

More declarative than procedural! what vs. how


// move n disks from A to C via B void tower(int n, char A, char B, char C) { if (n==1) move(1,A,C); else {tower(n-1,A,C,B); move(n,A,C); tower(n-1,B,A,C)}; }

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

Normal (non-recursive) functions


void three() { } void two () { three(); } void one () { two(); } void main() { one(); }

Declarative with recursion Seems to be more automatic!

Recursive function
int fac(int n){ int product;

if(n <= 1) product = 1; else product = n * fac(n-1);


return product; } void main(){ fac(3); }

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

Recursion vs. Iteration (non-recursive)

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.

To iterate is human, to recurse, divine!

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

Sum of the array


Write a recursive function that takes a double array and its size as input and returns the sum of the array: double asum(int a[], int size){ double sum; if(size==0) sum=0; else sum=asum(a,size-1)+a[size-1]; return sum; }

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

Counting the number of zeros


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

You might also like