Upload
profvipabutaleb
View
216
Download
0
Embed Size (px)
DESCRIPTION
Introduction to data structures course using c++ , quick revision on c++ then outlining the data structures course.
Citation preview
Computer Data Structures
3rd Year Communications
2nd Term
-C++ Revision
-Sheet (Revision) Solution
-Assignment (0) Solution
1- Revision on C++ Programming.
2- Software Design Process.
3- Advanced C++ Issues: Pointers and Classes.
4- Data Structures
Lists.
Stacks.
Queues.
Tables & Hashing.
Binary Trees *
Graphs*
5- Algorithms [Analysis & Design]
Sort Algorithms.
Search Algorithms.
* Binary Trees Graphs
Studying the efficient methods of representing and storing the given data from the user in your program (efficiency here means program size, execution time, Data Manipulation flexibility...etc).
Example :
To represent student grades in your C++ program there are many ways lets take the following two ways:
1-Using the Arrays
2-Using the pointers
Course Grading Policy: Final Exam:: 70 Marks Two Midterms each of 15 marks
Or one midterm & Term Project each of 15 marks
Outline:-
Basic Data Types
int Integral numbers
Real numbers float double
char ASCII Charcters
w_char UNICODE Charcters
bool Boolean
void
Operators
Compound Data Types
Arrays [Single Dimensions Multi Dimensions ]
Character Strings
Structures
Classes
Defined Data Types
typedef Type Definition
enum Enumerations
Named Constants
#define
Const
Flow Control
If_else
for loops
do_while
switch case
jump statements [break - continue - goto ] , exit function.
Functions
Prototypes and Definitions Passing Params by value and by reference
Pointers
Standard Input Output
File Processing
Important Library Functions
data_type var1< = init1>, var2< = init2>,;
var1,var2,.. are a variable identifiers.
init1,init2,.. are initialization values.
Ex:
To know the size of any type in bytes to define the range ; use the operator sizeof().
To know the range of any integral type use the constants defined in the header file
To know the range of any floating point type use the constants defined in the header file
Ex: use the following C++ statement to know the integer size on your compiler
1-Integral Data [Decimal , Octal & Hexa-decimal]
Hexadecimal numbers are prefixed by 0x Octal numbers are prefixed by 0
The integer size is 32 bits on the dev C++ on the 32 bits platform.
Integer range
For signed integer the maximum is : 312 1 the minimum is 312
For unsigned integer the maximum is 322 1
Also using the library and the flowing constants:
The output is :
2- Real Numbers [IEEE 754 Standard]
i- Single precession [32 bits]
ii- Double precession [64 bits]
To get the range use the library and the following constants
The output is:
3- Characters [Extended ASCII Code] of the size 1 Byte =8 bits
You could initialize the char by its ASCII value and treat it as an integer or assigning a keyboard character to it using the single quote
4- Wide characters [UNICODE] of size 2 Bytes = 16 bits.
5-Boolean type
6-Void
Used with the functions to mean no return.
And used with the pointers to mean that the pointers points to any type.
functions Pointers
Arithmetic Operators
+ [addition] , - [Subtraction] , * [multiplication] , / [Division] , % [Remainder]
++ [Increment by One] , -- [Decrement By One].
Shift Operators :
>> [Shift right of the equivalent binary number ]
Bitwise Operations
& [Bitwise AND] , | [Bitwise OR] , ^ [Bitwise XOR]
Operator Binary Equivalent
Logical Operators
&& [logical AND] , || [Logical OR] , ! [Logical NOT]
Example:
Explanation:
&& || true = 1False =0 Then: A || B = 1 OR 1 = 1 ; A&&B=1 AND 1 = 1
&| ^ Binary Number
Then:
A | B = 1001 OR 0110 = 1111 = 15 decimal
A & B = 1001 AND 0110 = 0000 = zero decimal
Assignment Operators
= [Assign ] , *= [Assign product], /= [Assign quotient]
%= [assign remainder], += [Assign Sum], -= [Assign Difference]
= [Assign right shift ]
&= [Assign bitwise AND] , |= [Assign bitwise OR] , ^= [Assign bitwise XOR]
Relational < [less than ] , > [ Greater than] , = [Greater than or equal ] , == [Equal] , != [Not equal]
Array is a new type which contain a multiples of specific basic data type.
Declaration using the square brackets
Example :
Indexing items of the array starting from index 0 to index size-1
The array of characters is a special type of array as you can read it or output it using the name of the array .
The array of characters ends with the Null Character 0
Structure is a new type which may contain different basic data types.
The structure sytax is :
struct struct_name; //forward declaration
struct struct_name
{
structure_members_declarations;
}; // dont forget the ending semicolon
struct_name object_name;//declaring an instance (object) of the structure.
struct_name object_name[size] ;
//declaring array of instances (objects) of the structure struct_name.
Example:
To access the structure members use the operator.
If the member is of pointer type use the arrow operator .
Example of the initialization for the above structure :
- Will be studied later on through the course.
Type definition syntax:
typedef type new_name;
typedef doesnt create a new data type ; it rather creates useful and simple mnemonics
Examples :
Later on through the program you could define the following variables:
The type definition will be used extremely through this course.
To make sense of a set of finite integer numbers which has a significant meaning.
Example:
The old C fashion to define the constants:
#define const_name value
Example:
The new C++ fashion of defining the constants:
type const const_name= initialization;
Example:
Used to make decisions through the program which make the required actions of the program i.e. jump to a certain point of the variable satisfy some conditions.
The basic pattern for the if statement:
If(condintion_expression)
{ true_statements;}
The else & its false statement is optional.
The true and false statements could be themselves if statements, allowing for a series of conditional tests nested on any depth.
The basic pattern for the switch case statement:
switch (switch_expression)
case const_expression_i : case_statement_i;
break;
default: default_statement;
The 2nd &3rd line is repeated for different case constants and so different case statements.
for(;;)
{ loop_statements;}
Each of initialization , test and increment statements are optional
So different forms of the for loops are:
The general pattern for the while statement:
while(condition_expression)
{loop_statements;}
The general pattern for the do_while statement:
do {loop_statements;}
while(condition_expression);
The syntax is
break;
Used only inside (while,do,and for loops) or a switch statements
It terminates the iteration or the switch statement.
The syntax is
continue;
Transfers control the test condition statement in while and do iterations
and to the increment statement in the for loop;
The function could return any type except an array or function type.
Function prototype syntax : Prototype
func_name(parameter_declaration_list);
Function Signature : The function name + Number & Type of the function parameters
Function Definition syntax : func_name(parameter_declaration_list)
{
Function_implemenation
return value_of_type
}
Examples: - Function that its parameters are of the basic data types
- Function that its parameters are of the compound data types
- Function that return a void [when returning to the original instruction pointer and code segment there are no pop for any other variables]
So to make use of this type of functions either make standard output
Or return by passing the parameters by the reference.
You could use the statement return; within a void function to make it terminate in an earlier step;
Example:
There are two syntaxes for the passing by reference:
1-
The parameters in the prototype are references to the type
The calling variables are of the original type
And the calling :
2-
The parameters in the prototype are pointers to the type.
The calling variables are reference to the type.
And the calling:
The standard input is by the default is the keyboard.
The standard output is by the default is the terminal window in the screen.
-Either using non standard input and output of type ifstream and ofstream
-Or redirects the standard input and output to work with the files.
Consider that the ifstream and ofstream is a compound data types like structures , then you should declare objects of these data types.
The general pattern for using these classes [ifstream and ofstream]:
Dont forget to
After finishing the processing with input and output files release them by:
Example:
You should use notepad++ software to work neatly with the files.
Also without using a user defined handles you could use the standard I/O objects to work with the files by using the redirection function freopen defined in stdio.h
Then cin and cout and other standard functions which work by the default for the screen and keyboard now redirected to the input and output files.
1-
The requied is to sum all the numbers starting from a given integer number num1 till the integer number num2 ; assuming num2>num1
The straightforward way of thinking is to write a code which loops all numbers starting from num1 till num2
During each loop iterate accumulate the sum [which is initially zero].
Requires n steps calculating the sumwhere n=num2-num1+1 Instead think of the problem as an arithmetic sequence and derive an
analytic sum in terms of num1 and num2
sum = num1+ sum = + n
(num1+1)+ (num1+2)+...... + (num2-1) num2num2+(num2-1)+ (num2-2)+...... (num1+1)
2*sum=(num1+num2)+(num1+num2) ..... (num1+num2) n timeswhere n=num2-num1+1
m1
u
2*s
um=n*(num1+num2)(num1+num2)(num2-num1+1)sum=
2
Fast calculation of the sum in a single step!!!!
C++ Program for the straightforward method 1st idea:
C++ Program for the arithmetic sequence sum[ 2nd idea] :
2-
To get the maximum
Assume the first item in the array is the maximum
Loop over all the elements of the array ; in each iterate compare the assumed maximum to the current item if its greater then the current item is the new maximum. At the final iterate the maximum value is obtained
To get the minimum
Assume the first item in the array is the minimum
The same algorithm as above but check for the current item in each iterate if less than the assumed minimum.
The Full Program:
3-
4-
First the function must pass the parameters by reference not value
Second there are generally 3 methods of swapping two variables:
1-Using a temporal variable
_object of a structure of huge size _large memory time inefficient
2-Using the Addition and Subtraction
Proof:
So the final values of a and b is swapped
a a bb a b a b b aa a b a b a b
Max or Min value Data Hazard Pipelined Processor sequential in parallel
3-Using the XOR function
Proof:
Two important laws from the logic:a = 0 aa 0 = aa a bb a b = a b b a 0 = a
a b = a b a b 0 = bSo the final values of a and b is swappeda
Data hazard Pipelined Processor sequential in parallel extra
memory need type The driver code:
5- 2Circle Area = r
Circle Circumference = 2 r
Theres a common need for the constant pi ; So a named constant pi= 3.141592 will be done through the c++ program.
Its required a function that gives the area and circumference so the function will pass the parameters by the reference.
Type of data should be float or double not integer.
Dont forget to to use pow () function.
Instead may be replaced by
The Assignment Statement:
Understand the assignment requirements and re-write the code with your method.
The purpose is not to cheat the solution but to understand it.
We will study this term different sorting algorithms;
A simple sorting algorithm is the Bubble Sort which you stood already in the first year programming course.
The default standard Input is the keyboard.
The default standard Output is the terminal window.
The default standard print is the printer.
But its required to redirect the standard input and standard output to the files.
Which means using cin and cout but work with files.
The algorithm repeatedly stepping through the list o In each step compare each pair of adjacent items o Swap them if they are in the wrong order o Number of steps at the worst case equal the number of list elements
So we will need the swap function done in problem 4 in the revision sheet.
The complete program without using redirection will be as the following :
The Complete Program but redirect the standard input output to work with files
Here cin get the input from the standard input which is redirected to the file data.in
And cout and even the system(PAUSE) output the data to the redirected standard output which is the file data.out
The input file should be put in the same directory as the project files saved. otherwise in the input file constructor you must write the full input file directory.
So before compiling the project.
Right click on the free area at the project folder , and where the executable file is expected to be created , create a text file and rename it to data.in
If the file name extension is not appeared goto tools>>folder options then at the view tab uncheck the option Hide extensions for known file types.
Compress all the above files and send them to the indicated email.
Further assistance via [email protected]