Data Structures -- C/C++ Review Prof A Alkhorabi أ.د/ عـبدالله علي الخــوربي.

Post on 20-Jan-2016

220 views 0 download

Tags:

Transcript of Data Structures -- C/C++ Review Prof A Alkhorabi أ.د/ عـبدالله علي الخــوربي.

Data Structures

--

C/C++ Review

Prof A Alkhorabi

الخــوربي /دأ. علي عـبدالله

Data Structures

--

C Review

Prof A Alkhorabi

الخــوربي /دأ. علي عـبدالله

0.3- 3Prof A Alkhorabi

C Characteristics

• Size

• Type conversion

• Modern control constructs

• Bitwise control

• Pointer implementation

• Structure

0.3- 4Prof A Alkhorabi

C Program Parts

C Program constitutes from 2 parts:

1. Definition, Inclusion & Declaration Part

2. Functions Part

0.3- 5Prof A Alkhorabi

1. Definition, Inclusion & Declaration Part

This part have two main sections:

A. C Preprocessor

B. Declaration part

0.3- 6Prof A Alkhorabi

A. C Preprocessor

Before compilation the C preprocessor (part of the C compiler) looks for directives (preceded by #), and execute the required task according to the directive type.

There are 3 types of directives:

– include Directive

– define Directive

– conditional compilation Directive

0.3- 7Prof A Alkhorabi

include Directive

Includes files to the including file.

include <filename<#

0.3- 8Prof A Alkhorabi

define Directive

#define SymbolicName constant

or

#define SymbolicName simple calculation operation

0.3- 9Prof A Alkhorabi

Conditional Compilation Directive

�ِAllows writing programs to more than one operating system

#ifdef

0.3- 10Prof A Alkhorabi

B. Declaration part

Allow declarations of Global Variables and Functions used later in the program.

0.3- 11Prof A Alkhorabi

2. Functions Part • Consists of one or more functions, one of which

must be the main() function.• The C program starts execution from the main()

function, and stops execution by the main() function end.

• The main() function calls other functions, each can call other functions.

0.3- 12Prof A Alkhorabi

C Programs Execution

• C program passes through a number of phases starting from the written program by the programmer ( Source File) till it became executable (Executable File).

• This is normally established by Software Systems that are known as Integrated Development Environment (IDE) provided by specialized Software Companies.

0.3- 13Prof A Alkhorabi

IDE

• Program Editor

• Preprocessor

• Compiler

• Assembler

• Linker

• IDE’s may include other facilities like Debugging.

0.3- 14Prof A Alkhorabi

مراحل برنامج تطوير

Librariesسيالمكتبات

executable code

Editorالمحرر

Preprocessorالم!عد

Assemblerالم!جمع

Linkerالم!دمج

Typing طبع

Source (ASCII) code

Assembly code

Object code

Compilerالم!ترجم

C ProgramDeveloping

Phases

0.3- 15Prof A Alkhorabi

C Program Structure/* (1) Inclusion, Definition & Global declarations part */Inclusion partDefinition partglobal declarations part

/* (2) Functions part */return_value main (arguments list)}local declaration partfunction executable statements{

return_value function_2 (arguments list)}local declaration partfunction executable statementsreturned value{::

0.3- 16Prof A Alkhorabi

1 /* Sum3.c - Program to sum 3 integers */

2 /* 1- inclusion, definition & glbal vars and functions declaration part */

3 # include “stdio.h” /* a- inclusion part */

4 # define TEN 10 /* b- definition part */

5

6 int sum; /* c-Global Variable & Functions Part */

7

8 /* 2- Functions Part */

9 void main(void) /* main Function */

10 { /* Function opening brace */

11 int num_1, num_2, num_3; /* Local Variables Declaration Part*/

12

13 num_1 = 5; num_2 = 2; num_3 = num_2*TEN;

14 sum=num_1 + num_2 + num_3; /*Function’s Executable Stateent */

15 printf(“The sum of the 3 numbers is %d \n”, sum); /* I/O Lib Func*/

16 } /* Closing Brace */

0.3- 17Prof A Alkhorabi

C Reserved Words

• Used within a C program for a specific purposes and according to the language rules, and can not be used in other purposes ( as identifiers for example)

• Consists of two main parts and one sub-part.

0.3- 18Prof A Alkhorabi

Reserved Words: 1st main part

• 28 words accompanied the C language from the beginning:

auto break case char

continue default do double

else extern float for

goto if int long

register return short sizeof

static struct switch typedef

union unsigned while entry

0.3- 19Prof A Alkhorabi

Reserved Words: 2nd main part

• 5 words added by ANSI (American National Standardization Institute):

const enum signed void volatile

0.3- 20Prof A Alkhorabi

• Added by some C Compilers manufacturers:

Asm far _cs fortran huge

near pascal

Reserved Words: Sub-part

0.3- 21Prof A Alkhorabi

• All reserved words written using lower-case letters.

Reserved Words: Note

0.3- 22Prof A Alkhorabi

Identifies

Used to name and identify:• constants • variables• functions .

• An identifier should not be a reserved word.• Small letters identifiers differ than that written as large letters.

Ex:#define ONE 1int sum;float real(void);

0.3- 23Prof A Alkhorabi

• Basic Data Types األساسية البيانات أنواع• Derived Data Types المشتقة البيانات أنواع

• Data Structures البيانات تراكيب

Data Types

0.3- 24Prof A Alkhorabi

C Language Have 4 basic data types:

• Integers int.• Single-precision floating numbers float.• Double-precision floating numbers double.• Characters char..

• Void is used to define no type function argument or returned value.

• Ex:void fn(void);

Basic Data Types

0.3- 25Prof A Alkhorabi

Integer Variables Types

Type bytes Type Value Range

int 2 -32,768 32,767

unsigned int 2 0 65,535

(ٍshort int 2 -32,768 32,767

long 4 -2,147,483,648 2,147,843,647

unsigned long 4 0 4,294,967,295

0.3- 26Prof A Alkhorabi

Integer Operations

Assignment operation Arithmetic operations Relational operations Logical operations Bitwise operations Conditional operator

0.3- 27Prof A Alkhorabi

الصحيحة لألعداد العمليات عوامل تنفيذ أسبقيات Integer Operators Precedence

استخدامه طريقة عمله العامل

من اليمين إلى اليسارمن اليمين إلى اليسارمن اليمين إلى اليسارمن اليمين إلى اليسار

نفيمكملتزييد

تنقيص

!

~

++

--

من اليسار إلى اليمينمن اليسار إلى اليمينمن اليسار إلى اليمين

ضربقسمة عدد صحيح

باقي قسمة عدد صحيح

*

/

%

من اليسار إلى اليمينمن اليسار إلى اليمينمن اليسار إلى اليمينمن اليسار إلى اليمين

جمعطرح

إزاحة يساريةإزاحة يمينية

+

-

<<

>>

0.3- 28Prof A Alkhorabi

الصحيحة لألعداد العمليات عوامل تنفيذ أسبقيات Integer Operators Precedence

استخدامه طريقة عمله العامل

من اليمين إلى اليسارمن اليمين إلى اليسارمن اليمين إلى اليسارمن اليمين إلى اليسار

من أقليساوي أو من أقل

من أكبريساوي أو من أكبر

<

<=

>

>=

من اليسار إلى اليمينمن اليسار إلى اليمين

نسبي تساوينسبي التساوي

==

!=

من اليسار إلى اليمينمن اليسار إلى اليمينمن اليسار إلى اليمينمن اليسار إلى اليمينمن اليسار إلى اليمينمن اليسار إلى اليمينمن اليسار إلى اليمين

" الثنائية" و" الثنائية" أو

" الثنائية" المقصورة أو" المنطقية" و" المنطقية" أو

الشرطي االنتقاءتخصيص

&

|

^

&&

| |

? =

=

0.3- 29Prof A Alkhorabi

Floating-point Variables

The floating-point number 246.66 can be written in one of the following forms:

246.66

24.666× 10(1) 24.666 e 1 24.666 E 1

2.4666× 10(2) 2.4666 e 2 2.4666 E 2

0.024666× 10(4) 0.024666 e 4 0.024666 E 4

24666× 10(-2) 24666 e -2 24666 E -2

0.3- 30Prof A Alkhorabi

Floating point Variables

• Single precession real number “float”, 4 bytes.• Double precession real number “double”, 8 bytes. • Long single precession real number “long float”, 8 byes.• Long double precession real number “long double”, 10 bytes.

• long float and double have the same properties.

0.3- 31Prof A Alkhorabi

Floating point operations

• Addition uses the operator +• Subtraction uses the operator -• Multiplication uses the operator *• Division uses the operator /

0.3- 32Prof A Alkhorabi

Characters

Characters in C Language includes:• Alphabet letters

– Lower case (a,b,c,..)– Upper case (A,B,C,…)

• Digits (0,1,2,...)• Symbols (?,, > , # (,)• Formatting characters, (space, horizontal tabulation,

vertical tabulation).

0.3- 33Prof A Alkhorabi

0.3- 34Prof A Alkhorabi

0.3- 35Prof A Alkhorabi

Characters

• Characters in C are according to ASCII (American National Standard Code for Information Interchange).

• ASCII code also includes transmission characters used for computer network communications (ETX,SYN,... (

0.3- 36Prof A Alkhorabi

/* AsciiCharacters.c ASCII Characters Program Example */#include <stdio.h>#include <conio.h>

void main(void){ int x;

for(x = 0; x < 128; x++){ if (x % 20 == 0) getch(); printf("%d\t%c\n",x,x); }

getch(); }

0.3- 37Prof A Alkhorabi

Characters

Character variables

char ch;

ch = ‘H’;

0.3- 38Prof A Alkhorabi

Character Functions in the Standard Library

• These functions return non-zero integers if it accomplishes their tasks positively, otherwise it returns zeros.

0.3- 39Prof A Alkhorabi

القياسية المكتبة في الحروف وظائف

lnum intint(int ch); Is the character ch alphanumeric

isalpha int (int ch); Is the character ch alphabetic

iscntrl int(int ch); Is the character ch a control character

isdigit int(int ch); Is the character ch a digit

int isgraph(int ch); Is the character ch a graphical character

int islower(int ch); Is the character ch a lower case character

isprint int (int ch); Is the character ch a printable character

int ispunct(int ch); Is the character ch a punctuation character

isspace int (int ch); Is the character ch a ‘\f’ , ‘\v’ , ‘\r’ , ‘\n’ , ‘\t’ , ‘ ‘

isupper int(int ch); Is the character ch a upper case character

tolower int (int ch); Change the character to lower case

toupper int (int ch); Change the character to upper case

isxdigit int(int ch); Is the character ch a hexadecimal

0.3- 40Prof A Alkhorabi

Character strings

• “This is string 1”

0.3- 41Prof A Alkhorabi

Control

In programming languages control is used to determine next statement to be executed.

Normally control can be one of the following types:

Sequential control .

Conditional control.

Iterative control.

Jumping control.

0.3- 42Prof A Alkhorabi

Conditional Control

• Conditional control is accomplished by one of the following constructs:

• if-else-if• switch

0.3- 43Prof A Alkhorabi

Conditional Control

The if-else-if is used as one of the following forms:• if• if-else• if-else-if

0.3- 44Prof A Alkhorabi

if

if (expression) جبري */ /*تعبير

executable_statement(s); /* تعابير مجموعة أو /*تعبير

next_statement;

تعبير اومجموعة تعابير

if

شرط if

التعبير التالي

F

T

if ( x == 5 || y < 8)

printf (“The if conditions that x= 5 OR y < 8 is TRUE” );

0.3- 45Prof A Alkhorabi

if- else

ifتعبير

شرط if

التعبير التالي

F

elseتعبير

T

if (expression)

executable_statements_1;

else

executable_statements_2;

next_statement;

0.3- 46Prof A Alkhorabi

التالي التعبير

الثالث التعبير

النهائي االختيار تعبيرالنهائي

else-ifالشرط الثالث

F elseالثاني التعبير

else-ifالشرط الثاني

F

F

األول التعبير

if الشرط األول

T

if ( expression_1) statements_1 ;

else if (expression_2) statements_2 ;

else if (expression_3) statements_3;

:

else statements_n ;

next_statement;

if-if- else

0.3- 47Prof A Alkhorabi

/* ifelseif.c if-else-if Example Program*/#include <stdio.h>#include <conio.h>

void main(void){ int answer, i = 1; printf("What is the Capital of Yemen (y), UK (u), or Saudia Arabia (s) \n"); answer = getche(); if (answer == 'y' || answer == 'Y' )

printf ( "\n The Capital of Yemen is Sana'a\n\n"); else if (answer == 'u' || answer == 'U' )

printf ( "\n The Capital of UK is London\n\n"); else if (answer == ‘s' || answer == ‘S' )

printf ( "\n The Capital of Saudia Arabia is Riyadh\n\n"); else

printf ( "\n No information is available about this country\n\n"); }

0.3- 48Prof A Alkhorabi

switch

switch (expression)

{

case constant_1 : statements_1; break;

case constant_2: statements_2; break; .

:

default: statements_n;

}

next_statement;

0.3- 49Prof A Alkhorabi

switch

switch ( جبري( تعبير

breakرابيتعب

التالي التعبير

تطابق هلالحالة الثانية

تطابق هلاألولى الحالة

y

y

N

بيراتع break

N

االختبار تعبيرdefaultالنهائي

0.3- 50Prof A Alkhorabi

/* switch.c switch Example Program */#include <stdio.h>#include <conio.h>

void main(void){ int answer, i = 1;

printf("What is the Capital of Yemen (y), UK (u), or Saudia Arabia (s). \n"); answer = getche(); switch ( answer ) { case 'y' : printf ( "\nThe Capital of Yemen is Sana'a\n\n"); break; case 'Y' : printf ( "\nThe Capital of Yemen is Sana'a\n\n"); break; case 'u' : printf ( "\nThe Capital of UK is London\n\n"); break; case 'U' : printf ( "\nThe Capital of UK is London\n\n"); break; case ‘s' : printf ( "\The Capital of Saudia Arabia is Riyadh\n\n"); break; case ‘S' : printf ( "\The Capital of Saudia Arabia is Riyadh\n\n"); break; default : printf ( "\nNo information is available about this country\n\n"); } }

0.3- 51Prof A Alkhorabi

Iterative Control

The iterative control can be accomplished by using one of the following constructs:

• while • do-while • for

0.3- 52Prof A Alkhorabi

while

while (condition)

{

statement_1;

statement_2;

:

}

next_statement; while( شرط(

التالي حلقة التعبير تعابيرwhile

F

T

0.3- 53Prof A Alkhorabi

/* while.c while Example Program */#include <stdio.h>

void main(void){char ch1 = 'a', ch2 = 'A', i = 0;

while ( ch1 <= 'z' ) putchar(ch1++);putchar('\n');while ( ch2 <= 'Z' ) putchar(ch2++);while ( ++i <= 10 ) putchar('\7'); /* Bell */}

0.3- 54Prof A Alkhorabi

do-while التركيبdo

{

statement_1;

statement_2;

:

} while (condition);

next_statement;

do

شرطwhile

التعبيرالتالي

الحلقة تعابير

0.3- 55Prof A Alkhorabi

• Difference between while and do-while

/* dowhile.c do-while example Program */#include <stdio.h>

void main(void){int i = 0;while ( i ) printf("while succeed\n");do printf("do-while succeed\n");while ( i );}

0.3- 56Prof A Alkhorabi

forfor (expression1; expression2; expression3)

executable_statments;

next_statement;

expression1

expression2

executable_statments

expression3

next_statement

• F

• T

expression1 is loop counter initiator

expression2 loop iteration condition

expression3 is loop counter modification

executable_statments are the statements executed in every iteration

next_statement is the statement executed directly after loop termination

0.3- 57Prof A Alkhorabi

for

• Exint num;

for (num=0; num < 10; num++)

printf(“The square of [%d] = %d \n”, num, num * num);

printf(“The value of num now is equal to %d n”, num);

0.3- 58Prof A Alkhorabi

1. Comma Operator

for (i=0, j=10; i < 20 && i != j; i++){

::

}

Different forms of for

0.3- 59Prof A Alkhorabi

2. For without body

Different forms of for

/* for1.c for with multiple expressions Example Program */#include <stdio.h>

void main(void){int i;

for ( i = 0; i < 10; printf("Square(%d) = %d\n", i, i * i), i += 3);}

Output:Square(0) = 0Square(3) = 9Square(6) = 36Square(9) = 81

0.3- 60Prof A Alkhorabi

/* for2.c for with no body Example Program */#include <stdio.h>void main(void){int i, j;for(i=0, j=1; i<10 && printf("%d - Square(%d) = %d\n", j++, i, i * i); i+=3);}

Output:1 - Square(0) = 02 - Square(3) = 93 - Square(6) = 364 - Square(9) = 81

0.3- 61Prof A Alkhorabi

3. for with empty expressions

Different forms of for

/* for3.c for loop with two empty expressions */#include <stdio.h>

void main(void){int i = 0;for ( ;

i < 10 && printf("Square(%d) = %d\n", i, i * i);

i += 3(;}

The output is the same as for for1.c .

0.3- 62Prof A Alkhorabi

Infinite for loopfor ( ; ; );Loop can be stopped only by using “break”

Different forms of for

/* for4.c for as controlled infinite loop, Example Program */#include <stdio.h>void main(void){int i = 0;for ( ; ; ){ if ( i > 10) break; printf("Square(%d) = %d\n", i, i * i); i += 3; }}

The output is the same as for for1.c .

0.3- 63Prof A Alkhorabi

for التركيب

Exercise:

Write a C program to output the square of even numbers between 4 and 10.

0.3- 64Prof A Alkhorabi

/* for5.c print the square of even numbers between 4 and 10 */#include <stdio.h>void main(void){ int num; for ( num = 4; num <= 10; num++) /* Numbers between 4 - 10*/ { if ( num % 2 == 0 ) /* Even numbers only */

printf("Square(%d) = %d\n", num, num * num); }}

Output:Square(4) = 16Square(6) = 36Square(8) = 64Square(10) = 100

0.3- 65Prof A Alkhorabi

Jumping Control

goto

break

Continue

return

exit()

0.3- 66Prof A Alkhorabi

goto

goto label; : :label : label_statements;

0.3- 67Prof A Alkhorabi

goto

تركيب استخدام الحقائق gotoعند االعتبار في األخذ يجبالتالية:

�من 1. كًال يكون أن لن label, gotoيجب وإال الوظيفة نفس في. مطلوب هو كما القفز من التحكم يتمكن

.2 ) تعبيرات ) مجموعه أو البرنامج labelتعبير تنفيذ سياق ضمن تنفذ ) تستدعى) لم وان أن gotoبواسطة labelالوظيفة يجب ولهذا

موضع كان إن النظر بغض األقل على مرة ذلك من labelيستفادموضع بعد أو .gotoقبل

تكون 3. ما حالة ( labelفي بعد ) داخل gotoوكانت gotoوتعبيرهاموضع من التحكم قفز بعد يتوقف سوف الحلقة تنفيذ فإن حلقة

goto موضع .labelإلى

0.3- 68Prof A Alkhorabi

break/* break.c break - Print all i * j if i < j */

#include <stdio.h>

void main(void)

{

int i, j;

for ( j = 1; j <= 5; j++)

{ for ( i = 1; i <= 5; i++)

{ if ( i == j )

break;

printf("\t %d X %d = %d", i, j, i * j );

}

puts ("\n"); }

}

0.3- 69Prof A Alkhorabi

• Output

1 X 2 = 2

1 X 3 = 3 2 X 3 = 6

1 X 4 = 4 2 X 4 = 8 3 X 4 = 12

1 X 5 = 5 2 X 5 = 10 3 X 5 = 15 4 X 5 = 20

0.3- 70Prof A Alkhorabi

continue /* continue.c continue Example Program*/

/* Print the multiples of 5 from 1 to 30 */

#include <stdio.h>

void main(void)

{

int num;

for ( num = 1; num <= 30; num++)

{ if ( num % 5 != 0 ) /* Multiples of 5 */ continue;

printf("\n %d is a multiple of 5", num ); }

puts ("\n End of for loop - With continue.");

/* The following is the same as the above but with break */

for ( num = 1; num <= 30; num++)

{ if ( num % 5 != 0 ) break;

printf("\n %d is a multiple of 5", num ); }

puts ("\n End of for loop - With break.");

}

0.3- 71Prof A Alkhorabi

• Output

5 is a multiple of 5

10 is a multiple of 5

15 is a multiple of 5

20 is a multiple of 5

25 is a multiple of 5

30 is a multiple of 5

End of for loop - With continue.

End of for loop - With break.

0.3- 72Prof A Alkhorabi

return

return expression;

0.3- 73Prof A Alkhorabi

The function exit()

Declared in stdio.h :

void exit( int return_value);

0.3- 74Prof A Alkhorabi

Ex exit()

viod main (void){

:if (salary 0 ) exit (0 ) ;

:}

0.3- 75Prof A Alkhorabi

Derived data types

1. Pointers

2. Arrays

3. structures, unions, enumerations and defined types

0.3- 76Prof A Alkhorabi

Pointers

• A pointer is a variable that stores the address of another variable.

int x;

0.3- 77Prof A Alkhorabi

PointersAddresses of Storing units

1000

1001

1002

1003

:

:

Storing units (bytes)

unit n

unit n+1

unit n+2

unit n+3

:

:

0.3- 78Prof A Alkhorabi

Pointers

1000

1002

1003

1004

:

Store of x

Storing units (bytes)Addresses of Storing units

0.3- 79Prof A Alkhorabi

Pointers

If a value is assigned to x it will be stored in Store of x

1000

1001

Store of x

5

1002

1003

1004

1005

0.3- 80Prof A Alkhorabi

Pointers

• Pointer declaration:type * pointer ;

int x = 5, * ptr ;

0.3- 81Prof A Alkhorabi

Pointers المؤشـــرات

• �ِAn address of other variable (x) can be assigned to ptr:

ptr = &x ;

• &x means address of x .

• �ِptr will be assigned the address of x ( 1000)

0.3- 82Prof A Alkhorabi

Pointers المؤشـــرات

للمتغير قيمة أي تخصيص سوف 5ولتكن x عند القيمة هذه فأنعنوانه × والذي مقر في RسكQن يمكن 1000ت هذا الذاكرة في

يلي كما : تمثيله1000

1001

Store of x

5

1002

1003 Store of ptr

1004 1000

1005

0.3- 83Prof A Alkhorabi

/* ptr1.c pointers Example Program*/#include <stdio.h>void main(void){int x = 5, y = 17, *ptr1, *ptr2;*ptr1 = x;ptr2 = &y;printf("Value of x is %d, and its address in memory is %lu.\n", *ptr1, (long)ptr1);

printf("ptr1 points to %d.\n", *ptr1);printf("Value of y is %d, and its address in memory is %lu.\n", *ptr2, (long)ptr2);

printf("ptr2 points to %d.\n", *ptr2);x = *ptr2;printf("Value of x now is %d.\n", x);ptr1 = ptr2;printf("What ptr1 points to now is %d.\n", *ptr1);}

0.3- 84Prof A Alkhorabi

Pointers Multiple Indirection

1000 num

1001 5

1002

1003

1004

1005 ptr1

1006 1000

1007

1008

1009

1010 ptr2

1011 1005

1012

0.3- 85Prof A Alkhorabi

Pointers Multiple Indirection

/* ptr2.c Pointers Multiple Indirection */# include <stdio.h>void main (void){int num = 5, *ptr1, **ptr2; /*ptr2 is a pointer to pointer to

integer*/ptr1 = &num;ptr2 = &ptr1;printf(“number = %d”, **ptr2);}

0.3- 86Prof A Alkhorabi

Pointers Initiation

• Give an address to a pointer, if known, otherwise give it the value NULL which is known by the compiler

0.3- 87Prof A Alkhorabi

Arrays

• An array is one of the derived data types.• An array consists of a number of elements of the same

type.• Number of an array elements is declared before using

the array.

0.3- 88Prof A Alkhorabi

Arrays

• Array Declarationtype array_name[no_of_elements] ;

int class1[4] ;

class1[0] = 34 ;

0.3- 89Prof A Alkhorabi

/* array1.c Array Example - Find the largest and smallest array elements */

#include <stdio.h>

void main(void){int num[10]; /* array declaration */int i, max, min;puts(" Program to find the largest and the smallest array elements.");

/* Fill array elements */for ( i = 0; i < 10; i++){ printf ( "Enter an integer: array element number %d\n", i); scanf("%d", &num[i]); }

0.3- 90Prof A Alkhorabi

/* array1.c Array Example - Continue *//* assign to min & max the value of the first array element */min = max = num[0];/* Find min & max array elements */for ( i = 0; i < 10; i++){ if ( num[i] > max ) max = num[i]; else if ( num[i] < min ) min = num[i]; }

printf("The largest array element is %d\n", max);printf("and the smallest array element is %d", min); }

0.3- 91Prof A Alkhorabi

Arrays in Memory

1000 Class1

[0]

1002 Class1

[1]

1004 Class1

[2]

1006 Class1

[3]

First Element Second Element Third Element Fourth Element

0.3- 92Prof A Alkhorabi

Assignment for Array Elements

Direct Assignment • num[0] = 10;

• num[1] = 12;

• num[2] = 15;

• num[3] = 20;

Assignment could be done when declaring the array itself:

• int num[5] = {3, 15, -7, 10, 1};

• char string[9] = {“a string”};

0.3- 93Prof A Alkhorabi

Assignment for Array Elements

Indirect Assignment • An array name is a pointer always points to its first element

int num[4];

num[0] num[1] num[2] num[3]

num

0.3- 94Prof A Alkhorabi

Assignment for Array Elements

• Indirectly the name of the array (pointer) is used to access all the array elements

*num = 10;

*(num+1) = 12;

*(num+2) = 15;

*(num+3) = 20;

0.3- 95Prof A Alkhorabi

/* array2.c Arrays Example Program *//* Pointers & Array elements */#include <stdio.h>void main(void){int num[4] = {10, 12, 15, 20};

printf("Array elements are %d %d %d %d", *num, *(num+1), *(num+2), *(num+3));

}

• OutputArray elements are 10 12 15 20

0.3- 96Prof A Alkhorabi

Character Arrays and Strings

• “This is a string.”• The following is a character array that accommodates a

string of character

‘T’ ‘h' ‘i’ ‘s’ ‘ ‘ ‘i’ ‘s’ ‘ ‘ ‘a’ ‘ ‘ ‘s’ ‘t’ ‘r’ ‘i’ ‘n’ ‘g’ ‘.’ ‘\0’

0.3- 97Prof A Alkhorabi

Strings Operations

• A number of string operations in the Standard library are declared in string.h.

0.3- 98Prof A Alkhorabi

Strings Operations

int strcmp (const char *s1, const char *s2);

char *strcpy (char *s1, const char *s2);

char *strcat (char *s1, const char *s2);

int strlen (const char *s);

int strncmp (const char *s1, const char *s2, int n);

char *strncpy (char *s1, const char *s2, int n);

char *strncat (char *s1, const char *s2, int n);

char *strch (const char *s, int ch);

char *strstr (const char *s1, const char *s2);

0.3- 99Prof A Alkhorabi

/* array3.c String array operations */#include <stdio.h>#include <string.h>void main(void){char s1[80] = "This is a string", s2[40] = "this is another string", *ptr;printf("There are %d characters in s1, and %d characters in s2.\n",

strlen(s1), strlen(s2));if ( strcmp(s1, s2) > 0) puts("s1 > s2.\n ");else if ( strcmp(s1, s2) == 0) puts("s1 is equal to s2.\n ");else puts("s1 < s2.\n ");

