reach cecs 130 final test review n.
Download
Skip this Video
Loading SlideShow in 5 Seconds..
REACH CECS 130 Final Test Review PowerPoint Presentation
Download Presentation
REACH CECS 130 Final Test Review

Loading in 2 Seconds...

play fullscreen
1 / 88

REACH CECS 130 Final Test Review - PowerPoint PPT Presentation


  • 81 Views
  • Uploaded on

REACH CECS 130 Final Test Review. Data. How a computer stores data in its internal memory RAM (Random-Access Memory) - temporary ROM (Read-Only Memory) – non volatile Store data in bytes How you store data temporarily Create variables based on fundamental types ( bool , char, int , float)

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about 'REACH CECS 130 Final Test Review' - tasha-slater


Download Now 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.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript
slide2
Data
  • How a computer stores data in its internal memory
    • RAM (Random-Access Memory) - temporary
    • ROM (Read-Only Memory) – non volatile
    • Store data in bytes
  • How you store data temporarily
    • Create variables based on fundamental types (bool, char, int, float)
  • constants: #define CONSTNAME value
  • sizeof()
control statements boolean operators
Control Statements – Boolean Operators
  • What do each of the following evaluate to?

1. long elves = 8;

int dwarves = 8;

if(elves==dwarves) //true or false?

if(elves!=0) //true or false?

2. int elves = 4;

int dwarves = 5;

if(dwarves > (2/3)) //true or false?

3. if(0 < x < 99) //true or false?

4. if(0<= (0<1))//true or false?

control statements boolean operators answers
Control Statements – Boolean Operators -Answers
  • What do each of the following evaluate to?

1. long elves = 8;

int dwarves = 8;

if(elves==dwarves) //true

if(elves!=0) //true

2. int elves = 4;

int dwarves = 5;

if(dwarves > (2/3)) //true

3. if(0 < x < 99) //true …TRUE (1) and FALSE (0) < 99

4. if(0<= (0<1))//true

if statements
If statements
  • if(condition)

statement;

else if (condition)

statement;

  • condition ? expr1 : expr2
    • ex. z = ( x > y ) ? y : x ;
    • Can we do next statement?

(x>y) ? cout << “x is greater than y.” : cout << “x isn’t greater than y.”;

switch case statements
Switch-case statements

switch(expression){

case expr1:

statement;

break;

case expr2:

statement;

break;

case expr3:

statement;

break;

default:

statements

break;

}

loops
Loops
  • while (condition)

{

statements;

You need to maintain a state to break loop.

}

  • do

{

statements;

You need to maintain a state to break loop.

}

while(condition);

loops1
Loops
  • for (initialization; condition; expression)

{

statements;

}

  • Incrementing: Prefix and Postfix

int x = 5;

int y = 6;

int z = y++ //z=6, y=7 postfix operator

int z = ++x //z=6, x=6 prefix operator

for loop test
FOR LOOP TEST
  • Can you write a program that prints out the following?

0 1 2 3 4 5 6 7 8 9

answer
Answer

for ( int count = 0; count < 10; count ++)

{

cout <<count<<“”;

}

other challenge questions for loops
Other Challenge questions for Loops
  • Write a conditional statement that will assign x/y to x if y doesn’t equal 0.
  • Write a while loop that calculates the summation of positive integers from 1 to some number n.
  • Write a conditional statement that assigns x*y if x is even; otherwise , if x is odd and y doesn’t equal 0, assign x to x/y; if neither of the preceding cases is true, output to the screen that y is equal to 0.
how to declare and implement functions
How to declare and implement functions
  • Function declaration
  • Function definition
  • Function call
slide15

#include <iostream>

using namespace std;

int add(int, int);

int main(void)

{

int number1, number2;

cout << “Enter the first value to be summed:”;

cin >> number1;

cout << “\nEnter the second:”;

cin >> number2;

cout << “\n The sum is: “ << add (number1, number2) <<endl;

}

int add(int a, int b){return a+b;}

functions challenge
Functions Challenge
  • Write a function, called multiply that multiplies two numbers and returns the result
