بانر

الدرس الخامس لتعليم لغة السى بلس بلس c++

الدرس الخامس لتعليم لغة السى بلس بلس c++
سندرس طريقة جديدة من طرق حفظ البيانات , وهذه الطريقة والحق يقال من الطرق المهمة للغاية , وهذا قول ناتج عن خبرة شخصية وتجربة عملية في لغات البرمجة  .

الدرس وباختصار يتعلق بالمصفوفات , وطرق التعامل معها , والفائدة المرجوة منها في المستقبل .

وسنقوم بطرح فكرة مبسطة عن مصفوفة البعد الواحد , ومصفوفة البعدين , حيث أن هذان النوعان هما من أكثر الأنواع شيوعاً واستعمالاً .

مصفوفة البعد الواحد :

الشكل العام للمصفوفة :
كود:
int array_name[index];
[c]Or[/c]
كود:
type array_name[index];
لا يخفى عليكم أعزائي أنني قد قمت بوضع شكلان عامان للمصفوفة , أحدهما بالصورة التقليدية كما تعودنا في الصورة الأولى , وذلك بتعريف المصفوفة كعنصر صحيح , أو حقيقي , , حيث أن array_name هوا عبارة عن اسم المصفوفة , ونستطيع ترميزه بأي رمز مثل ( x,y,z,xyz,array1 ) , ثم كلمة index , وهيا عناصر المصفوفة .

والطريقة الثانية هيا طريقة عملية ومهمة جداً في تعاملنا مع كل أنواع البيانات وليس المصفوفات فحسب , وهيا تعريف البيانات حسب نوعها , ثم إدراج هذا النوع في البرنامج حسب الطلب , ولكن سنأجل دراسة هذا النوع مؤقتاً , حتى نفهم الطرق العادية ونجيدها تماماً , ثم سأقوم بشرح هذا النوع لاحقاً إن شاء الله .

والآن وكما تعودنا نقوم بوضع مثال يوضح فائدة المصفوفة , وطريقة تعامل معالج لغة الـ C مع المصفوفة .

كمثال بسيط يوضح فائدة كبيرة للمصفوفة , نقوم مثلاً ببرمجة برنامج حسابي بسيط يقوم بقراءة 10 أعداد صحيحة , وجمع هذه الأعداد وطباعة ناتج جمعها على الشاشة .

في السابق كنا نقوم بتعريف 10 متغيرات كأعداد صحيحة , ولكن الآن وبفضل المصفوفة , سنقوم باختصار هذه الـ 10 أعداد إلى تعريف مصفوفة واحدة فقط , وهذه فائدة رائعة للمصفوفات , إذ أنها توفر الوقت والجهد في بناء البرامج والمنظومات الكبيرة , وهذا ما سنطرحه في المستقبل إن شاء الله بعد إنهائنا لدروس لغة الـ C ( إن شاء الله إذا عشنا حتى ذلك الوقت ) .

والآن , طريقة البرنامج كما يلي :

[l]The Program :[/l]
كود:
#include <stdio.h>
#include <conio.h>

void main()
{
 clrscr();
 int x[10],i,sum=0;
 for (i=0;i<10;i++)
 {
  printf("\n Enter X[%d] = ",i);
  scanf("%d",&x[i]);
  sum+=x[i];
 }
 printf("\n Sum = %d ",sum);
 getch();
}
والآن نشرح البرنامج بالتفصيل :

في أول البرنامج قمنا بتعريف متغيرات , منها [10]x , وهذا يعني أن اسم المصفوفة هوا x , وأن هذه المصفوفة تحوي داخلها عشرة متغيرات , وكل هذه المتغيرات من النوع الصحيح , وذلك لأننا قمنا بتعريف المصفوفة كمتغير صحيح , ثم قمنا بتعريف عداد للمصفوفة Counter , ورمزنا لهذا العداد بالرمز i , ثم قمنا بتعريف المتغير sum , وهوا اختصار لكلمة summation , والتي تعني مجموع , وهوا الذي سنحفظ فيه مجموع عناصر المجموعة .

والآن إلى الخطوة التالية , أرجو الإهتمام والتركيز في هذه الخطوة , حتى نوضع فائدة العداد :