0.3- 100Prof A Alkhorabi

/* array3.c String array operations - Continue */strcat (s1, " and "); strcat (s1, s2);printf ("%s\n", s1); strcat ( s1, ", there are two strings now."); printf("%s\n", s1);if ( ptr = strstr ( s1, "two") ) /*if ptr value is not NULL*/ printf("%s\n", ptr );if ( (ptr = strstr ( s1, "This is not the same string"))) puts("It seems ptr has a

value !!!\n");else puts ("ptr has a NULL value.\n");}

0.3- 101Prof A Alkhorabi

• OutputThere are 16 characters in s1, and 22 characters in s2.

s1 < s2.

This is a string and this is another string

This is a string and this is another string, there are two strings now.

two strings now.

ptr has a NULL value.

0.3- 102Prof A Alkhorabi

type array [row][column];

int student[5][3];

Two-dimensional arrays

0.3- 103Prof A Alkhorabi

The two-dimensional array student can be visualized as shown

Two-dimensional arrays

student[3][1] = 150 1 2

0

1

2

3 15

4

0.3- 104Prof A Alkhorabi

/* array6.c Two-dimensional array */#include <stdio.h>#include <string.h>void main(void){ int row, col, sum, student[5][3] = { {90, 75, 80},

{85, 80, 90}, {83, 82, 75}, {60, 72, 73}, {65, 68, 70} };for ( row = 0; row < 5; row++){ sum = 0; for ( col = 0; col < 3; col++ ) sum += student[row][col]; printf ( "Average degrees of student ( %d ) is %d\n", row +1, sum/3);}}