union
Union

Output:

9

3.1416

#include <stdio.h>

#include<stdlib.h>

union NumericType

{

int iValue;

long lValue;

double dValue;

};

int main()

{

union NumericType Values; // iValue = 10

Values.iValue=9;

printf("%d\n", Values.iValue);

Values.dValue = 3.1416;

printf("%f\n", Values.dValue);

system("pause");

}

malloc
Malloc()

Please enter how long your name is: 21

Please enter your name:

Nawaf

Hello Nawaf

Please enter how long your name is: -7

Failed allocation memory

calloc and realloc
Calloc and Realloc()

int *n;

int * n1;

n=( int * ) calloc(5, sizeof(int)); // Reserves a block of memory for 5 integers

//Decide you need to reallocate more memory later in the program

n1= (int *) realloc(n, 10 * sizeof(int));//allocate 10 integers instead of 5

if (n1!=NULL)

{

n=n1;

}

else printf("Out of memory!");

realloc() returns null if unable to complete or a pointer to the newly reallocated memory.

c files
C - Files

Do you know the syntax for each of these, used to read and write to data files?

  • Pointers: think of it as the memory address of the file
  • fopen()
  • fclose()
  • fscanf()
  • fprintf()
fopen file name mode
fopen(“file name”, “Mode”)
  • fopen() returns a FILE pointer back to the pRead variable
  • #include <cstdio>
  • Main()
  • {
  • FILE *pRead;
  • pRead = fopen(“file1.dat”, “r”);
  • if(pRead == NULL)
  • printf(“\nFile cannot be opened\n”);
  • else
  • printf(“\nFile opened for reading\n”);
  • fclose(pRead);
  • }
what does this code do
What does this code do?

int main ()

{

FILE * pFile;

char c;

pFile=fopen("alphabet.txt","wt");

for (c = 'A' ; c <= 'Z' ; c++) {

putc (c , pFile);//works like fprintf

}

fclose (pFile);

return 0;

}

fclose file pointer
fclose(file pointer)
  • Pretty basic.
  • Always close files when you use fopen.
fscanf file pointer data type variable in which to store the value
fscanf(FILE pointer, “data type”, variable in which to store the value)
  • Reads a single field from a data file
  • “%s” will read a series of characters until a white space is found
  • can do

fscanf(pRead, “%s%s”, name, hobby);

slide28

#include <stdio.h>

  • Main()
  • {
  • FILE *pRead;
  • char name[10];
  • pRead = fopen(“names.dat”, “r”);
  • if( pRead == NULL )
  • printf( “\nFile cannot be opened\n”);
  • else
  • printf(“\nContents of names.dat\n”);
  • fscanf( pRead, “%s”, name );
  • while( !feof(pRead) ) { // While end of file not reached
  • printf( “%s\n”, name ); // output content of name
  • fscanf( pRead, “%s”, name ); // scan from file next string
  • }
  • fclose(pRead);
  • }
slide29
Quiz

Kelly 11/12/86 6 Louisville

Allen 04/05/77 49 Atlanta

Chelsea 03/30/90 12 Charleston

Can you write a program that prints out the contents of this information.dat file?

slide30

#include <stdio.h>

  • Main()
  • {
  • FILE *pRead;
  • char name[10];
  • char birthdate[9];
  • float number;
  • char hometown[20];
  • pRead = fopen(“information.dat”, “r”);
  • if( pRead == NULL )
  • printf( “\nFile cannot be opened\n”);
  • else
  • fscanf( pRead, “%s%s%f%s”, name, birthdate, &number, hometown );
  • while( !feof(pRead) ) {
  • printf( “%s \t %s \t %f \t %s\n”, name, birthdate, number, hometown );
  • fscanf( pRead, “%s%s%f%s”, name, birthdate, &number, hometown );
  • }
  • fclose(pRead);
  • }
fprintf file pointer list of data types list of values or variables
fprintf(FILE pointer, “list of data types”,list of values or variables)
  • The fprintf() function sends information (the arguments) according to the specified format to the file indicated by stream. fprintf() works just like printf() as far as the format goes.