نقوم بوضع المتغير i في جملة for , وذلك لأننا سنعرف i كعداد للمصفوفة , ونقوم بوضع قيمة ابتدائية لـ i وهيا صفر ( 0 ) , لأنه للحصول على 10 عناصر للمصفوفة أو أي عدد في لغة الـ C , تبدأ المصفوفة من المتغير [10]x , وتنتهي عند المتغير [10]x , وعند حسابنا نجدهم 10 عناصر .

والآن نقوم بتحديد الدورة التي سنقوم بها , في أول حالة سيقوم المعالج بوضع قيمة صفر للمتغير i , ثم يقوم بمقارنتها بالعدد 10 , فيجدها أقل منه , لذا يستمر في الدورة أو الحلقة , فيقوم بطباعة جملة
كود:
printf(“\n Enter x[%d] = “,i);
وهذه الجملة هيا مجرد جملة توضيحية للمبرمج , توضح له أنه عليه أن يقوم بإدخال قيمة المتغير المراد تخزينه في الصف [x[%d , حيث أن %d تتغير بتغير i .

ثم يقوم البرنامج باستقبال قيمة المتغير ويضعه في المصفوفة حسب التريب , يستقبله في الخانة [x[i , ونتيجة لذلك فأنه من المستحيل أن يضع قيمتين في نفس الخانة , لأن i تتغير وتزيد بمقدار واحد كل دورة i++ , وهذه فائدة العداد  .
ثم يقوم المعالج بالعملية الحاسبة التالية :
كود:
sum+=x[i];
وهذه العملية هيا نفس العملية :
كود:
sum=sum+x[i];
حيث شرحنا معناها في السابق , ونحيطكم علماً مرة أخرى بأن معناها أن المجموع سيقوم في كل دورة بإضافة قيمة العدد الجديد إلى المجموع , حتى نتحصل على المجموع الكلي .

ويستمر البرنامج بهذه العملية حتى تصل قيمة i للعدد 10 , وفي هذه الحالة يقوم البرنامج بالخروج من الحلقة , ويطبع رسالة النهاية التي توضح قيمة المجموع النهائية على الشاشة .

طبعاً أرجو من الإخوة تجربة البرنامج حتى تتمكنوا من فهمه بطريقة أفضل , فالتجربة خير دليل على صحة البرنامج وأفضل طريقة لفهمه .


المصفوفات ذات البعدين :

الشكل العام :
كود:
int array_name[index1][index2]
نلاحظ زيادة قوسان جديدان , ومعناهما كالتالي :
[l]
array_name = اسم المصفوفة
index1 = عدد الصفوف
index2= عدد الأعمدة
[/l]

لأن المصفوفة الثنائية مكونة من صفوف وأعمدة , وليس صفوف فقط كالأحادية ذات البعد الواحد .

والآن نقوم بكتابة برنامج يقوم بقراءة عدد من القيم وتخزينها في مصفوفة ذات بعدين , ثم يقوم بطباعة هذه القيم على هيئة مصفوفة .

[l]The Program :[/l]
كود:
#include <stdio.h>
#include <conio.h>
#define row 2
#define col 2

void main()
{
 int i,j;
 int x[row][col];
 clrscr();
 for (i=0;i<row;i++)
  for (j=0;j<col;j++)
   {
    printf("\n x[%d][%d] = ",i,j);
    scanf("%d",&x[i][j]);
   }
  printf("\n");
  for (i=0;i<row;i++)
  {
   for (j=0;j<col;j++)
    printf("%d \t ",x[i][j]);
    printf("\n");
  }
  getch();
}
قد يبدو لكم البرنامج معقداً , ولكنه في الحقيقة بسيط وسهل , يحتاج إلى شرح بسيط وبإذن الله ستفهمونه .

البرنامج يبدأ بداية تقليدية , ويقوم بالتعرف على المتغيرات المعطاة , ونلاحظ هنا وجود اثنان for , وهذا التعقيد الوحيد , ولكن لنفهم هذا التعقيد يجب أن نعرف طريقة تعبئة المصفوفات , فالمصفوفات تقوم بتعبئة العنصر الأول في الصف الأول والعمود الأول , ثم العنص الثاني في الصف الأول والعمود الثاني , وهكذا , حتى تصل للعنصر الأخير في الصف الأول العمود الأخير , بمعنى أنها تقوم بتعبئة جميع الأعمدة في الصف الأول , ثم عند انتهائها تنزل للصف التالي وتقوم بتعبئة جميع الأعمدة , وهكذا حتى تقوم بتخزين جميع عناصر المصفوفة .