0.3- 105Prof A Alkhorabi

Output:Average degrees of student ( 1 ) is 81

Average degrees of student ( 2 ) is 85

Average degrees of student ( 3 ) is 80

Average degrees of student ( 4 ) is 68

Average degrees of student ( 5 ) is 67

0.3- 106Prof A Alkhorabi

• Structures

• Unions

• Enumeration

• Defined Types

0.3- 107Prof A Alkhorabi

Structures

• Structures consists of members of different types• Structures are used to represent objects that have a

variety of properties (specifications)• An object could be a person, animal, state, or a thing

0.3- 108Prof A Alkhorabi

Structures Declarationstruct structure_name{ type member_1; type member_2;

:};

0.3- 109Prof A Alkhorabi

Structures Declaration

• Ex: Studentstruct date{ int day; int month; int year;};

struct student{ char name[30]; int department; int level; struct date date_of_birth;};

0.3- 110Prof A Alkhorabi

Structure Variables Declaration

• Direct method:struct student{ :

: } stud_1 , stud_2 ;

0.3- 111Prof A Alkhorabi

Structures Variables Declaration

• Indirect method:• First declare the structure

struct student

{

:

} ;

• Later somewhere else in the program declare the structure variables

struct student stud_1 , stud_2 ;

0.3- 112Prof A Alkhorabi