slide32

#include <stdio.h>

Main()

{

FILE *pWrite;

char fName[20];

char lName [20];

float gpa;

pWrite = fopen(“students.dat”,”w”);

if( pWrite == NULL )

printf(“\nFile not opened\n”);

else

printf(“\nEnter first name, last name, and GPA ”);

printf(“separated by spaces:”);

scanf(“%s%s%f”, fName, lName, &gpa);

fprintf(pWrite, “%s \t %s \t % .2f \n”, fName, lName, gpa);

fclose(pWrite);

}

slide33
Quiz
  • Can you write a program that asks the user for their
    • Name
    • Phone Number
    • Bank account balance

And then prints this information to a data file called accounts.dat ?

c input output
C++ Input/Output
  • Summary
    • Include #include <iostream> directive at beginning of program
    • Use cin to take data from user
    • Use cout to display data on screen
      • Display multiple strings and integers in the same cout statement by separating items with <<
c input output example
C++ Input/Output Example

#include <iostream>

#include<string>

using namespace std;

string name = “”;

int main(void)

{

cout<<“What is your name?”;

cin>>name;

cout<<endl<<“Hello”<<name.c_str();

return 0;

}

can you predict the printout
Can you predict the printout?

#include <iostream>

using namespace std;

int x = 25;

string str2 = “This is a test”;

int main( void )

{

cout<<“Test”<<1<<2<<“3”;

cout<<25 %7<<endl<<str2.c_str();

return 0;

}

answer1
Answer

Test 1234

This is a test

slide38
OOP
  • Declare classes
  • Create objects
  • 3 MAIN PRINCIPLES OF OOP
    • Data abstraction – hiding data members and implementation of a class behind an interface so that the user of the class corrupt that data
    • Encapsulation – each class represents a specific thing or concept. Multiple classes combine to produce the whole
    • Polymorphism-objects can be used in more than one program
classes
Classes
  • Classes are general models from which you can create objects
  • Classes have data members either data types or methods
  • Classes should contain a constructor method and a destructor method
  • See handout for example of a program that utilizes a class
declaring classes
Declaring Classes

class ClassName

{

memberList

};

memberList can be either data member declarations or method declarations

class declaration example
Class Declaration Example

Class Bow

{

//data member declarations

string color;

bool drawn;

intnumOfArrows;

Bow(string aColor); //constructor

~Bow(); //destructor

//methods

void draw();

int fire();

};

creating methods
Creating Methods

Return_type ClassName::methodName(argumentList)

{

methodImplementation

}

methods creation example
Methods Creation Example

//draws the bow

Void Bow::draw()

{

drawn = true;

cout<< “The “<<color<<“bow has been drawn.”<<endl;

}

advanced data types
Advanced Data Types
  • Arrays
  • Pointers
how to create arrays
How to create arrays
  • data_typearray_name [number-of-elements];
  • Two Dimensional Array

array_typearray_name [number_of_ROWS][number_of_COLUMNS];

how to create pointers
How to create pointers
  • type* pointer_name;
  • ex. int my_int;

int* my_int_pointer = &my_int;

Assigns the address of my_int to the pointer

useful string functions
Useful string functions
  • Copying strings from one to another
    • char* strcpy(char* p, const char* q);
    • char s[6];

strcpy(s, “Hello”);

  • To combine strings
    • char* strcat(char* p, const char* q);
    • char s[12] = “Hello”

strcat(s, “World”);

useful string functions1
Useful string functions
  • To copy n characters from q to the of p.
  • char* strncpy(char* p, const char* q, int n);
    • char s [7] = “Say “;

char t[] = “Hi”;

strncpy (s, t, 2)

Output:

Hiy

challenge question
Challenge question
  • Can you write a program using C++ that uses a FOR loop to initialize a 2D array that looks like the following {0,5,10,15}{0,2,4,6}
answer2
Answer

#include<iostream>

using namespace std;

