recent
أخبار ساخنة

المصفوفات أحادية الأبعاد في لغة السي C الدرس|16|

الصفحة الرئيسية
المصفوفة الأحادية لغة السي

المصفوفات احادية الأبعاد في لغة C

المصفوفة Array, المصفوفات احادية الأبعاد one dimensional array تحدثنا عن المُتغيرات في الدروس السابقة و قُلنا أن المُتغير يحمل قيمة عدد أو حرف أو غيرها, لكن ماذا عن عدة قيم؟ هل يُمكن تعريف عدة قيم متسلسلة في متغير واحد؟.

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

الشيئ الذي سوف يصعُب علينا تخزين القيم و إستخدامها, ماذا لو كان العدد للمواد هو 20 مادة, هل سوف نقوم بتعريف 20 متغير مختلف؟.

بالطبع لا لهذا وٌجدت المصفوفات Arrays و التي تسهِّل علينا بشكل كبير مثل هذه الحالات.

لقد تعلَّمنا أن المتغير يحجز مكان معين في الذاكرة سعته تعتمد على نوع البيانات التي تم تعريفه فيه,. و بما أنه موقع واحد فقط فمن الممكن أنه يحتوي على مجرد قيمة واحدة من نفس نوع المتغير.

بالنسبة للمصفوفة فهي تقوم بحجز اكثر من موقع في الذاكرة بحسب ما يحدده المبرمج فلو كانت مصفوفة سعتها 3 على سبيل المثال.

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

 

الصيغة العامة لتعريف مصفوفة
int myArray[size];

حيث أن :

الـ int هو تحديد نوع المصفوفة و هنا كان نوعها عدد صحيح integer فهي نفس الطريقة التي نعرّّف بها المتغيرات.

الـ myArray هو إسم المصفوفة, تماماً كما نتعامل مع المتغيرات و بنفس الشروط.

الـ [size] هو سعة المصفوفة نكتُبه عدد صحيح موجب و هذا هو الإختلاف بينها و بين المُتغير العادي و هذا العدد هو سوف يمثِّل سعة المصفوفة و حجمها, و بالنهاية يجب وضع فاصلة منقوطة ;.

 

تحديد قيم اولية للمصفوفة Array في لغة سي

يمكن ايضاً تحديد قيم اولية للمصفوفة بوضع إشارة مساواة قبل الفاصلة المنقوطة ثم نقوم بفتح قوس معكوف {.

ثم نقوم بتحديد قيم اولية بحيث تكون مفصولة بفاصلة و في النهاية نقوم بإغلاق القوس المعكوف و نضع الفاصلة المنقوطة semicolon.

int myArray[size] = {4, 3, 7, ....etc};

في هذا المثال ستكون القيمة الأولى للمصفوفة هي 4 و الثانية 3 و الثالثة 7 و هكذا....الخ, و في حال تحديد قيم اولية للمصفوفة. لا داعي لتحديد حجمها فالمحول أو المفسر البرمجي هو سوف يقوم بتحديده تبعاً للقيم الأولية.

مثال

#include <stdio.h>
#include <stdlib.h>
int main(int argc, char** argv)
{
int x[] = {1, 2, 3, 4, 5};
return 0;
}

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


إسترجاع القيم من المصفوفة في لغة سي C

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

علماً بأن العد يبدأ من الصفر 0 و ليس الواحد أي أنهُ بكتابة العدد 0 فإننا نقوم بتعديل القيمة الأولى للمصفوفة ثم نقوم بإغلاق القوس المربع.

int myArray[3];
myArray[0]

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

على سبيل المثال 16 أي القيمة الأولى هي 16 و القيمة الثانية نحن لا نعلم ما هي لأنه لم نقم بتحديدها. فقد تحتوي على أي قيمة عشوائية بحسب ما تجده في المكان التي تم حجزه في الذاكرة.

int myArray[3];
myArray[0] = 23;

إذا أردنا تعديل القيمة بعد ذلك فنقوم بنفس الطريقة

int myArray[3];
myArray[0] = 23;
myArray[0] = 27;

هنا تم تعديل القيمة الأولى من 23 الى 27.


كيفية إسترجاع قيمة من مصفوفة في لغة السي

نقوم اولاً بكتابة إسم المصفوفة و فتح قوس مربع بعد ذلك نقوم بكتابة موقع القيمة التي نُريد قرائتها. من المصفوفة بحيث يبدأ العد من الصفر 0،. فلو وضعنا صفر فنقوم بقراءة القيمة الأولى من المصفوفة ثم نقوم بإغلاق القوس المربع.

int myArray[3];
myArray[0]=16;
myArray[0];

بالطبع للآن لم نستفيد من القيمة التي قُمنا بقرائتها، نضعها في متغير لكي نستفيد منها

int myArray[3]; 
myArray[0]=16;
int x =myArray[0];

الآن تم نسخ القيمة 16 إلى المُتغير x فيمكننا إستخدام القيم الموجودة في المصفوفة بأي طريقة نُريد (طباعتها على الشاشة أو قراءة القيم و تخزينها فيها).


كيفية التعامل مع المصفوفات أُحادية الأبعاد

لنقم بتخيل الشكل الآتي لمصفوفة 

int myArray[7]  = {2, 27, -26, -24, 0, 15, 12};

جدول لمصفوفة احادية الأبعاد

المطلوب:

  1. إقرأ القيمة التالية int x =myArray[0] فما هي القيمة المخزنة في x؟.
  2. ما هي القيمة المخزنة في int x =myArray[4]؟.
  3. ما هي القيمة المخزنة في int x =myArray[8]؟.
  4. ما هي القيمة في ما يلي :
myArray[2]=60;
int x = myArray[2];

 

حل السؤال السابق

1- هنا سوف تكون القيمة المخزنة هي 2.

2- القيمة المخزنة هي 0.

3- في هذه الحالة سوف نقَع في مشكلة ذات نتيجتين متوقعتين و كلتاهما سيئتين, إما أن يتم إرجاع قيمة عشوائية من الذاكرة.

بحسب المكان الذي قُمنا بمحاولة القراءة منه x=-342354236. أو سيتوقف البرنامج عن العمل عند تشغيله سيظهر رسالة للمستخدم Error يبين له أنه قُمنا بمحاولة الدخول إلى الذاكرة بشكل خاطئ.

و ذلك لأننا حاولنا القراءة من مكان لم نقم بحجزه, إذاً أن المصفوفة حجمها 7 و قُمنا بمحاولة الوصول للقيمة التاسعه فيها و هي ليست معرَّفة و لن يتم حجزها.

4- هنا سوف تكون القيمة هي 60 لأننا قُمنا بتعديل القيمة بعد تعريف المصفوفة و هي x=60 .

 

هذا كل شيئ بالنسبة إلى المصفوفات أحادية الأبعاد, في الدرس القادم سوف نتعرَّف على المصفوفات متعددة الأبعاد.

google-playkhamsatmostaqltradent