Structure members assignment

• Direct method:struct student stud_1;

stud_1.department = 1;

stud_1.level = 3;

• The student represented by stud_1 is in department 1 (Computer for example) and in level 3

0.3- 113Prof A Alkhorabi

Structure members assignment

• Indirect method:struct student *ptr;

ptr = &stud_1;

ptr -> department = 1;

ptr -> level = 3;

• Also this means that the student represented by stud_1 is in department 1 (Computer for example) and in level 3

0.3- 114Prof A Alkhorabi

/* struct1.c Structures - members accessing */#include <stdio.h>#include <string.h>struct date{

int day;int month;int year;

};struct student{

char name[30];int department;int level;struct date date_of_birth;

};

0.3- 115Prof A Alkhorabi

/* struct1.c Structures - members accessing - Continued */struct student stud_1, *std_ptr, class1[2];void read_students_data(void);void write_students_data(void);void write_student_data_using_pointers(void);

void main(void){printf("%d %d %d %lu %lu\n",

sizeof(stud_1), sizeof(*std_ptr), sizeof(*class1), sizeof(std_ptr), sizeof(class1) );

read_students_data();write_students_data();write_student_data_using_pointers(); }

0.3- 116Prof A Alkhorabi

/* struct1.c Structures - members accessing - Continued */void read_students_data(void){int i;char full_name[30];for ( i = 0; i < 2; ++i ){ printf("\nEnter data of student %d :\n", i + 1); puts("\tstudent name : First Middle Last (names)\n"); gets(full_name); strcpy(class1[i].name, full_name); puts(" \n\tstudent department(int) "); scanf("%d", &class1[i].department); puts(" \n\tstudent level(int) "); scanf("%d", &class1[i].level); printf("\n\tstudent date of Birth Day(int), Month(int) and Year(int)"); scanf("%d%d%d", &class1[i].date_of_birth.day, &class1[i].date_of_birth.month, &class1[i].date_of_birth.year); fflush ( stdin ); } }