int main(){

int array[2][4], , row, column;

for(row=0;row<2;row++)

for(column=0;column<4;column++){

if(row==0)

array[row][column]=column*5;

else if(row==1)

array[row][column]=column*2;

}

for(row=0; row<2; row++){

for(column =0; column <4; column ++)

cout<<array[row][column]<<" ";

cout<<endl;

}

system("pause");

return 0;

}

basics of c
Basics of C++
  • Basic framework for a program
  • How to Comment
  • How to Print
  • How to store variables
  • How to Print stored variables
  • How to find the size of a variable
  • How to convert from one data type to another
  • How to Declare Constants
inheritance
Inheritance

class aClass // Base class

{

public:

intanInt;

}

class aDerivedClass : public aClass //Derived class

{

protected:

float aFloat;

};

inheritance for mammals kingdome
Inheritance for Mammals Kingdome

#include <iostream.h>

enum BREED { YORKIE, CAIRN, DANDIE, SHETLAND, DOBERMAN, LAB };

class Mammal{

public:

Mammal(); // constructors

~Mammal(); //destructor

//accessors

int GetAge()const;

void SetAge(int);

int GetWeight() const;

void SetWeight();

//Other methods

void Speak();

void Sleep();

protected:

int itsAge;

int itsWeight;

};

class Dog : public Mammal {

public:

Dog(); // Constructors

~Dog();

// Accessors

BREED GetBreed() const;

void SetBreed(BREED);

// Other methods

// WagTail();

// BegForFood();

protected:

BREED itsBreed;

};

Animals

Mammals

Reptiles

Horse

Dog

Hound

Terrier

Yorkie

Cairn

private vs protected
Private vs. Protected
  • Private members are not available to derived classes. You could make itsAge and itsWeight public, but that is not desirable. You don't want other classes accessing these data members directly.
  • What you want is a designation that says, "Make these visible to this class and to classes that derive from this class." That designation is protected. Protected data members and functions are fully visible to derived classes, but are otherwise private.
overriding functions
Overriding Functions
  • When do we need to override functions?
    • If you are a programmer example in your slides.
    • If we consider “Woof” of the dog as speak example.
  • When a derived class creates a function with the same return type and signature as a member function in the base class, but with a new implementation, it is said to be overridingthat method.
overriding example
Overriding example

#include <iostream.h>

enum BREED { YORKIE, CAIRN, DANDIE, SHETLAND, DOBERMAN, LAB };

class Mammal {

public:

// constructors

Mammal() { cout << "Mammal constructor...\n"; }

~Mammal() { cout << "Mammal destructor...\n"; }

//Other methods

void Speak()const { cout << "Mammal sound!\n"; }

void Sleep()const { cout << "shhh. I'm sleeping.\n"; }

protected:

int itsAge;

int itsWeight;

};

class Dog : public Mammal {

public:

// Constructors

Dog(){ cout << "Dog constructor...\n"; }

~Dog(){ cout << "Dog destructor...\n"; }

// Other methods

void WagTail() { cout << "Tail wagging...\n"; }

void BegForFood() { cout << "Begging for food...\n"; }

void Speak()const { cout << "Woof!\n"; } // This function is overriding the base class Speak() function

private:

BREED itsBreed;

};

int main() {

Mammal bigAnimal;

Dog fido;

bigAnimal.Speak();

fido.Speak();

getchar();

return 0;

}

overloading functions
Overloading Functions
  • When you overload a method, you create more than one method with the same name, but with a different signature. When you override a method, you create a method in a derived class with the same name as a method in the base class and the same signature.
overloading example
Overloading example

#include<iostream.h>

int area(int x); // square area

int area(intx,int y); //triangle area

float area(intx,int y, int radius); //circle area

int main(){

int x=4, y=5, rad=3;

cout<<"The Square area is :"<<area(x);

cout<<"\nThe Triangle area is :"<<area(x,y);

cout<<"\nThe Circle area is :"<<area(x,y,rad);

getchar();

return 0;

}

int area(int x) // square area

{ return x*x; }

int area(intx,inty ) //triangle area

{ return x*y; }

float area(intx,int y, int radius) //circle area

{ return radius*radius*3.14; }

Output:

The Square area is: 16

