ملخصات وحدة ( 3 ) | برمجة 1

hmd-it
0

>>> ملخصات مقرر في المادة <<<
أقدم لكم ملخصات المقررة معنا في مقرر برمجة 1 

الوحدة الثالثة
المصفوفات و الأصناف
مصفوفات من الكائنات Arrays of أبجكتس
تستخدم مصفوفة من الكائنات لتمثيل قائمة من الأشياء المتجانسة من النوع نفسه كتمثيل قائمة من الطلبة أو الكتب.
لتمثيل ثلاثة طلاب للصنف student نكتب student[3]; و تكون هذه الجملة خاطئة في حالة وجود بناء له عوامل و تكون صحيحة في حالة عدم وجود بناء أو بوجود بناء بدون عوامل و في حقيقة الأمر هي نفس الجملة student[3]={student(),student(),student()} و تنفذ باستدعاء البناء بدون عوامل مثل student();  
أما في حالة وجود البناء نكتب التعريف داخل الصنف  student كالتالي:
student::student(long studentno, char* studentname, int courseno)
{ stno=studentno;
strcpy(stname, studentname);
csno=courseno;}
و طبعاً المتغيرات stno, stname, csno معرفة مسبقاً بالصنف student على أنها متغيرات خاصة و بالتالي يجب تغيير أسماؤها داخل تعريف الدالة و استخدمت الدالة strcpy أنظر للكتاب صفحة 75 لتشاهد تعريف الصنف student بالكامل.

--------------


تابع مصفوفات من الكائنات Arrays of أبجكتس


و الآن بعد أن تم تعريف البناء داخل الصنف student سنعطي البناء قيماً ابتدائية كالتالي:

Student st[2]={student(22,”Ali”,3),student(25,”Suha”,5),student(27,”Noor”,8)};
إذا أردت أن تعطي كل طالب رقم و اسم و رقم مقرر بشكل فردي أي عنصر عنصراً فان ذلك يتم عبر الدوال المنتمية مثل initialize() المعرفة داخل الصنف student أنظر الكتاب صفحة 75 لتشاهد طريقة عمل هذه الدالة.
إذا أردنا مثلاً قراءة قيم جميع عناصر المصفوفة n حيث n هي عدد الطلبة نستدعي الدالة initialize() الموجودة داخل تعريف الصنف:
int n;
cout<<“Enter number of students”;
cin>>n;
for(int i=0; i<n; i++)
st[i].initialize();
-------------------
المصفوفات باعتبارها متغيرات منتمية
يمكن أن تحتوي الكائنات نفسها مصفوفة باعتبارها متغيراً منتمياً.
فمثلاً إذا أردنا احتساب معدل درجات احد الطلاب من الصنف student  فإننا يجب أن نستخدم جملة الدوران for عند إدخال الدرجات  grades[i]كما يلي:
void student::initialize(){
cout<<“enter student number\n”;
cin>>stno;
cout <<“enter student name\n”;
cin>>stname;
cout <<“enter student no, of courses taken by student\n”;
cin>>csno;
for(int i=0; i<csno; i++){
cout <<“enter student  grade\n”;
cin>>grades[i] ; } }
أنظر للكتاب صفحة 80 و صفحة 81.
-------------
--------------
مثال ترتيب مجموعة من الأرقام تصاعدياً
#include<iostream>
using namespace std;
void selectionSort( int *array,  int length){ 
int  i, j ,min, minat
for(i=0;i<(length-1);i++)  { 
minat=i
min=array[i];    
for(j=i+1;j<(length);j++)     {   
if(min>array[j])     { 
minat=j;   
min=array[j];    }    }   
int temp=array[i] ;   
 array[i]=array[minat];      
  array[minat]=temp;  }}
 void printElements(int *array,int length)
int i=0; 
for(i=0;i<6;i++)   
cout<<array[i]<<"\n"<<endl;}
main(){ 
int a[]={23,78,45,8,32,56};  
selectionSort(a,6);               
printElements(a,0);               }

-----------------------
الكود الخاص بالفرز الانتقائي
void sort(student* st, int n) {
for (int i=0;i<n-1;i++){
// find smallest element in the unsorted part
long min =st[i].get_stno();
int position=i;
for (int j=i+1 ;j<=n; j++)
if (st[j].get_stno< min)
{ min=st[j].get_stno();
  position= j;
                 }
// swap the smallest element st[postion] with st[i]
student a=st[position];
st[position]= st[i];
st[i]=a;
}}

Binary Search البحث الثنائي


البحث يستخدم لمعرفة مكان عنصر Key موجود مع كمية بيانات كبيرة مخزنة في مصفوفة و بالتالي كان هناك ضرورة لتسهيل عملية البحث عن هذا العنصر و سنتعرف على تكنيك معين يحدد لنا ما إذا كان العنصر الذي نبحث عنه ينتمي إلى هذه المصفوفة أم لا!. هذا التكنيك يطلق عليه "البحث" وله عدة أنواع، من أشهرها وأكثرها فاعلية البحث الثنائي.
تقوم فكرة البحث الثنائي على تقسيم المصفوفة إلى نصفين واستبعاد النصف الذي لا ينتمي إليه المفتاحkey  الذي نبحث عنه عن طريق الخطوات التالية:
.1 أن نرتب مصفوفتنا بشكل تصاعدي أو تنازلي ثم نحدد العنصر الذي يقع في منتصف هذه المصفوفة، ثم نقارن هذا العنصر مع المفتاح إذا كان يساويه نكون قد وجدنا العنصر الذي نبحث عنه.
.2إذا كانت قيمة المفتاح أقل من قيمة العنصر الأوسط في المصفوفة، إذن نحتاج أن نبحث فقط في نصف المصفوفة الأول ونستبعد البحث في نصفها الثاني.
.3وفيما عدا ذلك: إذا كانت قيمة المفتاح أكبر من قيمة العنصر الأوسط في المصفوفة، إذن نحتاج أن نبحث فقط في نصف المصفوفة الثاني ونستبعد البحث في نصفها الأول.
بعد ذلك: نطبق نفس الخطوات من1 إلى 3 في النصف الجديد الذي نبحث فيه، فنقوم بتقسيمه إلى قسمين، ونقارن المفتاح مع العنصر الأوسط الجديد، بنفس الترتيب الذي ذكر في الخطوات السابقة من 1 إلى 3.


مثال (جزأين) عن البحث الثنائي
#include<iostream>
using namespace std;
void selectionSort(int *array, int length){
int  i, j ,min, minat;
for(i=0; i<(length-1); i++) {
minat=i;
min=array[i];     
for(j=i+1;j<(length);j++)  {  
if(min>array[j])  {
minat=j;  
min=array[j];  }  }  
int temp=array[i] ;  
 array[i]=array[minat];    
  array[minat]=temp; } }
int binarySearch(int arr[], int value, int left, int right) {
 while (left <= right) {
 int middle = (left + right) / 2;


لاتنسى الاعجاب بصفحتنا وانضم الينا
نأتي الآن لتحميل الملف :
<<< تحميل الملف اضغط هنــا >>>
||| لا تنسى الانضمام الى المدونة بالضغط هنا |||
اذا لديك أي سؤال، فلا تتردد في الاتصال بنا
.For any kind of question, please feel free to contact us.


HAMAD BASHIR
تحميل باقى الدرس ملف بوربونت
شرح د.سهى الأعرج
Tags:

إرسال تعليق

0تعليقات

اطرح اي سؤال خاص بالموضوع في التعليقات

إرسال تعليق (0)