0.3- 117Prof A Alkhorabi

/* struct1.c Structures - members accessing - Continued */void write_students_data(void){int i;for ( i = 0; i < 2; i++ ){ printf("Data of student %d :\n", i + 1); printf("\tstudent name : %s \n", class1[i].name); printf("\tstudent department : %d\n", class1[i].department); printf("\tstudent level : %d\n", class1[i].level); printf("\tstudent date of Birth : %d\\%d\\%d \n\n", class1[i].date_of_birth.day,

class1[i].date_of_birth.month, class1[i].date_of_birth.year);

} }

0.3- 118Prof A Alkhorabi

/* struct1.c Structures - members accessing - Continued */void write_student_data_using_pointers(void){int i = 1;std_ptr = class1; /* could be written std_ptr = &class[0]; */

while( std_ptr && i < 3 ) /* while std_ptr is not equal to NULL*/{ printf("Data of student %d :\n", i++ ); printf("\tstudent name : %s\n", std_ptr->name); printf("\tstudent department : %d\n", std_ptr->department); printf("\tstudent level : %d\n", std_ptr->level); printf("\tstudent date of Birth : %d\\%d\\%d \n\n", std_ptr->date_of_birth.day,

std_ptr->date_of_birth.month, std_ptr->date_of_birth.year); ++std_ptr; }}