The Triangle area is :20

The Circle area is: 28.26

another overloading example
Another overloading example

#include <iostream.h>

class Mammal

{

public:

void Move() const { cout << "Mammal move one step\n"; }

void Move(int distance) const{

cout<< "Mammal move ";

cout<< distance <<" _steps.\n";

}

protected:

intitsAge;

intitsWeight;

};

class Dog : public Mammal {

public:

// You may receive a warning that you are hiding a function!

void Move() const { cout << "Dog move 5 steps.\n"; }

};

intmain() {

Mammal bigAnimal;

Dog fido;

bigAnimal.Move();

bigAnimal.Move(2);

fido.Move(8);// canI do this?

fido.Move();

return 0;

}

Output:

Mammal move one step

Mammal move 2 steps.

Dog move 5 steps

virtual functions
Virtual Functions
  • To call a function you’ve overridden in a derived class you need to use virtual functions.
  • Example:

struct Base {

virtualvoiddo_something() = 0;

};

structDerived1 : public Base {

voiddo_something() {

cout << "I'm doing something"; }

};

struct Derived2 : public Base {

voiddo_something() {

cout << "I'm doing something else"; }

};

int main() {

Base *pBase = new Derived1;

pBase->do_something();//does something

deletepBase;

pBase = new Derived2;

pBase->do_something();//does something else

deletepBase;

return 0;

}

another example
Another Example

int main()

{

Mammal* theArray[5];

Mammal* ptr;

int choice, i;

for ( i = 0; i<5; i++)

{

cout << "(1)dog (2)cat (3)horse (4)pig: ";

cin >> choice;

switch (choice)

{

case 1: ptr = new Dog;

break;

case 2: ptr = new Cat;

break;

case 3: ptr = new Horse;

break;

case 4: ptr = new Pig;

break;

default: ptr = new Mammal;

break;

}

theArray[i] = ptr;

}

for (i=0;i<5;i++)

theArray[i]->Speak();

system("pause");

return 0;

}

Output:

(1)dog (2)cat (3)horse (4)pig: 1

(1)dog (2)cat (3)horse (4)pig: 2

(1)dog (2)cat (3)horse (4)pig: 3

(1)dog (2)cat (3)horse (4)pig: 4

(1)dog (2)cat (3)horse (4)pig: 5

Woof!

Meow!

Winnie!

Oink!

Mammal speak!

#include<stdlib.h>

#include <iostream.h>

class Mammal {

public:

Mammal():itsAge(1) { }

~Mammal() { }

virtual void Speak() const { cout << "Mammal speak!\n"; }

protected:

int itsAge;

};

class Dog : public Mammal

{

public:

void Speak()const { cout << "Woof!\n"; }

};

class Cat : public Mammal

{

public:

void Speak()const { cout << "Meow!\n"; }

};

class Horse : public Mammal

{

public:

void Speak()const { cout << "Winnie!\n"; }

};

class Pig : public Mammal

{

public:

void Speak()const { cout << "Oink!\n"; }

};

virtual functions when
Virtual functions, When?
  • Only if you have to redefine a function in a Derived class that is already defined in Base Class, otherwise, it’s just extra resources when executed.
pointers to base class
Pointers to base class

#include <iostream>

using namespace std;

class CPolygon {

protected:

int width, height;

public:

void set_values (int a, int b)

{ width=a; height=b; }

};

class CRectangle: public CPolygon {

public:

int area ()

{ return (width * height); }

};

class CTriangle: public CPolygon {

public:

int area ()

{ return (width * height / 2); }

};

int main () {

CRectangle rect;

CTriangle trgl;

CPolygon * ppoly1 = &rect;

CPolygon * ppoly2 = &trgl;

ppoly1->set_values (4,5);

ppoly2->set_values (4,5);

cout << rect.area() << endl;

cout << trgl.area() << endl;

getchar();

return 0;

}

Output:

20

10

templates
Templates
  • Used in place of a specific data type. For example, use a template to add data types together, whichever data type the user wishes (i.e. integers, floats)
function template
Function Template

Output:

