Download as pdf or txt
Download as pdf or txt
You are on page 1of 120

)1( ‫برمجة‬

‫الوحدة األولى‬

AbdulRahman M.Baraka
2012
‫مفهوم البرمجة الكينونية‬
‫الكينون‪:‬‬ ‫‪‬‬
‫وحدة برمجية لها استقاللها‪.‬‬ ‫‪‬‬

‫مشتقة من الصنف‪.‬‬ ‫‪‬‬

‫تجسيد لشيء واقعي يؤدي مهمة محددة‪.‬‬ ‫‪‬‬

‫يحتوي بياناته الخاصة به‪.‬‬ ‫‪‬‬

‫يحتوي على العمليات على تلك البيانات‪.‬‬ ‫‪‬‬

‫المزايا‪:‬‬ ‫‪‬‬
‫خصوصية المعلومات واخفائها (‪.)Information Privacy and Hiding‬‬ ‫‪‬‬

‫التوارث (‪.)Inheritance‬‬ ‫‪‬‬

‫االستعمال المتعدد (‪.)Polymorphism‬‬ ‫‪‬‬

‫استخدام الكينونات الديناميكية‪.‬‬ ‫‪‬‬


‫التحليل الكينوني‬
‫‪Object-Oriented Analysis‬‬
‫تحديد الكينونات‪.‬‬ ‫‪‬‬
‫الكتاب‬
‫تحديد خصائص الكينونات‪.‬‬ ‫‪‬‬
‫العنوان‬
‫تحديد العالقات بين الكينونات‪.‬‬ ‫‪‬‬
‫دار النشر‬ ‫يعرف (‪ :)Knows‬المقرر – الطالب‪.‬‬ ‫‪‬‬
‫المؤلف‬ ‫يكون (‪ :)Is‬الحاسوب‪ :‬ذاكرة و معالج ‪...‬‬ ‫‪‬‬
‫‪ISBN‬‬ ‫يملك (‪ :)Has‬السرعة ‪ :‬القطار و السيارة‪.‬‬ ‫‪‬‬

‫االعارة‬ ‫تجميع الكينونات‪.‬‬ ‫‪‬‬


‫التصميم الكينوني‬
‫‪Object-Oriented Design‬‬
‫بناء العمليات‪.‬‬ ‫‪‬‬
‫تحديد المعامالت (‪.)Parameters‬‬ ‫‪‬‬

‫اختيار لغة البرمجة‪.‬‬ ‫‪‬‬


‫لغة كينونية‪.‬‬ ‫‪‬‬
‫البرمجة الكينونية‬
‫‪Object-Oriented Programming‬‬
‫خصائص البرامج الجيدة‪:‬‬ ‫‪‬‬
‫أن يكون البرنامج صحيحا‪ :‬تنفيذ المهام بدون اخطاء‪.‬‬ ‫‪.1‬‬

‫فعال‪ :‬استغالل امثل لمكونات الحاسوب‪.‬‬ ‫‪.2‬‬

‫قابل إلعادة االستخدام‪ :‬يمكن االستفادة من مكوناته في برامج أخرى‪.‬‬ ‫‪.3‬‬

‫الخصائص االساسية للغات البرمجة الكينونية‪:‬‬ ‫‪‬‬


‫خصوصية المعلومات وإخفائها ( ‪Information Privacy and‬‬ ‫‪.1‬‬
‫‪.)Hiding‬‬
‫التوارث (‪.)Inheritance‬‬ ‫‪.2‬‬

‫االستعمال المتعدد (‪.)Polymorphism‬‬ ‫‪.3‬‬


‫نهاية‬
‫الوحدة‬
)1( ‫برمجة‬

‫الوحدة الثانية‬

AbdulRahman M.Baraka
2012
‫االدخال واالخراج‬
.‫) لالخراج على الشاشة‬Cout( ‫تستخدم‬ 
.‫) لالدخال من لوحة المفاتيح‬Cin( ‫واالمر‬ 
.‫يفصل بين أي مدخلين بفراغ او بسطر جديد‬ 
<iostream.h> ‫كال االمرين موجودين في مكتبة‬ 
 cin>>num1;
 cout<<“Number 1 is :”<<num1;
 cin.getline(str,length,terminating character);
 cin.getline(myname,10,”X”);
 \n new line
 \a alert
 \” “
 \’ \’
‫‪Structures‬‬
‫مجموعة من الحقول خاصة بكائن معين (تختلف‪/‬تتفق) في‬ ‫‪‬‬
‫نوع البيانات‪.‬‬
‫تستخدم لوصف خصائص كائن معين‪.‬‬ ‫‪‬‬
‫‪‬‬ ‫‪struct structure name‬‬
‫‪‬‬ ‫{‬
‫;‪Variables‬‬

‫‪‬‬ ‫;‪} variables‬‬


Structures-Example(p1)
 #include <iostream.h>
 struct Time
 {
 int hour;
 int min;
 int sec ;
 };

 int main(int argc, char* argv)][
 {
 int no;
 Time t ;

 cout<<"Please enter the time: \nHoure;":
 cin>>t.hour;
 cout<<"\nMinute;":
 cin>>t.min;
 cout<<"\nSecond;":
 cin>>t.sec;
 cout<<"\nTime is : "<<t.hour<<":"<<t.min<<":"<<t.sec;
 return 0 ;
 }
Example(p2)
 struct Student
 {
 char name[10];
 int Mid; int Ass1; int Ass2; int final l; int practical;
 float avg;
 };

 int main(int argc, char* argv[])
 {
 int no;
 Student std;
 cout<<"Please enter the below informations: \nName:";
 cin>>std.name;
 cout<<"\nMidterm exam:"; cin>>std.Mid;
 cout<<"\nAssignment 1:"; cin>>std.Ass1;
 cout<<"\nAssignment 2:"; cin>>std.Ass2;
 cout<<"\nFinal exam:"; cin>>std.final;
 cout<<"\nPractical:"; cin>>std.practical;
 std.avg=(std.Ass1*0.05)+(std.Ass2*0.05)+(std.Mid*0.24)+(std.final*0.36)+(std.practical*0.3);
 cout<<"\nStudent Name : "<<std.name;
 cout<<"\nHis average is : "<<std.avg<<" %.";
 cin>>no;
 return 0;
 }

‫‪Array‬‬
‫مجموعة من العناصر مشتركة النوع البيانات‪.‬‬ ‫‪‬‬

‫وضعت في الذاكرة بشكل متسلسل‪.‬‬ ‫‪‬‬

‫للوصول الى أي عنصر في المصفوفة يكتفي بمعرفة بداية‬ ‫‪‬‬


‫المصفوفة وعدد خطوات التقدم‪.‬‬
Array-Example
 /* define an array of 10 chars */
 char x[4] = {‘t’,’e’,’s’,’t’};

 /* accessing element 0 */
 x[0] = ‘T’;

 char y[5];
 int i;
 for (i=0; i<5; i++)
 {
 cout<<y[i]<<“\n”;
 }
Array-Example (p3)
 # include <iostream.h>
 int main(int argc, char* argv[])
 {
 int y[5];
 int i;
 cout<<"Please enter five numbers:";
 for (i=0; i<5; i++)
 {
 cout<<"\nnumber("<<i<<"):";
 cin>>y[i];
 }

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


 {
 cout<<y[i];
 }
 cin>>i;
 return 0;
 }
Classes and Objects
.‫قالب عام نستنسخ منه كائنات تحمل نفس الصفات‬ 
.)Data Type( ‫يعتبر نوع بيانات‬ 
Member ( ‫) ودوال‬Member Variables( ‫يحتوي على متغيرات‬ 
.)Functions

class class_name
{
private:
variable declarations;//class
function declarations;//members
public:
variable declarations;//class
function declarations;//members
} Object_Name;
‫‪Access Modifier‬‬
‫خاص (‪:)Private‬‬ ‫‪‬‬
‫ال يسمح بالتعامل معه إال اعضاء نفس الصنف (‪.)Class‬‬ ‫‪‬‬

‫عام (‪:)Public‬‬ ‫‪‬‬


‫مسموح بالتعامل معه مع جميع االصناف االخرى‪.‬‬ ‫‪‬‬

‫صديق (‪:)Friend‬‬ ‫‪‬‬


‫ال يسمح بالتعامل معه إال اعضاء نفس الصنف (‪ .)Class‬أو اعضاء‬ ‫‪‬‬
‫الصنف الصديق معه‪.‬‬
‫محمي (‪:)Protected‬‬ ‫‪‬‬
‫ال يسمح بالتعامل معه إال اعضاء نفس الصنف (‪ .)Class‬أو اعضاء‬ ‫‪‬‬
‫الصنف المورث وراثة عامة‪.‬‬
Classes
:‫قم بانشاء الصنف التالي‬ 
class time
{ Time
private:
int hour;
Hour
int min; Minute
int sec;
Second
public:
int gethour(); -Change Hour.
int getmin(); -Change Minute.
int getsec();
void sethour(int h); -Change Second.
void setmin(int m);
void setsec(int s); -Get Hour,
;} Minute, Second.
Classes and Object
.‫ هو أخذ نسخة من صنف معرف مسبقا‬:‫الكائن‬ 

:‫الصيغة العامة‬ 
 Object declaration:
 class_name obj1;
 class_name obj2,obj3;
 class class_name
 {……}obj1,obj2,obj3;
Member Function
.‫تشبه الدوال العادية ولكن يجب تحديد الصنف مرتبطة به‬ 
 void Class_name :: member_function_name()
 {}
Example:
class time
{
private:
int hour; void time::setsec(int h)
int min; { … };
int sec;
public:
int gethour();
int getmin();
int getsec();
void sethour(int h);
void setmin(int m);
void setsec(int s);
;}
‫‪Constructor Function‬‬
‫دالة منتمية لصنف تحمل نفس اسمه‪.‬‬ ‫‪‬‬
‫ال يجوز أن ترجع أي قيمة‪.‬‬ ‫‪‬‬
‫تستدعى تلقائيا عند انشاء كائن من صنفها‪.‬‬ ‫‪‬‬
‫)(‪ person :: person‬‬
‫{ ‪‬‬
‫‪‬‬ ‫;‪age=20; height=170; weight=70‬‬
‫} ‪‬‬
‫اذا كان هناك معامالت لها فانه ال يجوز انشاء كائن من الصنف‬ ‫‪‬‬
‫إال بتمرير قيمة لهذه المعامالت‪.‬‬
‫;)‪ person p(180,73‬‬
Example of Constructor
 Example:
class time
{
private:
int hour;
int min;
int sec; void time::time(int h)
public: { … };
int gethour();
int getmin();
int getsec();
Void time(int h, int min, int sec);
void sethour(int h);
void setmin(int m);
void setsec(int s);
;}
‫‪Destructor Function‬‬
‫دالة منتمية لصنف تحمل نفس اسمه‪.‬‬ ‫‪‬‬

‫ال يجوز أن ترجع أي قيمة‪.‬‬ ‫‪‬‬

‫تستدعى تلقائيا عند االنتهاء استخدام الكائن‪.‬‬ ‫‪‬‬


‫‪‬‬ ‫)(‪person ::~ person‬‬
‫‪‬‬ ‫{‬
‫‪‬‬ ‫}‬
‫‪Inline Functions‬‬
‫استبدال جملة استدعاء الدالة بمجموعة الجمل المشكلة لجسم‬ ‫‪‬‬
‫الدالة‪.‬‬
‫طرق تعريفها‪:‬‬ ‫‪‬‬
‫تعرف الدالة بشكل كامل داخل الصنف‪.‬‬ ‫‪.1‬‬
‫تضاف كلمة (‪ )inline‬في بداية الدالة‪(.‬منفصلة عن الصنف)‪.‬‬ ‫‪.2‬‬
‫‪Default Arguments‬‬
‫وضع قيمة اولية للمعامالت‪.‬‬ ‫‪‬‬

‫اذا تم االستدعاء بمعامالت جديدة يتم اعتمادها واال فانه يتم‬ ‫‪‬‬
‫استخدام القيم االولية‪.‬‬
‫ترتيب قيم اسناد المعامالت مهم جدا‪.‬‬ ‫‪‬‬
‫‪‬‬ ‫‪person :: person (int age, float tall=166, float‬‬
‫)‪weight=89‬‬
‫‪‬‬ ‫{‬
‫‪‬‬ ‫}‬
‫‪Const Functions and Const Objects‬‬
‫ال يمكن ان يجري عبرها أي تعديل على متغير‪.‬‬ ‫‪‬‬

‫ال تستدعي اال دالة منتمية ثابتة فقط‪.‬‬ ‫‪‬‬


‫يمكن تعريفها باستخدام كلمة (‪ )const‬بعد اسم الدالة‪.‬‬ ‫‪‬‬

‫‪‬‬ ‫‪void test1() const‬‬


‫‪‬‬ ‫{‬
‫‪‬‬ ‫}‬
class Circle ‫اسم الصنف‬
{
private:
double radius;
‫الخصائص‬
public:
Circle() { radius = 0.0;} ‫قيم اولية‬
Circle(int r);
void setRadius(double r){radius = r;}
double getDiameter(){ return radius *2;} ‫العمليات‬
double getArea();
double getCircumference();
};
Circle::Circle(int r)
{ ‫بناء‬
radius = r;
}
double Circle::getArea() ‫عمليات خاصة بالصنف‬
{
return radius * radius * (22.0/7);
}
double Circle:: getCircumference()
{
return 2 * radius * (22.0/7);
}
‫نهاية‬
‫الوحدة‬
)1( ‫برمجة‬

‫الوحدة الثالثة‬

AbdulRahman M.Baraka
2012
‫المصفوفات واألصناف‬
:‫مصفوفة أعداد‬ 
 int x[10];
1 55 6 8 0 15 26 74 10 65
0 1 2 3 4 ….
:‫ايجاد أكبر عدد في مصفوفة‬ 
int max=x[0];
for (int i=0 ; i<10 ; i++)
{
if (max<x[i])
max=x[i]
}
cout<<max
Max-Array.cpp
‫المصفوفات واألصناف‬
:‫مصفوفة داخل صنف‬ 
 class Student
 {
 private:
 string name;
 int no;
 double Avg;
 float mark[3];  void Student::Readmark()
 public:  {
 float sum;
 string getName();  for(int y=0;y<3;y++)
 void ChangeName(string x);  {
 double getAvg();  cout<<"enter mark("<<y+1<<"):";
 void Readmark();  cin>>mark[y];
 };  sum += mark[y];
 }
 Avg=sum/3;
 }

Student2.cpp
‫المصفوفات واألصناف‬
:‫مصفوفة كائنات‬ 
 Student x[3]; Student1 Student2 Student3

No Name Mark[3] Avg

getName()
ChangeName()
void Student::Readmark()
{ readmark()
.
float sum;
for(int y=0;y<3;y++) .
{
cout<<endl<<"enter mark("<<y+1<<"):";
cin>>mark[y];
sum += mark[y];
}
Avg=sum/3; Student3.cpp
}
‫الفرز االنتقائي‬
Sorting an Array of Integers
Example: 
we are 70

given an 60

array of six 50

integers 40
30
that we
20
want to sort
10
from 0
smallest to [1] [0] [2] [1] [3] [2] [4] [3] [5] [4] [6] [5]

largest
‫الفرز االنتقائي‬
The Selection Sort Algorithm
Start by 
finding the 70

smallest 60

entry. 50
40

30
20
10
0
[1] [0][2] [1] [3] [2][4] [3] [5] [4] [6] [5]
‫الفرز االنتقائي‬
The Selection Sort Algorithm
Swap the 
smallest 70

entry with 60

the first 50

entry. 40

30
20
10
0
[1] [0][2] [1] [3] [2][4] [3] [5] [4] [6] [5]
‫الفرز االنتقائي‬
The Selection Sort Algorithm
Swap the 
smallest 70

entry with 60

the first 50

entry. 40

30
20
10
0
[1] [0] [2] [1] [3] [2] [4] [3] [5] [4] [6] [5]
‫الفرز االنتقائي‬
The Selection Sort Algorithm
Sorted side Unsorted side

70
Part of the  60
array is now 50

sorted. 40

30
20
10
0
[1] [0] [2][1] [3][2] [4][3] [5][4] [6][5]
‫الفرز االنتقائي‬
The Selection Sort Algorithm
Sorted side Unsorted side

70
Find the  60
smallest 50

element in 40

the 30

unsorted 20

side. 10
0
[1] [0] [2][1] [3][2] [4][3] [5][4] [6][5]
‫الفرز االنتقائي‬
The Selection Sort Algorithm
Sorted side Unsorted side

70
Swap with  60
the front of 50

the 40

unsorted 30

side. 20
10
0
[1] [0] [2] [1] [3] [2] [4] [3] [5] [4] [6] [5]
‫الفرز االنتقائي‬
The Selection Sort Algorithm
Sorted side Unsorted side

70
We have  60
increased 50

the size of 40

the sorted 30

side by one 20

element. 10
0
[1] [0][2] [1] [3] [2][4] [3] [5] [4] [6] [5]
‫الفرز االنتقائي‬
The Selection Sort Algorithm
Sorted side Unsorted side

70
The  60
Smallest
process 50 from
continues... 40 unsorted

30
20
10
0
[1] [0] [2] [1] [3] [2] [4] [3] [5] [4] [6] [5]
‫الفرز االنتقائي‬
The Selection Sort Algorithm
Sorted side Unsorted side

70
The  60
process 50

continues... 40

30
20
10
0
[1] [0] [2] [1] [3] [2] [4] [3] [5] [4] [6] [5]
‫الفرز االنتقائي‬
The Selection Sort Algorithm
Sorted side
is bigger Sorted side Unsorted side

70
The  60
process 50

continues... 40

30
20
10
0
[1] [0] [2] [1] [3] [2] [4] [3] [5] [4] [6] [5]
‫الفرز االنتقائي‬
The Selection Sort Algorithm
The process 
Sorted side Unsorted side

keeps adding 70

one more 60

number to the 50

sorted side. 40

30
The sorted 
20
side has the 10
smallest 0
numbers, [1] [0] [2] [1] [3] [2] [4] [3] [5] [4] [6] [5]
‫الفرز االنتقائي‬
The Selection Sort Algorithm
We can stop 
Sorted side Unsorted side

when the 70

unsorted side 60

has just one 50

number, since 40

30
that number
20
must be the
10
largest 0
number. [1] [0] [2] [1] [3] [2] [4] [3] [5] [4] [6] [5]
‫الفرز االنتقائي‬
The Selection Sort Algorithm
The array is 
now sorted. 70

We repeatedly 
60
50
selected the
40
smallest 30
element, and 20
moved this 10
element to the 0
front of the [1] [0] [2] [1] [3] [2] [4] [3] [5] [4] [6] [5]
‫المصفوفات واألصناف‬
:)‫تمرير مصفوفة كائنات الى صنف (الفرز االنتقائي‬ 
void ssort(Student* st,int n)
{ n j
for(int i=0; i<n-1 ; i++) 0 1 2
{ st Student1 Student2 Student3
double min=st[i].getAvg();
int pos=i; Name: Ali Name: Omar Name: Mona
for (int j=i+1 ; j<n ; j++) Avg: 66 Avg: 99 Avg: 53
{
if (st[j].getAvg()<min)
{ i=0
min=st[j].getAvg(); min=66
pos=j; Pos=0
} j=1
Student a= st[pos];
st[pos]= st[i]; Step-1
st[i]=a;
} }} ssort.cpp
)‫المصفوفات واألصناف (تابع‬
:‫تمرير مصفوفة كائنات الى صنف‬ 
void ssort(Student* st,int n)
{ n j
for(int i=0; i<n-1 ; i++) 0 1 2
{ st Student1 Student2 Student3
double min=st[i].getAvg();
int pos=i; Name: Ali Name: Omar Name: Mona
for (int j=i+1 ; j<n ; j++) Avg: 66 Avg: 99 Avg: 53
{
if (st[j].getAvg()<min)
{ i=0
min=st[j].getAvg(); min=53
pos=j; Pos=2
} j=2
Student a= st[pos];
st[pos]= st[i]; Step-2
st[i]=a;
} }} ssort.cpp
)‫المصفوفات واألصناف (تابع‬
:‫تمرير مصفوفة كائنات الى صنف‬ 
void ssort(Student* st,int n)
{ n j
for(int i=0; i<n-1 ; i++) 0 1 2
{ st Student1 Student2 Student3
double min=st[i].getAvg();
int pos=i; Name: Ali Name: Omar Name: Mona
for (int j=i+1 ; j<n ; j++) Avg: 66 Avg: 99 Avg: 53
{
if (st[j].getAvg()<min)
{ Name: Mona i=0
min=st[j].getAvg(); a Avg: 53 min=53
pos=j; Pos=2
} j=2
Student a= st[pos];
st[pos]= st[i]; Step-3
st[i]=a;
} }} ssort.cpp
)‫المصفوفات واألصناف (تابع‬
:‫تمرير مصفوفة كائنات الى صنف‬ 
void ssort(Student* st,int n)
{ n j
for(int i=0; i<n-1 ; i++) 0 1 2
{ st Student1 Student2 Student3
double min=st[i].getAvg();
int pos=i; Name: Mona Name: Omar Name: Ali
for (int j=i+1 ; j<n ; j++) Avg: 53 Avg: 99 Avg: 66
{
if (st[j].getAvg()<min)
{ Name: Mona i=0
min=st[j].getAvg(); a Avg: 53 min=53
pos=j; Pos=2
} j=2
Student a= st[pos];
st[pos]= st[i]; Step-4
st[i]=a;
} }} ssort.cpp
‫البحث الثنائي‬
‫يجب أن تكون المصفوفة مرتبة تصاعديا‪.‬‬ ‫‪‬‬
‫نبحث عن الرقم ‪.11‬‬ ‫‪‬‬
‫‪‬‬ ‫‪Step 1:‬‬ ‫‪high‬‬
‫‪mid‬‬

‫‪4‬‬ ‫‪6‬‬ ‫‪7‬‬ ‫‪11‬‬ ‫‪28‬‬

‫‪low‬‬
‫البحث الثنائي‬
‫يجب أن تكون المصفوفة مرتبة تصاعديا‪.‬‬ ‫‪‬‬
‫نبحث عن الرقم ‪.11‬‬ ‫‪‬‬
‫‪‬‬ ‫‪Step 2:‬‬ ‫‪high‬‬
‫‪mid‬‬

‫‪4‬‬ ‫‪6‬‬ ‫‪7‬‬ ‫‪11‬‬ ‫‪28‬‬

‫‪low‬‬
‫البحث الثنائي‬
‫يجب أن تكون المصفوفة مرتبة تصاعديا‪.‬‬ ‫‪‬‬
‫نبحث عن الرقم ‪.11‬‬ ‫‪‬‬
‫‪‬‬ ‫‪Step 2:‬‬ ‫‪high‬‬
‫‪mid‬‬

‫‪4‬‬ ‫‪6‬‬ ‫‪7‬‬ ‫‪11‬‬ ‫‪28‬‬

‫‪low‬‬
‫البحث الثنائي‬
‫يجب أن تكون المصفوفة مرتبة تصاعديا‪.‬‬ ‫‪‬‬
‫نبحث عن الرقم ‪.11‬‬ ‫‪‬‬
‫‪‬‬ ‫‪Step 2:‬‬ ‫‪high‬‬
‫‪mid‬‬

‫‪4‬‬ ‫‪6‬‬ ‫‪7‬‬ ‫‪11‬‬ ‫‪28‬‬

‫‪low‬‬
‫المصفوفات واألصناف‬
:)‫تمرير مصفوفة كائنات الى صنف (البحث الثنائي‬ 
int bsearch(Student* st, int n , string sn)
{
int lo=0;
int hi=n-1;
while (lo<=hi) ‫االسم المراد البحث عنه‬
{
int mid = (lo+hi)/2; ‫حجم المصفوفة‬
string r=st[mid].getName();
if(r==sn)
‫مصفوفة االسماء‬
return mid;
else
if( sn>r) )‫(الحظ أنه في الحروف حرف االلف أصغر من الباء‬
lo=mid+1;
else
hi=mid-1;
}
return -1; // not found bsearch.cpp
}
‫المصفوفات واألصناف‬
‫اضافة عنصر الى مصفوفة مرتبة تصاعديا‪:‬‬ ‫‪‬‬
‫اضافة الرقم ‪:8‬‬ ‫‪‬‬

‫‪4‬‬ ‫‪6‬‬ ‫‪9‬‬ ‫‪11‬‬

‫حذف عنصر من مصفوفة مرتبة تصاعديا‪:‬‬ ‫‪‬‬


‫حذف العنصر ‪:8‬‬ ‫‪‬‬

‫‪4‬‬ ‫‪6‬‬ ‫‪8‬‬ ‫‪9‬‬ ‫‪11‬‬

‫‪AddRemoveArray.cpp‬‬
‫المؤشرات‬

‫‪Memory‬‬
‫‪Attribute‬‬ ‫‪Location‬‬ ‫‪Value‬‬
‫‪16‬‬
‫‪17‬‬
‫‪18‬‬
‫‪19‬‬
‫‪20‬‬
‫‪21‬‬
‫مالحظة ‪ :‬األشكال هي للتوضيح فقط وليست كما يحدث بالذاكرة تماما‬ ‫‪22‬‬
‫المؤشرات‬
 int x=10;

Memory
Attribute Location Value
x 16 10
17
18
19
20
21
22
‫المؤشرات‬
 int x=10;
 String name=“Ali”;

Memory
Attribute Location Value
x 16 10
name 25 A
26 l
27 i
‫المؤشرات‬
 int x=10;
 String name=“Ali”;
 cout<<x; => 10

Memory
Attribute Location Value
x 16 10
name 25 A
26 l
27 i
‫المؤشرات‬
 int x=10;
 String name=“Ali”;
 cout<<x; => 10
 cout<<&x; => 16
Memory
Attribute Location Value
x 16 10
name 25 A
26 l
27 i
‫المؤشرات‬
 int x=10;
 String name=“Ali”;
 cout<<x; => 10
 cout<<&x; => 16
Memory
 int *p=&x; Variables Location Value
x 16 10
name 25 A
26 l
27 i
*p 28 16
29 Address
30
‫المؤشرات‬
 int x=10;
 String name=“Ali”;
 cout<<x; => 10
 cout<<&x; => 16
Memory
 int *p=&x; Variables Location Value
 cout<<p; => 16 x 16 10
name 25 A
26 l
27 i
*p 28 16
29
30
‫المؤشرات‬
 int x=10;
 String name=“Ali”;
 cout<<x; => 10
 cout<<&x; => 16
Memory
 int *p=&x; Variables Location Value
 cout<<p; => 16 x 16 10
 cout<<*p; => 10 name 25 A
26 l
27 i
*p 28 16
29
30
‫المؤشرات‬
 int x=10;
 String name=“Ali”;
 cout<<x; => 10
 cout<<&x; => 16
Memory
 int *p=&x; Variables Location Value
 cout<<p; => 16 x 16 10
 cout<<*p; => 10 name 25 A
26 l
 string *s=&name; 27 i
*p 28 16
*s 29 25
30
‫المؤشرات‬
 int x=10;
 String name=“Ali”;
 cout<<x; => 10
 cout<<&x; => 16
Memory
 int *p=&x; Variables Location Value
 cout<<p; => 16 x 16 10
 cout<<*p; => 10 name 25 A
26 l
 string *s=&name; 27 i
*p 28 16
 cout<<s; =>25
*s 29 25
30
‫المؤشرات‬
 int x=10;
 String name=“Ali”;
 cout<<x; => 10
 cout<<&x; => 16
Memory
 int *p=&x; Variables Location Value
 cout<<p; => 16 x 16 10
 cout<<*p; => 10 name 25 A
26 l
 string *s=&name; 27 i
*p 28 16
 cout<<s; =>25
*s 29 25
 cout<<*s; =>”Ali” 30
‫المؤشرات‬
 int x=10;
 String name=“Ali”;
 cout<<x; => 10
 cout<<&x; => 16

 int *p=&x;
 cout<<p; => 16 Memory
 cout<<*p; => 10
Variables Location Value
 string *s=&name; x 16 10
 cout<<s; =>25 name 25 A
 cout<<*s; =>”Ali” 26 l

cout<<&s?? *p
27
28
i
16
*s 29 25
30
‫المؤشرات‬
class Student
{
private:
string name;
int no;
public:
string getName();
void changeNo(); Memory
};
Variables Location Value
s 215 Student:
Student s; getName()
ChangeNo()
‫المؤشرات‬
class Student
{
private:
string name;
int no;
public:
string getName();
void changeNo(); Memory
};
Variables Location Value
s 215 Student:
Student s; 216 name
Student *p=&s; 217 no
218 …..
*p 300 215
‫المؤشرات‬
class Student
{
private:
string name;
int no;
public:
string getName();
void changeNo(); Memory
};
Variables Location Value
s 215 Student:
Student s; 216 name
Student *p=&s; 217 no
s.getName(); 218 …..
*p 300 215
‫المؤشرات‬
class Student
{
private:
string name;
int no;
public:
string getName();
void changeNo(); Memory
};
Variables Location Value
s 215 Student:
Student s; 216 name
Student *p=&s; 217 no
s.getName(); 218 …..
(*p).getName(); *p 300 215
‫المؤشرات‬
class Student
{
private:
string name;
int no;
public:
string getName();
void changeNo(); Memory
};
Variables Location Value
s 215 Student:
Student s; 216 name
Student *p=&s; 217 no
s.getName(); 218 …..
(*p).getName(); *p 300 215

P->getName();
‫حجز الذاكرة‬
‫‪ ‬أنواع حجز الذاكرة‪:‬‬
‫‪ -1‬الستاتيكية‪:‬‬
‫‪ ‬يقوم مترجم اللغة بحجز الذاكرة لجميع المتغيرات عند ترجمة البرنامج‪.‬‬
‫‪ ‬تبقى الذاكرة محجوزة طوال فترة التنفيذ حتى وان لم تستخدم‪.‬‬
‫‪ ‬مثال‪int x; :‬‬

‫‪ -2‬الديناميكية‪:‬‬
‫‪ ‬يتم الحجز وقت تنفيذ البرنامج‪.‬‬
‫‪ ‬يتم حجز الذاكرة التي نحتاج لها فقط وقت التنفيذ‪.‬‬
‫‪ ‬استخدام للذاكرة بشكل أفضل‪.‬‬
‫‪ ‬يتم استخدام الذاكرة بالدالة (‪ )new‬وتحرر باستخدام (‪.)delete‬‬
‫الحجز الديناميكي للذاكرة‬

 int *p;
 P= new int;

Memory
Variables Location Value
*p 1214
1215
1216
1217
1218
1219
1220
‫الحجز الديناميكي للذاكرة‬

 int *p;
 P= new int;
 *p=10;
Memory
Variables Location Value
*p 1214 10
1215
1216
1217
1218
1219
1220
‫الحجز الديناميكي للذاكرة‬
 int *p;
 P= new int;
 *p=10;
 *p=*p+5;
Memory
Variables Location Value
*p 1214 15
1215
1216
1217
1218
1219
1220
‫الحجز الديناميكي للذاكرة‬
 int *p;
 P= new int;
 *p=10;
 *p=*p+5;
Memory
 int *x=new int[3];
Variables Location Value
*p 1214 15
*x 1215
1216
1217
1218
1219
1220
‫الحجز الديناميكي للذاكرة‬
 int *p;
 P= new int;
 *p=10;
 *p=*p+5;
Memory
 int *x=new int[3];
Variables Location Value
 for(int i=0;i<3;i++) *p 1214 15
x[i]=i+2; *x 1215 2
1216 3
1217 4
1218
1219
1220
‫الحجز الديناميكي للذاكرة‬
 int *p;
 P= new int;
 *p=10;
 *p=*p+5;
Memory
 int *x=new int[3];
Variables Location Value
 for(int i=0;i<3;i++) *p 1214 15
x[i]=i+2; 1215
1216
 delete x; 1217
1218
1219
1220
‫القوائم المتصلة‬
‫‪NULL‬‬
‫‪Head‬‬

‫‪8‬‬

‫سلسلة من العقد المتصلة تمثل نوع واحد من البيانات‪.‬‬ ‫‪‬‬


‫تتكون كل عقدة من حقلين ‪:‬‬ ‫‪‬‬
‫حقل يحتوي على البيانات المخزنة به‪.‬‬ ‫‪‬‬
‫حقل يحتوي على عنوان العقدة التالية له أو القيمة (‪ )NULL‬اذا كانت اخر‬ ‫‪‬‬
‫عقدة‪.‬‬
‫القوائم المتصلة‬
:‫تعريف القائمة المتصلة‬ 
struct node
{
int data;
node* next;
};
Head
class linklist
{
private:
node* head;
public:
linklist(){head=NULL;}
.
. Head
void addNode(int n);
node* Search(int x);
};
‫إضافة عقدة جديدة الى بداية قائمة متصلة‬
head
void linklist::addNode(int n)
{
node* newNode= new node;
newlink->data=n;
newlink->next=head;
head=newlink; newNode n
}
‫عرض محتويات قائمة متصلة‬
void linklist::display()
{
node* current=head;
while(current != NULL)
{
cout<<current->data<<endl;
current=current->next;

}
6 8 10 12
head
‫البحث في قائمة متصلة‬
node* linklist::Search(int x)
{
node* p=head;
while (p)
if (p->data==x)
return p;
else
p=p->next;

return NULL; 6 8 10 12
}
‫إضافة عقدة جديدة داخل قائمة متصلة‬
void linklist::addNode2(int n)
{
node* newNode= new node;
node* pre= NULL;
node* current=head;
while (current!=NULL && n < (*current)->data)
{
pre=current;
current=current->next; newNode n
}
newNode->data=n;
newNode->next=current;
pre->next=newNode;
} 6 8 10 12
Head Pre Current
‫إضافة عقدة جديدة في نهاية قائمة متصلة‬
void linklist::addNode3(int n)
{
node* newNode= new node;
newNode->data=n;
newNode->next=NULL; newNode

if (head==NULL)
head=newNode; n
else
{
node* _node= head;
while (_node->next!=NULL)
_node=_node->next;
6 8 10 12
_node->next=newNode;
} Head End
}
‫حذف عقدة من داخل قائمة متصلة‬
int linklist::DeleteNode(int n)
{
node* pre= NULL;
node* current=head;
while (current !=NULL && n != (*current)->data)
{
pre=current;
current=current->next;
}
if (current=NULL)
return 0;
if ((pre=NULL)
head =head->next;
else
6
pre->next=current->next; 8 10 12
delete current;
return 1; Head Pre Current
}
‫نهاية‬
‫الوحدة‬
)1( ‫برمجة‬

‫الوحدة الرابعة‬
‫الدوال الصديقة والعمليات‬
Friend Functions & Operators

AbdulRahman M.Baraka
2012
‫تمرير العوامل للدوال‬
Parameters Passing
(Function)‫) الى الدوال‬Parameters( ‫يتم تمرير العوامل بالقيمة‬ 
.‫وأي تغيير على القيم داخل الدالة ال يغير القيم الحقيقية للعوامل‬
Variables Reference Value
a 1214 10
b 1215 20
1216
1217
1218
int main() { 1219
int a=10; 1220
int b=20;
a:10
cout << “a: " << a << endl; b:20
cout << “b: " << b <<endl<<endl;
} Passing.cpp
‫تمرير العوامل للدوال‬
Parameters Passing
(Function)‫) الى الدوال‬Parameters( ‫يتم تمرير العوامل بالقيمة‬ 
.‫وأي تغيير على القيم داخل الدالة ال يغير القيم الحقيقية للعوامل‬
Variables Reference Value
void swap1 (int x, int y) a 1214 10
{
int z; b 1215 20
20
z=x; x 1216 10
x=y; 10
y 1217 20
y=z;}
z 1218 10
int main() { 1219
int a=10; 1220
int b=20;
swap1(a,b); X:10
cout << “a: " << a << endl; Y:20
cout << “b: " << b <<endl<<endl;
} Passing.cpp
‫تمرير العوامل للدوال‬
Parameters Passing
.‫يمكن تمرير العوامل بالقيمة مع تغيير القيم الحقيقية للعوامل‬ 

Variables Reference Value


void swap2 (int *x, int *y) a 1214 10
{
int z; B 1215 20
1215
z=*x; *x 1216 1214
*x=*y; 1214 *y 1217 1215
*y=z;}
Z 1218 10
int main() { 1219
int a=10; 1220
int b=20;
swap2(&a,&b); X:20
cout << “a: " << a << endl; Y:10
cout << “b: " << b <<endl<<endl;
} Passing.cpp
‫تمرير العوامل للدوال‬
Parameters Passing
.‫يمكن تمرير العوامل باإلشارة‬ 
.‫( ممن ثم يتم تغيير القيم الحقيقية للعوامل‬Reference)‫يتم ارسال‬ 
Variables Reference Value
void swap3 (int &x, int &y) a 1214 10
{
int z; b 1215 20
1215
z=x; x 1214
x=y; 1214
y 1215
y=z;
} z 1218 10
int main() { 1219
int a=10; 1220
int b=20;
swap3(a,b); a:20
cout << “a: " << a << endl; b:10
cout << “b: " << b <<endl<<endl;
} Passing.cpp
‫تمرير العوامل للدوال‬
‫‪Parameters Passing‬‬
‫ال يمكن تمرير المصفوفة باإلشارة‪.‬‬ ‫‪‬‬
‫يتم التمرير بواسطة عنوان أول عنصر‪.‬‬ ‫‪‬‬
‫الدوال واألصناف الصديقة‬
‫‪Friend Functions & Classes‬‬
‫الدوال الصديقة يحق لها معالجة األصناف الخاصة بالصنف‬ ‫‪‬‬
‫(‪.)Private‬‬

‫تضاف كلمة (‪ )Friend‬للدالة وللصنف لتصبح الدالة صديقة للصنف‪.‬‬ ‫‪‬‬


‫تستدعى الدالة الصديقة بدون اضافة اسم الصنف قبلها‪.‬‬ ‫‪‬‬
‫مثال‪:‬‬ ‫‪‬‬
‫اذا كانت الدالة (‪ )Add‬هي دالة منتمية فإنها تستدعى كالتالي (‪.)Calc.Add‬‬ ‫‪‬‬

‫اذا كانت الدالة (‪ )Add‬هي دالة صديقة فإنها تستدعى كالتالي ()‪.)Add(C‬‬ ‫‪‬‬

‫‪Friends.cpp‬‬
‫الدوال واألصناف الصديقة‬
‫‪Friend Functions & Classes‬‬
‫الدوال الصديقة يحق لها معالجة األصناف الخاصة بالصنف‬ ‫‪‬‬
‫(‪.)Private‬‬

‫تضاف كلمة (‪ )Friend‬للدالة وللصنف لتصبح الدالة صديقة للصنف‪.‬‬ ‫‪‬‬


‫تستدعى الدالة الصديقة بدون اضافة اسم الصنف قبلها‪.‬‬ ‫‪‬‬
‫مثال‪:‬‬ ‫‪‬‬
‫اذا كانت الدالة (‪ )Add‬هي دالة منتمية فإنها تستدعى كالتالي (‪.)Calc.Add‬‬ ‫‪‬‬

‫اذا كانت الدالة (‪ )Add‬هي دالة صديقة فإنها تستدعى كالتالي ()‪.)Add(C‬‬ ‫‪‬‬

‫‪Friends.cpp‬‬
‫‪Function Overloading‬‬
‫تحميل الدوال‪.‬‬ ‫‪‬‬

‫استخدام نفس اسم الدالة مع تغيير نوع او عدد المعامالت‬ ‫‪‬‬


‫الخاصة بالدالة‪.‬‬
‫يمكن استخدامها في جميع الدوال ما عدا الدوال الهدامة‪.‬‬ ‫‪‬‬

‫ال يمكن تعريف أكثر من دالة لها نفس المعامالت ونفس القيمة‬ ‫‪‬‬
‫المرجعة‪.‬‬

‫‪Overloading.cpp‬‬
‫نهاية‬
‫الوحدة‬
)1( ‫برمجة‬

‫الوحدة الخامسة‬
‫الوراثة‬
Inheritance

AbdulRahman M.Baraka
2012
‫الوراثة‬
.‫هي عملية اشتقاق صنف من صنف آخر‬ 

: .)Super( )Base( ‫ صنف القاعدة‬


Student
<<private>> name:String
‫هو الصنف الذي يحتوي العمليات والبيانات المراد‬
.‫توريثها‬
<<public>> String getName().
<<public>> void changeName().
:)Sub( )Derived( ‫ صنف مشتق‬
‫هو الصنف الذي يحتوي العمليات والبيانات‬
GraduatedStudent ‫الموروثة باإلضافة الى بياناته وعملياته‬
<<private>> GradYear:int .‫الخاصة به‬
<<public>> int getYear ().
<<public>> void changeYear().
Inheritance1.cpp
‫الوراثة‬
‫اذا كان لدينا عملية في الصنف المورث والصنف المشتق‬ 
.‫ويحمالن نفس االسم‬
‫يمكن استدعاء الدالة التي بالصنف المورث من الدالة التي‬ 
:‫بالصنف المشتق على النحو التالي‬
Student
<<private>> name:String
<<public>> String getName(). Student::print() 
<<public>> void changeName().
<<public>> void print().

GraduatedStudent
<<private>> GradYear:int
<<public>> int getYear ().
<<public>> void changeYear().
Inheritance1a.cpp
<<public>> void print().
‫الوراثة ‪ :‬البناء والهدام‬
‫‪‬‬ ‫;‪GraduatedStudent x‬‬

‫عند تعريف كائن مشتق ‪:‬‬ ‫‪‬‬


‫‪Student‬‬
‫;‪<<private>> string name‬‬
‫يتم استدعاء البناء الخاص بالصنف المورث‬ ‫‪‬‬
‫أوال بشكل تلقائي ثم يتم استدعاء البناء‬
‫‪<<public>> Student().‬‬
‫‪<<public>> ~Student().‬‬
‫الخاص بالصنف المشتق ثانيا وبشكل تلقائي‪.‬‬

‫عند حذف كائن مشتق – أو االنتهاء‪: -‬‬ ‫‪‬‬

‫‪GraduatedStudent‬‬ ‫يتم استدعاء الهدام الخاص بالصنف المشتق‬ ‫‪‬‬


‫;‪<<private>> string Year‬‬ ‫أوال بشكل تلقائي ثم يتم استدعاء الهدام‬
‫‪<<public GraduatedStudent().‬‬
‫الخاص بالصنف المورث ثانيا وبشكل تلقائي‪.‬‬
‫‪<<public>> ~ GraduatedStudent().‬‬
‫‪Inheritance2.cpp‬‬
‫ البناء والهدام‬: ‫الوراثة‬
 GraduatedStudent x;

‫اذا كان لدينا اكثر من بناء في الصنف‬ 


Student
.‫المورث‬
: ‫في بناء الصنف المشتق‬ 
<<public>> Student().
<<public>> Student(int x). ‫يمكن تحديد البناء المراد تنفيذه في الصنف‬ 
<<public>> ~Student(). .‫المورث‬

GraduatedStudent

<<public GraduatedStudent().
<<public>> ~ GraduatedStudent().
Inheritance3.cpp
‫مستوى الوصول (‪)Access Modifier‬‬
‫خاص (‪:)Private‬‬ ‫‪‬‬
‫ال يسمح بالتعامل معه إال اعضاء نفس الصنف (‪.)Class‬‬ ‫‪‬‬

‫عام (‪:)Public‬‬ ‫‪‬‬


‫مسموح بالتعامل معه مع جميع االصناف االخرى‪.‬‬ ‫‪‬‬

‫صديق (‪:)Friend‬‬ ‫‪‬‬


‫ال يسمح بالتعامل معه إال اعضاء نفس الصنف (‪ .)Class‬أو اعضاء‬ ‫‪‬‬
‫الصنف الصديق معه‪.‬‬
‫محمي (‪:)Protected‬‬ ‫‪‬‬
‫ال يسمح بالتعامل معه إال اعضاء نفس الصنف (‪ .)Class‬أو اعضاء‬ ‫‪‬‬
‫الصنف المورث وراثة عامة‪.‬‬
‫‪Inheritance4.cpp‬‬
‫الوراثة ‪ :‬مستوى الوصول (انواع الوراثة)‬
‫أنواع الوراثة تحدد كيفية تعامل أنواع البيانات والدوال بين االصناف المورثة‪.‬‬ ‫‪‬‬
‫قاعدة عامة ‪ :‬البيانات والدوال الخاصة (‪ )Private‬ال تورث أبدا‪.‬‬ ‫‪‬‬

‫الوراثة الخاصة (‪:)Private‬‬ ‫‪.1‬‬


‫‪ ‬البيانات في الصنف المورث – االساس – تصبح خاصة في المشتق‪.‬‬
‫‪All type -> Private ‬‬

‫الوراثة المحمية (‪:)Protected‬‬ ‫‪.2‬‬


‫‪ ‬البيانات في الصنف المورث – االساس – تصبح محمية في المشتق‪.‬‬
‫‪All type -> Protected ‬‬

‫الوراثة العامة (‪:)Public‬‬ ‫‪.3‬‬


‫‪ ‬البيانات في الصنف المورث – االساس – تصبح عامة في المشتق‪.‬‬
‫‪Protected -> Protected ‬‬
‫‪Other type (except private)-> Public ‬‬
)‫ مستوى الوصول (انواع الوراثة‬: ‫الوراثة‬
‫أنواع الوراثة تحدد كيفية تعامل أنواع البيانات والدوال بين االصناف‬ 
.‫المورثة‬

Type of Inheritance

private protected public


Access Control
for Members

private - - -
protected private protected protected
public private protected public

Inheritance4.cpp
‫الوراثة المتعددة‬

‫‪‬‬ ‫ـ‬

‫‪Inheritance5.cpp‬‬
‫ البناء والهدام‬: ‫الوراثة المتعددة‬
Constructor

3 1 2
Class C : public A, public B.
1 3 2

Destructor
Template ‫األصناف والدوال القالبية‬
.‫هي المقدرة على تأجيل تحديد نوع البيانات المستخدمة‬ 
:‫الصيغة العامة‬ 

template <class T> int Max(T x, T y)


{
if (x>y)
return x;
else
return y;};

int main()
{

cout<<Max(10,50)<<endl;

system ("pause");
return 0;
} template.cpp
‫تعدد األوجه (‪)Polymorphism‬‬
‫هي المقدرة على تأجيل تحديد هوية الدالة المراد استعمالها من وقت‬ ‫‪‬‬
‫الترجمة (‪ )Compile Time‬الى وقت التنفيذ (‪.)Run Time‬‬

‫‪Inheritance4.cpp‬‬
‫نهاية‬
‫الوحدة‬
‫برمجة (‪)1‬‬

‫الوحدة السادسة‬
‫التعامل مع الملفات‬

‫‪AbdulRahman M.Baraka‬‬
‫‪2012‬‬
‫هيكلية البيانات‬
‫‪.‬‬ ‫‪.‬‬ ‫‪.‬‬ ‫‪.‬‬ ‫‪.‬‬ ‫‪14/2/1998‬‬ ‫محمد غزة‬
‫‪1/5/2000‬‬ ‫رفح‬ ‫علي‬ ‫ملف‬

‫‪.‬‬ ‫‪.‬‬ ‫‪.‬‬ ‫‪.‬‬ ‫‪.‬‬ ‫‪14/2/1998‬‬ ‫محمد غزة‬ ‫سجل‬

‫محمد‬ ‫حقل‬

‫‪11011101‬‬ ‫بايت‬

‫بايت‬
‫‪1‬‬
‫تنظيم الملفات‬
‫التنظيم التتابعي‪:‬‬ ‫‪‬‬
‫يتم تخزين السجالت بشكل تسلسلي‪.‬‬ ‫‪‬‬
‫أول سجل يحمل أصغر رقم وهكذا‪..‬‬ ‫‪‬‬
‫للوصول الى السجل رقم (‪ )n‬يجب المرور على العدد (‪ )n-1‬من‬ ‫‪‬‬
‫السجالت‪.‬‬

‫‪.‬‬ ‫‪.‬‬ ‫‪14/2/1998‬‬ ‫غزة‬ ‫محمد‬ ‫‪1‬‬


‫‪1/5/2000‬‬ ‫رفح‬ ‫علي‬ ‫‪2‬‬
‫‪11/12/1997‬‬ ‫خانيونس‬ ‫منى‬ ‫‪3‬‬

‫‪template.cpp‬‬
‫تنظيم الملفات‬
‫التنظيم العشوائي‪:‬‬ ‫‪‬‬
‫يتم تخزين السجالت بشكل عشوائي‪.‬‬ ‫‪‬‬
‫يتم الوصول الى السجل المراد بشكل مباشر‪.‬‬ ‫‪‬‬

‫‪.‬‬ ‫‪.‬‬ ‫‪14/2/1998‬‬ ‫غزة‬ ‫محمد‬ ‫‪32‬‬


‫‪1/5/2000‬‬ ‫رفح‬ ‫علي‬ ‫‪1‬‬
‫‪11/12/1997‬‬ ‫خانيونس‬ ‫‪ 300‬منى‬
‫‪Sequential Files‬‬
‫تنظر لغة (‪ )C++‬الى الملفات كمجموعة من البايتات المخزنة واحدا‬ ‫‪‬‬
‫تلو االخر‪.‬‬
‫كل ملف ينتهي بعالمة (‪.)EOF – End Of File‬‬ ‫‪‬‬
‫عند فتح ملف يتم فتح (‪ )stream‬معه يستقبل البايتات الخاصة بهذا‬ ‫‪‬‬
‫الملف‪.‬‬

‫تعتمد طريقة (‪ )stream‬على أجهزة االدخال واالخراج مثل الشاشة‬ ‫‪‬‬


‫أيضا‪.‬‬
‫يتم فتح (‪ )stream‬الخاص بالملفات من خالل المكتبة ‪<fstream>.‬‬ ‫‪‬‬
‫يتم التعامل مع (‪ )cout‬للملفات‪.‬‬ ‫‪‬‬
‫يتم التعامل مع (‪ )cerr‬للعرض على الشاشة بشكل خاص‪.‬‬ ‫‪‬‬
Files and Stream
.‫) أي شكل أو تركيب على الملفات‬C++( ‫ال تفرض لغة‬ 
.)‫كتابة‬/‫عند فتح ملف يجب تحديد الغرض من فتحه (قراء‬ 
.‫) للكتابة على ملف‬ofstream( ‫يستخدم التعريف‬ 
.‫) للقراءة من ملف‬ifstream( ‫يستخدم التعريف‬ 
:‫الكتابة الى ملف تسلسلي‬ 
#include <iostream>
#include <fstream>
int main()
{
int sno;
string sname;
ofstream StudentFile("student.txt", ios::out);
cout<<"Enter students numbers and names... <Ctrl+Z> to end:"<<endl;

while(cin>>sno>>sname)
{ StudentFile<<sno<<","<<sname<<endl; }

StudentFile.close();} seqFiles1.cpp
‫‪Files and Stream‬‬
‫مالحظة هامة‪:‬‬ ‫‪‬‬
‫عند فتح الملف باستخدام ‪.ios::out‬‬ ‫‪‬‬
‫فإنه يتم انشاء الملف من جديد اذا لم يكن موجودا‪.‬‬ ‫‪‬‬
‫أما اذا كان موجودا فإنه يقوم بحذفه جميع البيانات الموجودة بداخله‪.‬‬ ‫‪‬‬
‫ويقوم بإدخال البيانات الجديدة من بداية الملف‪.‬‬ ‫‪‬‬

‫عند فتح الملف باستخدام ‪.ios::app‬‬ ‫‪‬‬


‫فإنه يتم انشاء الملف من جديد اذا لم يكن موجودا‪.‬‬ ‫‪‬‬
‫أما اذا كان موجودا فإنه يبدأ بإدخال البيانات الجديدة من نهاية الملف‪.‬‬ ‫‪‬‬
‫أي تتم اضافة البيانات الجديدة في نهاية الملف وتبقى البيانات القديمة‬ ‫‪‬‬
‫كما هي وال تحذف‪.‬‬
‫(‪ )app‬هي اختصار ل (‪.)append‬‬ ‫‪‬‬
‫‪seqFiles2.cpp‬‬
Files and Stream
.‫) أي شكل أو تركيب على الملفات‬C++( ‫ال تفرض لغة‬ 
.)‫كتابة‬/‫عند فتح ملف يجب تحديد الغرض من فتحه (قراء‬ 
.‫) للقراءة من ملف‬ifstream( ‫يستخدم التعريف‬ 
:‫القراءة من ملف تسلسلي‬ 
int sno;
string sname;
int count=0 ;
ifstream StudentFile("student.txt", ios::in);

while(StudentFile>>sno>>sname)
{
cerr<<"Student no:"<<sno<<endl<<"Student name:"<<sname<<endl;
count++;
}
cerr<<"Number of Students: "<<count<<end;
StudentFile.close();
seqFiles3.cpp
‫نهاية‬
‫الوحدة‬

You might also like