0.3- 119Prof A Alkhorabi

• Directlystruct student stud_1, stud_2, *ptr1, *ptr2;

stud_1.department = 3;

stud_2 = stud_1;

printf (“%d”, stud_2.department);

Assigning a structure variable to Another

0.3- 120Prof A Alkhorabi

• Directlystruct student stud_1, stud_2, *ptr1, *ptr2;

prt1 = & stud_1;

ptr1 = & stud_1;

ptr2 = ptr1;

Assigning a structure variable to Another

0.3- 121Prof A Alkhorabi

/* struct2.c Structure assignment */#include <stdio.h>struct student{ char name[20];

int department;int level; };

void main(void){ struct student stud_1, stud_2, *ptr1, *ptr2;

stud_1.department = 3;stud_2 = stud_1;ptr1 = &stud_1;ptr2 = ptr1;printf("department = %d.\ndepartment = %d.\ndepartment \= %d.\ndepartment = %d.", stud_1.department,stud_2.department, ptr1->department,ptr2->department ); }

Data Structures

--

C++ Review

Prof A Alkhorabi

الخــوربي /دأ. علي عـبدالله

0.3- 123Prof A Alkhorabi

C/C++ Similarities

• Comments /* …. */• Basic Data Types (Objects)• Operators• Operator Precedence• Declarations and Definitions• Program Structure• Assignment• Identifiers • Program Control