6

10.5

#include <iostream>

using namespace std;

template <class T>

T GetMax (T a, T b) {

T result;

result = (a>b)? a : b;

return (result);

}

int main () {

inti=5, j=6, k;

float l=10.5, m=5.6, n;

k=GetMax<int>(i,j);

n=GetMax<float>(l,m);

cout << k << endl;

cout << n << endl;

getchar();

return 0;

}

other template cases
Other Template cases

inti;

long l;

k = GetMax (i,l);

This would not be correct, since our GetMax function template expects two arguments of the same type.

But if we did the following:

template <class T, class U>

T GetMin (T a, U b) {

return(a<b?a:b);

}

Then we could call the function like this:

inti,j;

long l;

i = GetMin<int,long> (j,l);

Or simply:

i = GetMin (j,l);

class template
Class Template

#include <iostream>

usingnamespacestd;

template <class T>

classmypair {

T a, b;

public:

mypair (T first, T second) { // constructor

a=first;

b=second;}

T getmax();

};

template <class T>

T mypair<T>::getmax () {

T retval;

retval = a>b? a : b;

returnretval;

}

int main () {

mypair <int> myobject (100, 75);

cout << myobject.getmax();

return 0;

}

Output:

100

templates cntd
Templates cntd.

mypair<int> myobject (115, 36);

This same class would also be used to create an object to store any other type:

mypair<double> myfloats (3.0, 2.18);

more on templates
More on Templates

#include <iostream>

using namespace std;

// class template:

template <class T>

class mycontainer {

T element;

public:

mycontainer (T arg) {element=arg;}

T increase () {return ++element;}

};

// class template specialization:

template <>

class mycontainer <char> {

char element;

public:

mycontainer (char arg) {element=arg;}

char uppercase ()

{

if ((element>='a')&&(element<='z'))

element+='A'-'a';

return element;

}

};

int main () {

mycontainer<int> myint (7);

mycontainer<char> mychar ('j');

cout << myint.increase() << endl;

cout << mychar.uppercase() << endl;

return 0;

}

Output:

8

J

errors and exception handling
Errors and Exception Handling
  • Always check for points where your program could get into undesirable action.
  • Programmer should be responsible for adding exception handling code to eliminate unexpected end of execution.
  • assert is a function that checks if an expression meets certain conditions.
simple assert example
Simple assert example

#include <stdio.h>

#include <assert.h>

void print_number(int* myInt) {

assert (myInt!=NULL); // make sure that a value had been assigned to myInt

printf ("%d\n",*myInt);

}

int main () {

int a=10;

int * b = NULL;

int * c = NULL;

b=&a;

print_number (b);

print_number (c);

return 0;

}

try catch exception handling
try/catch Exception handling
  • A way of handling Exceptions, example:

#include <iostream>

using namespace std;

int main() {

char *buf;

try {

buf = new char[512];

if( buf == 0 )

throw "Memory allocation failure!";

}

catch( char * str ) {

cout << "Exception raised: " << str << '\n';

}

}

Output:

Exception raised: Memory allocation failure!

try catch exception handling1
try/catch Exception handling
  • The catch block is only executed if an error was thrown in the try block.
  • catch(data type); the data type in this case inform us that this catch can catch an exception of type integer.
  • A catch block with ellipses(…)catches any type of exception.
c exception classes
C++ Exception Classes
  • Two classes derived from exception:
    • Logic_error
    • Runtime_error

Both classes are defined in the stdexcept header file.

invalid_argument class deals with illegal arguments in function calls. The class out_of_range and length_error are another examples.

more classes on exception handling
More classes on Exception handling
  • bad_alloc when new fail to allocate memory.
  • run_time_error errors occurring during excexution.
  • overflow_error and underflow_error deals with arithmetic overflow and underflow both derived from run_time_error class.
exception example
Exception Example

void MyFunc() {

CDtorDemo D;

cout<< "In MyFunc(). Throwing CTest exception.\n";

throw CTest();

}

