Title: REACH CECS 130 Final Test Review
1REACH CECS 130 Final Test Review
2Data
- 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()
3Variable Types
TYPE SIZE VALUES
bool 1 byte true (1) or false (0)
char 1 byte a toz , A to Z, 0 to 9, space, tab, and so on
int 4 bytes -2,147,483,648 to 2,147,483,647
short 2 bytes -32,768 to 32,767
long 4 bytes -2,147,483,648 to 2,147,483,647
float 4 bytes - (1.2 x 10-38 to 3.4 x 1038)
double 8 bytes - (2.3 x 10-308 to -1.7 x 10308)
4Control Statements Boolean Operators
- What do each of the following evaluate to?
- 1. long elves 8
- int dwarves 8
- if(elvesdwarves) //true or false?
- if(elves!0) //true or false?
- 2. int elves 4
- int dwarves 5
- if(dwarves gt (2/3)) //true or false?
- 3. if(0 lt x lt 99) //true or false?
- 4. if(0lt (0lt1))//true or false?
5Control Statements Boolean Operators -Answers
- What do each of the following evaluate to?
- 1. long elves 8
- int dwarves 8
- if(elvesdwarves) //true
- if(elves!0) //true
- 2. int elves 4
- int dwarves 5
- if(dwarves gt (2/3)) //true
- 3. if(0 lt x lt 99) //true TRUE (1) and FALSE (0)
lt 99 - 4. if(0lt (0lt1))//true
6If statements
- if(condition)
- statement
- else if (condition)
- statement
- condition ? expr1 expr2
- ex. z ( x gt y ) ? y x
- Can we do next statement?
- (xgty) ? cout ltlt x is greater than y. cout ltlt
x isnt greater than y.
7Switch-case statements
- switch(expression)
- case expr1
- statement
- break
- case expr2
- statement
- break
- case expr3
- statement
- break
- default
- statements
- break
8Loops
- 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)
9Loops
- for (initialization condition expression)
-
- statements
-
- Incrementing Prefix and Postfix
- int x 5
- int y 6
- int z y //z6, y7 postfix
operator - int z x //z6, x6 prefix
operator
10Branching statements
Keyword Purpose
break Exits the nearest enclosing switch statement or iteration statement
continue Starts the next loop of the nearest enclosing iteration statement
goto Jumps to a particular place in your code
return Ends a function and returns a value
11FOR LOOP TEST
- Can you write a program that prints out the
following? - 0 1 2 3 4 5 6 7 8 9
12Answer
- for ( int count 0 count lt 10 count )
-
- cout ltltcountltlt
13Other Challenge questions for Loops
- Write a conditional statement that will assign
x/y to x if y doesnt 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 xy if
x is even otherwise , if x is odd and y doesnt
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.
14How to declare and implement functions
- Function declaration
- Function definition
- Function call
15- include ltiostreamgt
- using namespace std
- int add(int, int)
- int main(void)
-
- int number1, number2
- cout ltlt Enter the first value to be summed
- cin gtgt number1
- cout ltlt \nEnter the second
-
- cin gtgt number2
- cout ltlt \n The sum is ltlt add (number1,
number2) ltltendl -
- int add(int a, int b)return ab
16Functions Challenge
- Write a function, called multiply that multiplies
two numbers and returns the result
17Union
Output 9 3.1416
- include ltstdio.hgt
- includeltstdlib.hgt
- union NumericType
-
- int iValue
- long lValue
- double dValue
-
- int main()
-
- union NumericType Values // iValue 10
- Values.iValue9
- printf("d\n", Values.iValue)
- Values.dValue 3.1416
- printf("f\n", Values.dValue)
- system("pause")
18Sizeof()
19Malloc()
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
20free()
21Calloc 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))//allocat
e 10 integers instead of 5 - if (n1!NULL)
-
- nn1
-
- else printf("Out of memory!")
- realloc() returns null if unable to complete or a
pointer to the newly reallocated memory.
22C - 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()
23fopen(file name, Mode)
- fopen() returns a FILE pointer back to the pRead
variable
include ltcstdiogt 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(p
Read)
24What does this code do?
- int main ()
-
- FILE pFile
- char c
- pFilefopen("alphabet.txt","wt")
- for (c 'A' c lt 'Z' c)
- putc (c , pFile)//works like fprintf
-
- fclose (pFile)
- return 0
-
25Common Text File Modes
Mode Meaning Already Exists Does Not Exist
r Open a file for reading read from start error
w Create a file for writing destroy contents create new
a Append to a file write to end create new
r Open a file for read/write read from start error
w Create a file for read/write destroy contents create new
a Open a file for read/write write to end create new
b Combined with any mode enables user to work with binary files.(rb, wb, rb, etc.)
26fclose(file pointer)
- Pretty basic.
- Always close files when you use fopen.
27fscanf(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, ss, name, hobby)
28 include ltstdio.hgt Main() FILE
pRead char name10 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)
29Quiz
Kelly 11/12/86 6 Louisville Allen 04/05/77 49 At
lanta Chelsea 03/30/90 12 Charleston
Can you write a program that prints out the
contents of this information.dat file?
30- include ltstdio.hgt
- Main()
-
- FILE pRead
- char name10
- char birthdate9
- float number
- char hometown20
- pRead fopen(information.dat, r)
- if( pRead NULL )
- printf( \nFile cannot be opened\n)
- else
- fscanf( pRead, ssfs, name,
birthdate, number, hometown ) -
- while( !feof(pRead) )
- printf( s \t s \t f \t
s\n, name, birthdate, number, hometown )
31fprintf(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.
32- include ltstdio.hgt
- Main()
-
- FILE pWrite
- char fName20
- 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(ssf, fName, lName, gpa)
33Quiz
- 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 ?
34C Input/Output
- Summary
- Include include ltiostreamgt 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 ltlt
35C Input/Output Example
- include ltiostreamgt
- includeltstringgt
- using namespace std
- string name
- int main(void)
-
- coutltltWhat is your name?
- cingtgtname
- coutltltendlltltHelloltltname.c_str()
- return 0
-
36Can you predict the printout?
- include ltiostreamgt
- using namespace std
- int x 25
- string str2 This is a test
- int main( void )
-
- coutltltTestltlt1ltlt2ltlt3
- coutltlt25 7ltltendlltltstr2.c_str()
- return 0
37Answer
38OOP
- 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
39Classes
- 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
40Declaring Classes
- class ClassName
-
- memberList
-
- memberList can be either data member declarations
or method declarations
41Class Declaration Example
- Class Bow
-
- //data member declarations
- string color
- bool drawn
- int numOfArrows
- Bow(string aColor) //constructor
- Bow() //destructor
- //methods
- void draw()
- int fire()
-
42Creating Methods
- Return_type ClassNamemethodName(argumentList)
-
- methodImplementation
43Methods Creation Example
- //draws the bow
- Void Bowdraw()
-
- drawn true
- coutltlt The ltltcolorltltbow has been
drawn.ltltendl
44Advanced Data Types
45How to create arrays
- data_type array_name number-of-elements
- Two Dimensional Array
- array_type array_name number_of_ROWSnumber_of_C
OLUMNS
46How 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
47Useful string functions
- Copying strings from one to another
- char strcpy(char p, const char q)
- char s6
- strcpy(s, Hello)
- To combine strings
- char strcat(char p, const char q)
- char s12 Hello
- strcat(s, World)
48Useful 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
49Challenge 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,150,2,4,6
50Answer
- includeltiostreamgt
- using namespace std
- int main()
- int array24, , row, column
- for(row0rowlt2row)
- for(column0columnlt4column)
- if(row0)
- arrayrowcolumncolumn5
- else if(row1)
- arrayrowcolumncolumn2
-
- for(row0 rowlt2 row)
- for(column 0 column lt4 column )
- coutltltarrayrowcolumnltlt" "
- coutltltendl
-
- system("pause")
- return 0
51Basics 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
52Inheritance
- class aClass // Base class
-
- public
- int anInt
-
-
- class aDerivedClass public aClass //Derived
class -
- protected
- float aFloat
53Inheritance for Mammals Kingdome
include ltiostream.hgt 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
54Private 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.
55Overriding vs. Overloading functions
56Overriding 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 overriding that
method.
57Overriding example
- include ltiostream.hgt
- enum BREED YORKIE, CAIRN, DANDIE, SHETLAND,
DOBERMAN, LAB - class Mammal
- public
- // constructors
- Mammal() cout ltlt "Mammal constructor...\n"
- Mammal() cout ltlt "Mammal destructor...\n"
- //Other methods
- void Speak()const cout ltlt "Mammal sound!\n"
- void Sleep()const cout ltlt "shhh. I'm
sleeping.\n" - protected
- int itsAge
- int itsWeight
-
- class Dog public Mammal
- public
- // Constructors
- Dog() cout ltlt "Dog constructor...\n"
58Overloading 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.
59Overloading example
- includeltiostream.hgt
- int area(int x) // square area
- int area(int x,int y) //triangle area
- float area(int x,int y, int radius)
//circle area - int main()
-
- int x4, y5, rad3
- coutltlt"The Square area is "ltltarea(x)
- coutltlt"\nThe Triangle area is "ltltarea(x,y)
- coutltlt"\nThe Circle area is
"ltltarea(x,y,rad) - getchar()
- return 0
-
- int area(int x) // square area
- return xx
Output The Square area is 16 The Triangle area
is 20 The Circle area is 28.26
60Another overloading example
- include ltiostream.hgt
- class Mammal
-
- public
- void Move() const cout ltlt "Mammal move one
step\n" - void Move(int distance) const
- cout ltlt "Mammal move "
- cout ltlt distance ltlt" _steps.\n"
-
- protected
- int itsAge
- int itsWeight
-
- class Dog public Mammal
- public
- // You may receive a warning that you are hiding
a function! - void Move() const cout ltlt "Dog move 5
steps.\n" -
- int main()
Output Mammal move one step Mammal move 2
steps. Dog move 5 steps
61Virtual Functions
- To call a function youve overridden in a derived
class you need to use virtual functions. - Example
- struct Base
- virtual void do_something() 0
-
- struct Derived1 public Base
- void do_something()
- cout ltlt "I'm doing something"
-
- struct Derived2 public Base
- void do_something()
- cout ltlt "I'm doing something else"
-
- int main()
- Base pBase new Derived1
- pBase-gtdo_something()//does something
- delete pBase
- pBase new Derived2
- pBase-gtdo_something()//does something else
62Another Example
int main() Mammal theArray5
Mammal ptr int choice, i for
( i 0 ilt5 i) cout ltlt
"(1)dog (2)cat (3)horse (4)pig " cin
gtgt 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
theArrayi ptr
for (i0ilt5i)
theArrayi-gtSpeak()
system("pause") return 0
includeltstdlib.hgt include ltiostream.hgt
class Mammal public
Mammal()itsAge(1) Mammal()
virtual void Speak() const cout ltlt "Mammal
speak!\n" protected int itsAge
class Dog public Mammal
public void Speak()const cout ltlt
"Woof!\n" class Cat public
Mammal public void Speak()const
cout ltlt "Meow!\n" class Horse
public Mammal public void
Speak()const cout ltlt "Winnie!\n"
class Pig public Mammal public
void Speak()const cout ltlt "Oink!\n"
- 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!
63Virtual functions, When?
- Only if you have to redefine a function in a
Derived class that is already defined in Base
Class, otherwise, its just extra resources when
executed.
64 Pointers to base class
- include ltiostreamgt
- using namespace std
- class CPolygon
- protected
- int width, height
- public
- void set_values (int a, int b)
- widtha heightb
-
- class CRectangle public CPolygon
- public
- int area ()
- return (width height)
-
- class CTriangle public CPolygon
- public
Output 20 10
65Templates
- 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)
66Function Template
Output 6 10.5
- include ltiostreamgt
- using namespace std
- template ltclass Tgt
- T GetMax (T a, T b)
- T result
- result (agtb)? a b
- return (result)
-
- int main ()
- int i5, j6, k
- float l10.5, m5.6, n
- kGetMaxltintgt(i,j)
- nGetMaxltfloatgt(l,m)
- cout ltlt k ltlt endl
- cout ltlt n ltlt endl
- getchar()
- return 0
67Other Template cases
- int i
- 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 ltclass T, class Ugt
- T GetMin (T a, U b)
- return (altb?ab)
-
- Then we could call the function like this
- int i,j
- long l
- i GetMinltint,longgt (j,l)
- Or simply
- i GetMin (j,l)
68Class Template
- include ltiostreamgt
- using namespace std
- template ltclass Tgt
- class mypair
- T a, b
- public
- mypair (T first, T second) // constructor
- afirst
- bsecond
- T getmax ()
-
- template ltclass Tgt
- T mypairltTgtgetmax ()
- T retval
- retval agtb? a b
- return retval
-
- int main ()
- mypair ltintgt myobject (100, 75)
Output 100
69Templates cntd.
- mypairltintgt myobject (115, 36)
- This same class would also be used to create an
object to store any other type - mypairltdoublegt myfloats (3.0, 2.18)
70More on Templates
- include ltiostreamgt
- using namespace std
- // class template
- template ltclass Tgt
- class mycontainer
- T element
- public
- mycontainer (T arg) elementarg
- T increase () return element
-
- // class template specialization
- template ltgt
- class mycontainer ltchargt
- char element
- public
- mycontainer (char arg) elementarg
- char uppercase ()
Output 8 J
71Errors 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.
72Simple assert example
- include ltstdio.hgt
- include ltassert.hgt
- 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 a10
- int b NULL
- int c NULL
- ba
- print_number (b)
- print_number (c)
- return 0
-
73try/catch Exception handling
- A way of handling Exceptions, example
- include ltiostreamgt
- using namespace std
- int main()
- char buf
- try
- buf new char512
- if( buf 0 )
- throw "Memory allocation failure!"
-
- catch( char str )
- cout ltlt "Exception raised " ltlt str ltlt
'\n' -
-
Output Exception raised Memory allocation
failure!
74try/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.
75C 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.
76More 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.
77Exception Example
void MyFunc() CDtorDemo D coutltlt "In
MyFunc(). Throwing CTest exception.\n" throw
CTest() int main() cout ltlt "In
main.\n" try cout ltlt "In try block,
calling MyFunc().\n" MyFunc()
catch( CTest E ) cout ltlt "In catch
handler.\n" cout ltlt "Caught CTest
exception type " cout ltlt E.ShowReason()
ltlt "\n" catch( char str )
cout ltlt "Caught some other exception " ltlt str ltlt
"\n" cout ltlt "Back in main. Execution
resumes here.\n" system("pause")
- include ltiostreamgt
- 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()
-
78Output 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.
79Exception 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)
80Recursion
- 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 ngt0, this is the general case
- Always general case should reduce o base case
81Factorial wihout using Recursive
- includeltiostream.hgt
- int main()
- int n5 double fact1
- for(int i1iltni)
- factfacti
- coutltltfact
- getchar()
82Recursive version of factorial
- includeltiostream.hgt
- double fact(int)
- int main()
- int n5 double factVar1
- factVarfact(n)
- coutltltfactVar
- getchar()
-
- double fact(int f) // Since the factorial grow
fast, its better to make it
// double - if(f0)return 1
- else return fact(f-1)f
-
83Fibonacci 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)
84Fibonacci implementation
- includeltiostream.hgt
- int fib(int) // Fibonacci function prototype
- int main()
- int n10 // The index of Fibonacci that we
need to get - coutltltfib(n)
- getchar()
-
- int fib(int x)
-
- if(x1 x2) return 1
- else
- return fib(x-1)fib(x-2)
-
85Hannoi Tower example
- includeltiostream.hgt
- void hannoiTower(int,int,int,int)
- static int counter0
- int main()
- int disk17
- long beginTime time(NULL) // Record
starting time - hannoiTower(disk,1,3,2)
- long endTime time(NULL)// Record Ending
time - coutltlt\n Time CPU spent in
calculatingltltendTime-beginTime - coutltlt"\nNumber of disk moves were
"ltltcounter - getchar()
- return 0
-
86Hannoi function
- void hannoiTower(int count,int needle1,int
needle3,int needle2) -
- if(countgt0)
-
- hannoiTower(count-1,1,2,3)
- coutltlt"Move disk "ltltcountltlt" from
"ltltneedle1 - ltlt" to "ltltneedle3ltlt"."ltltendl
- hannoiTower(count-1,2,3,1)
- counter // To calculate total number
of disk moves - // which should
be 2Number of Disks -1 -
87Recursion 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.
88- Questions??
- Good Luck from REACH in your Test