0.3- 124Prof A Alkhorabi

// Program: Display greetings// Author: A Alkhorabi// Date: 11/10/2009

#include <iostream> // or <iostream.h>

int main() { cout << "Hello world!" << endl; return 0;}

A First Program - Hello.cpp

Preprocessor directives

InsertionStatement-o/p

Ends executionsof main() which ends

program

Comments

Function named main()

indicates start of

program

0.3- 125Prof A Alkhorabi

Greeting Output

0.3- 126Prof A Alkhorabi

C++ Objects• In C++ (OOP) all of the following are considered

objects:– Constants– Variables– Objects (of classes)

0.3- 127Prof A Alkhorabi

Const Definitions• Modifier const indicates that an object cannot be changed

– Object is read-only

• Useful when defining objects representing physical and mathematical constants

const float Pi = 3.1415;

• Value has a name that can be used throughout the programconst int SampleSize = 100;

• Makes changing the constant easy– Only need to change the definition and recompile

0.3- 128Prof A Alkhorabi

C++ Classes

Object-Oriented ProgrammingUsing C++

0.3- 129Prof A Alkhorabi

Outline

• Class Declaration

• Access Control

• Constructors and Destructors

• Instance Declaration

0.3- 130Prof A Alkhorabi

Class Declaration

class ClassName {

private:

// hidden declarations go here

public:

// interface visible to the user goes here

};

0.3- 131Prof A Alkhorabi

Access Control

• Private– Prevent access outside of class

– Primarily attributes (data), some methods

• Public section– Declare interface (usually only methods-functions)

– Usable anywhere outside of class

0.3- 132Prof A Alkhorabi

Constructors• Responsible for initializing new objects• Default: ClassName(); // Empty parameters• Copy: ClassName(const ClassName& C);• User named: ClassName(char* name);

Ex:class Frame // Window class{ private:

public:

};

0.3- 133Prof A Alkhorabi

Object (Instance) Declaration

• Use class name like built-in type

• Declaration may use different constructors– Frame fstWindow; // uses default

– Frame scdWindow(fstWindow); // copy

– Frame thdWindow(“Third”); // user

• When declaration comes in scope, object created.

0.3- 134Prof A Alkhorabi

Constructors and Initialization

• Sequence of object creation:1. Create storage for object

2. Initialize storage

3. Perform body of constructor

0.3- 135Prof A Alkhorabi

Destructors

• Responsible for properly destroying object

• Prototype: ~Frame()

• Declare one even if you don’t need it:

~Frame() {}

• Important when have pointers as field

0.3- 136Prof A Alkhorabi

(Other) Methods

• Declare prototypes in class declaration

int hasName(char *nme);

• Note: no return type for constructors and destructors

• Using methods– Inside class: hasName()

– Outside class: fstWindow.hasName();

0.3- 137Prof A Alkhorabi

Parameters

• Pass-by-value

int hasName(string nme);

• Pass-by-reference

int hasName(string& nme);

• What happens when pass complex object by value?

0.3- 138Prof A Alkhorabi

Matters of Necessity

If you want to use your class like a built-in type, you must include– A default constructor

– A copy constructor

– An assignment operator

– A destructor

0.3- 139Prof A Alkhorabi

// constr1.cpp// Constructor & Destructor Example - constr1.cpp// Dynamic Objects Allocation & Deletion Application #include <iostream.h>#include <string.h>

class student{

char *name;int department, level;

public :student(int sz); // Constructorvoid get_stud(void);void show_stud(void);~student(); // Destructor

};

0.3- 140Prof A Alkhorabi

student::student(int sz){ name = new char[sz]; }

void student::get_stud(void){ strcpy(name, "Ahmed Hussien");department = 2;level = 3;}

void student::show_stud(void){ cout << "Student name : " << name

<< "\nDepartment : " << department << "\nLevel : " << level; }

student::~student(){ delete name; }

0.3- 141Prof A Alkhorabi

int main(void){ student stud(30); // Declare a stud object - Constuctor

// & allocate memory to it. stud.get_stud(); stud.show_stud();

return 0;}

OutputStudent name : Ahmed Hussien Department : 2Level : 3

0.3- 142Prof A Alkhorabi

ClassesInheritance

Mechanism for deriving new classes from existing classes

0.3- 143Prof A Alkhorabi

Inheritance

• Be able to create specialized objects without starting from scratch

• Inheritance is the object-oriented programming mechanism for specialization

0.3- 144Prof A Alkhorabi

ShapesHierarchy

C: ShapeDM: Color