int main() {

cout << "In main.\n";

try {

cout << "In try block, calling MyFunc().\n";

MyFunc();

}

catch( CTest E ) {

cout << "In catch handler.\n";

cout << "Caught CTest exception type: ";

cout << E.ShowReason() << "\n";

}

catch( char *str ) {

cout << "Caught some other exception: " << str << "\n";

}

cout << "Back in main. Execution resumes here.\n";

system("pause");

}

#include <iostream>

using namespace std;

void MyFunc( void );

class CTest {

public:

CTest() {};

~CTest() {};

const char *ShowReason() const {

return "Exception in CTest class.";

}

};

class CDtorDemo {

public:

CDtorDemo();

~CDtorDemo();

};

CDtorDemo::CDtorDemo() {

cout << "Constructing CDtorDemo.\n";

}

CDtorDemo::~CDtorDemo() {

cout << "Destructing CDtorDemo.\n";

}

output of previous example
Output of previous example

In main. In try block, calling MyFunc(). Constructing CDtorDemo. In MyFunc(). Throwing CTest exception. Destructing CDtorDemo. In catch handler. Caught CTest exception type: Exception in CTest class. Back in main. Execution resumes here.

exception handling techniques
Exception Handling Techniques
  • Terminate the Program: Input files does not exist, no meaning of continue
  • Include code to recover from exception: User inputs wrong type, just inform user to re-enter correct format.
  • Log the error and continue: The program should be always running no matter what happened ( Monitoring satellites for example)
recursion
Recursion
  • By recursion we let a function call it self recursively until a break condition is met
  • The break condition is usually set in the base case of the problem
  • Example, factorial problem:
    • 0!=1 this is the base case
    • n! = n(n-1)! If n>0, this is the general case
  • Always general case should reduce o base case
factorial wihout using recursive
Factorial wihout using Recursive

#include<iostream.h>

int main(){

int n=5; double fact=1;

for(int i=1;i<=n;i++)

fact=fact*i;

cout<<fact;

getchar();

}

recursive version of factorial
Recursive version of factorial

#include<iostream.h>

double fact(int);

int main(){

int n=5; double factVar=1;

factVar=fact(n);

cout<<factVar;

getchar();

}

double fact(int f) // Since the factorial grow fast, it’s better to make it { // double

if(f==0)return 1;

else return fact(f-1)*f;

}

fibonacci sequence example
Fibonacci sequence example

The Fibonacci sequence looks like this:

1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, ...

Fibonacci equations are:

F(1) = 1F(2) = 1F(n) = F(n – 1) + F(n – 2)

fibonacci implementation
Fibonacci implementation

#include<iostream.h>

int fib(int); // Fibonacci function prototype

int main(){

int n=10; // The index of Fibonacci that we need to get

cout<<fib(n);

getchar();

}

int fib(int x)

{

if(x==1 || x==2) return 1;

else

return fib(x-1)+fib(x-2);

}

hannoi tower example
Hannoi Tower example

#include<iostream.h>

void hannoiTower(int,int,int,int);

static int counter=0;

int main(){

int disk=17;

long beginTime = time(NULL); // Record starting time

hannoiTower(disk,1,3,2);

long endTime = time(NULL);// Record Ending time

cout<<“”\n Time CPU spent in calculating:”<<endTime-beginTime;

cout<<"\nNumber of disk moves were :"<<counter;

getchar();

return 0;

}

hannoi function
Hannoi function

void hannoiTower(int count,int needle1,int needle3,int needle2)

{

if(count>0)

{

hannoiTower(count-1,1,2,3);

cout<<"Move disk "<<count<<" from "<<needle1

<<" to "<<needle3<<"."<<endl;

hannoiTower(count-1,2,3,1);

counter++; // To calculate total number of disk moves

} // which should be =2Numberof Disks -1

}

recursion vs iterations
Recursion vs. Iterations
  • Recursion functions executes more slowly that iteration version, and uses more memory and CPU time.
  • Choosing one method over another depends on the nature of the problem
  • Iterative method is easier than recursion, so unless the problem is inherently recursive, try to avoid recursion.
slide88

Questions??

  • Good Luck from REACH in your Test