المصفوفات ARRAYS الجزء الاول

مقدمة *
تنقسم البيانات الى بيانات حرفية char وبيانات رقمية int وبيانات حقيقة float وتسمى هذه الأنواع ( int , float , char ) بالأنواع الرئيسية للبيانات حيث لا يمكن تجزئتها أقل من ذلك.
وهناك انواع أخرى من البينات تسمى بالأنواع المشتقة ( Type dived data ) من هذه النواع المصفوفات arrays .

** المصفوفة **
المصفوفة array هى مجموعة من البيانات التى تتشابه فى النوع ولها اسم مشترك. تتشابه فى النوع بمعنى أن تكون البينات التى تخزنها فى المصفوفة كلها اعداد صحيحة int او اعداد ذات علامة عشرية float . فيمكن ان نضع المصفوفة من اى نوع من انواع البيانات.

*الإعلان عن المصفوفة* للإعلان عن إحدى المصفوفات هناك ثلاثة أشياء يجب ان تحددها.
(1) اسم المصفوفة : وهو اسم تختاره مثلما تختار اسم أى متغير
(2) عدد العناصر داخلها
(3) نوع البيانات المستخدم فيها
مثلاً : نفرض أنك تريد تخزين مرتبات 120 موظفاً يعملون فى شركتك وكانت مرتبات هؤلاء الموظفين تحتوى على كسور عشرية. فى هذه الحالة شيكون نوع البيانات float ويتم الاعلان عن المصفوفة كما يلى : float salary[120]

تنقسم المصفوفة إلى المصفوفة ذات بعد واحد ومصفوفات ذات البعدين.
** المصفوفة ذات البعد الواحد :-
مثلا : A[ 2 5 9 12 15 ] وتسمى مصفوفة ذات بعد واحد لأنها تتكون من صف واحد أو عمود واحد وفيها حرف A هو اسم المصفوفة والأرقام هى عناصر المصفوفة ويتم الإشارة إلى كل عنصر برقم العنصر اى بترتيبه داخل المصفوفة

** الإشارة إلى عناصر المصفوفة **
- يتم ذلك بان تذكر اسم المصفوفة ثم رقم المصفوفة الذى تريد التعامل معه بين القوسين [ ]
- اى عندما ترغب فى ذكر رقم العنصر داخل المصفوفة يجب أن تبدأ العد داخل المصفوفة من صفر وليس من 1
- مثلاً : إذا كنت تريد وضع الرقم أو القيمة 75 فى العنصر 3 من المصفوفة المسماه student نكتب التالى : student[3] = 75
- وإذا كنت تريد ان تنقل القيمة الموجودة فى العنصر 38 من المصفوفة salary إلى أحد المتغيرات نكتب التالى : a = salary[37]
- كذلك يمكن ان تمرر القيمة الموجودة فى أحد عناصر المصفوفة الى اجراءات مكتبة التشغيل مثل
printf(“ The higest mark is %d “, student[45]);

** البرنامج التالى يعرض مثالاً عن كيفية الإعلان عن إحدى المصفوفات واستخدامها :-
كود:
# include <stdio.h> # define max 10 void main(void) { float salary[max]; float average; int count; average = 0.0; for(coint=0; count<max ; count++) { printf(“ please enter salary for employee %d”, count+1); scanf(“%f”, &salary[count]); } printf(“\n\n salary average is : %f”, average/max); }
ملاحظات على البرنامج :-
- هذا البرنامج يطلب من المستخدم إدخال مرتبات 10 موظفين ثم يقوم بحساب وطباعة متوسط هذه الرواتب.
- فى بداية البرنامج نعلن عن المصفوفة float salary[max] هذه المصفوفة تستخدم لتخزين 10 اعداد ذات كسور عشرية وبالتالى فإن الإعلان السابق يساوى float salary[10]
- بعد ذلك نعلن عن المتغير average وهو تستخدم لتخزين مجموع الرواتب حتى نتمكن من استخراج متوسطها.
- لهذا نستخدم جملة التكرار for لادخال 10 موزفين لذلك نستخدم الإجراء scanf() لنطلب من المستخدم إدخال الرواتب scanf("%f ", &salary[count]
- وكلما ادخل المستخدم أحد الرواتب أضفنا قيمته الى المتغير average كما يلى
average += salary[count]

الملاجظة الهامة : هى كيف استخدمنا المتغير count كعداد لتكرار for وفى نفس الوقت استخدمناه للإشارة للعناصر المختلفة داخل المصفوفة. Scanf(“%f”, salary[couny]) ففى بداية التكرار سيكون المتغير count يساوى الصفر

** تهيئة المصفوفة عند الإعلان عنها **
- من الممكن ان تقوم بتهيئة المصفوفة عند الإعلان عنها إذا كنت تعرف مسبقا المحتويات التى ستضعها فيها int marks[5] = { 12 4 7 9 11} هنا نعلن عن مصفوفة مكونه من خمسه عناصر عددية صحيحة int

* المصفوفة الغير محددة العدد **
- إذا كنت ستهيئ مصفوفة عند الاعلان عنها يمكن ان تترك للمترجم مهمة حساب عدد العناصر فيها.
- مثلاً : int marks[ ] = { 5 9 4 10 7 }
- هنا أعلنا عن المصفوفة ولكن لم نحدد عدد العناصر فيها لأن المترجم سيقوم بِعـَـد القيم المذكورة بين القوسين { } ويحدد حجم المصفوفة تلقائيا .

** برنامج **
كود:
كود:
# include <stdio.h> /* calculate the average of a numbers , the compute deviation of each number about the average */ main( ) { int n , count ; fliat avg, d , sum=0 ; /* read in a value for n */ printf(“\n how many numbers will be average? “; scanf(“%d”, &n); printf(“\n”); /* read in the numbers and calculate ther sum */ for(count = 0 ; count < n count++ ) { printf(“i = %d x= “, count+1); scanf(“%f”, &list[count]); sum+= list[count]; } /* calcuate and write out the average */ avg = sum/n; printf(“\n the average is %5.2f\n\n “, avg); /* calculate and write out the deviations about the average */ for(count = 0 ; count < n ; count++) { d=list[count] – avg ; printf(“i = %d x%5.2f d=%5.2f \n” , count+1, list[count] , d); } }
ناتج هذا البرنامج :-
The average is 4.18 i = 1 x = 03.00 d = -1.18 i = 2 x = -2.00 d = -6.18 i = 3 x = 12.00 d = 7.82 i = 4 x = 4.40 d = 0.22 i = 5 x = 3.50 d = -0.68

** برنامج إعادة ترتيب قائمة من الأعداد **
كود
كود:
: # include<stdio.h> # define size 100 /* reorder a one-dimensinal, integer array from smallest to largest */ main( ) { int i , n , x[size]; void reorder(int n , int x[ ]); /* read in the a value for n */ printf(“\n how many number will be entered ? “ ); scanf(“%d”, &n ); printf(“\n”); /* read in the list of number */ for(i = 0 ; i<n ; i++) { printf(“i = %d x = “, i+1); scanf(“%d”, &x[ i ]); } /* reprder all array elements */ reorder(n , x ) /* display the reordered list of numbers */ print(“\n\reordered list of number :\n\n “); for(i=0;i<n; i++) printf(“i=%d x=%d\n”, i+1 , x[ i ] ); } int i, item ,temp; for(item = 0;item<n-1 ; item++ ) if(x[ i ] < x[item]) { /* interchange twwo elements */ temp = x[item]; x[item] = x[ i ]; x[ i ] = temp ; } return; }