MF: GetColor(), SetColor()

C: RectangleShapeDM: Width, Height

MF: Draw(), GetWidth(),GetHeight(), SetSize()

C: TriangleShapeDM: SideLength

MF: Draw(),GetSideLength(),

SetSize()

C: WindowObjectDM: Location, Window

MF: GetPosition(), GetWindow(), SetPosition()

C: Label

C: EllipseShapeDM: Width, Height

MF: Draw(),GetWidth(),

GetHeight(), SetSize()

Prof A Alkhorabi

Defining a Derived Class

class DerivedClass : public BaseClass { private:

// private section ... public:

// public section ...};

Derived class name

Access specifier(usually public)

Class name ofbase class

Prof A Alkhorabi

Declaring a Derived Class

class Shape : public WindowObject {

private:

color Color;

public:

Shape(SimpleWindow &w,

const Position &p,

const color &c = Red);

color GetColor() const;

void SetColor(const color &c);

};

Read this as Shape is a kind of WindowObject

Shape inherits WindowObjectmembers Window, Location,GetPosition(), GetWindow(),and SetPosition()

Prof A Alkhorabi

Inheritance and Member Access

class SomeClass {private:

int MyPrivateData;protected:

int MyProtectedData;public:

void MemberFunction();int MyPublicData;

};

void SomeClass::MemberFunction() {MyPrivateData = 3; // access allowedMyProtectedData = 2; // access allowedMyPublicData = 1; // access allowed

}

Prof A Alkhorabi

Inheritance and Member Access

void NonMemberFunction() {SomeClass C;C.MyPrivateData = 3; // illegalC.MyProtectedData = 2; // illegalC.MyPublicData = 1; // access allowed

}

Prof A Alkhorabi

Inheritance and Member Access

class BaseClass {public: int MyPublicData;protected: int MyProtectedData;private: int MyPrivateData;

};

class DerivedClass : public BaseClass {public: void DerivedClassFunction();// ...

};

void DerivedClass::DerivedClassFunction() {MyPrivateData = 3; // illegalMyProtectedData = 2; // access allowedMyPublicData = 1; // access allowed

}

0.3- 150Prof A Alkhorabi

Accessed by

Class Members

Basic Class Members

Derive Classes

Class Objects

Private members

Protected members

Public members

Yes

Yes

Yes

No

Yes

Yes

No

No

Yes

0.3- 151Prof A Alkhorabi

// inhert0.cpp// Inheritance (Single and Multi level) Example#include <iostream.h>#include <string.h>

class A // Base Class{ // Base class private members are inaccessable by drived class members protected :

int a1, a2; public :

void fnA1(void) {cout << "From class A : Data members ; a1 & a2\n";}

void fnA2(void) { cout << "From class A : Function members ; fnA1() & fnA2()\n"; }};

class B : public A // Derived Class{ protected : int b1, b2; public : void fnB(void) { cout << "From class B : Data members ; b1 & b2\n“

<< "From class B : Function member ; fnB()\n"; }};

0.3- 152Prof A Alkhorabi

class C : public B // Derived Class

{

protected :

int c1;

public :

void fnC(void) {

cout

<< "From class C : Data member ; c1\n"

<< "From class C : Function member ; fnC()\n";

}

};

0.3- 153Prof A Alkhorabi

int main(void){A a; B b; C c;

cout << "Class A has access to the following mambers :\n"; a.fnA1(); // Base class(A) member function a.fnA2(); // Base class(A) member function cout << "\n"; cout << "Class B has access to the following mambers :\n"; b.fnA1(); // Base class(A) member function b.fnA2(); // Base class(A) member function b.fnB(); // Derived class(B) member function cout << "\n"; cout << "Class C has access to the following mambers :\n"; c.fnA1(); // Base class(A) member function c.fnA2(); // Base class(A) member function c.fnB(); // Derived class(B) member function c.fnC(); // Derived class(C) member function return 0; }

0.3- 154Prof A Alkhorabi

Output Class A has access to the following members :From class A : Data members ; a1 & a2From class A : Function members ; fnA1() & fnA2() Class B has access to the following members :From class A : Data members ; a1 & a2From class A : Function members ; fnA1() & fnA2()From class B : Data members ; b1 & b2From class B : Function member ; fnB()

Class C has access to the following members :From class A : Data members ; a1 & a2From class A : Function members ; fnA1() & fnA2()From class B : Data members ; b1 & b2From class B : Function member ; fnB()From class C : Data member ; c1From class C : Function member ; fnC()

0.3- 155Prof A Alkhorabi

Polymorphism

• A polymorphism is a form of generalization

• Allows reuse of code within a program– Only have to write one

• List class

• Sort function

• Binary search tree class

0.3- 156Prof A Alkhorabi

Polymorphism in C++

• Polymorphic functions– Through inheritance

– Operator overloading

• Polymorphic types– Template classes

0.3- 157Prof A Alkhorabi

Inheritance Relationship

• Classes may “inherit” properties from others

• Ex. A dog is a mammal

• Inheritance defines a hierarchy of classes

0.3- 158Prof A Alkhorabi

Inheritance Terminology

• Base, super- or parent class

Refers to class inherited from

• Derived, sub-, or child class

Refers to class which inherits

0.3- 159Prof A Alkhorabi

Subtypes

• We want inheritance to reflect a subtype relationship

• Ex.– A dog is a mammal

– An integer is a real number

– The numbers 0-9 are integers

• Subtypes share properties (operations) with supertype

0.3- 160Prof A Alkhorabi

Polymorphism and Subtypes

• A subtype can be used anywhere a supertype can be– Ex. An integer in the range 0-10 can be used

anywhere an integer can be used– Ex. An integer can be used anywhere a real

number can be used

• Defining a function on supertypes allows us to use it on the subtypes

• Limited form of polymorphism