الخميس، 1 أكتوبر 2020

برمجة الحاسوب - المصفوفات arrays

 برمجة الحاسوب - المصفوفات





فكر في موقف نحتاج فيه إلى تخزين خمسة أعداد صحيحة. إذا استخدمنا مفاهيم البرمجة البسيطة ونوع البيانات ، فسنحتاج إلى خمسة متغيرات من نوع البيانات int وسيكون البرنامج على النحو التالي -

#include <stdio.h>

int main() {
   int number1;
   int number2;
   int number3;
   int number4;
   int number5;
   
   number1 = 10;      
   number2 = 20;   
   number3 = 30;   
   number4 = 40; 
   number5 = 50;     

   printf( "number1: %d\n", number1);
   printf( "number2: %d\n", number2);
   printf( "number3: %d\n", number3);
   printf( "number4: %d\n", number4);
   printf( "number5: %d\n", number5);
}

كان الأمر بسيطًا ، لأنه كان علينا تخزين خمسة أعداد صحيحة فقط. لنفترض الآن أن علينا تخزين 5000 رقم صحيح. هل سنستخدم 5000 متغير؟

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

بدلاً من التصريح عن المتغيرات الفردية ، مثل number1 ، number2 ، ... ، number99 ، يمكنك فقط تعريف رقم متغير مصفوفة واحد من نوع عدد صحيح واستخدام number1 [0] ، number1 [1] ، و ... ، number1 [99] تمثل المتغيرات الفردية. هنا ، 0 ، 1 ، 2 ، ..... 99 هي فهرس مرتبط بمتغير var ويتم استخدامها لتمثيل العناصر الفردية المتاحة في المصفوفة.

تتكون جميع المصفوفات من مواقع ذاكرة متجاورة. يتوافق العنوان الأدنى مع العنصر الأول والعنوان الأعلى للعنصر الأخير.

المصفوفات في لغة C.

إنشاء المصفوفات

لإنشاء متغير مصفوفة في لغة C ، يحدد المبرمج نوع العناصر وعدد العناصر التي سيتم تخزينها في تلك المصفوفة. فيما يلي بناء جملة بسيط لإنشاء مصفوفة في برمجة لغة سي -

type arrayName [ arraySize ];

هذا يسمى مصفوفة أحادية البعد . و arraySize يجب أن يكون ثابت أكبر عدد صحيح من الصفر و نوع يمكن أن يكون أي نوع C بيانات صالحة. على سبيل المثال ، الآن للإعلان عن مصفوفة مكونة من 10 عناصر تسمى رقم النوع int ، استخدم هذه العبارة -

int number[10];

هنا ، الرقم عبارة عن مصفوفة متغيرة ، وهي كافية لاستيعاب ما يصل إلى 10 أرقام صحيحة.

تهيئة المصفوفات

يمكنك تهيئة مصفوفة في C إما واحدًا تلو الآخر أو باستخدام جملة واحدة على النحو التالي -

int number[5] = {10, 20, 30, 40, 50};

لا يمكن أن يكون عدد القيم بين الأقواس الكبيرة {} أكبر من عدد العناصر التي نعلن عنها للمصفوفة بين قوسين مربعين [].

إذا حذفت حجم المصفوفة ، فسيتم إنشاء مصفوفة كبيرة بما يكفي لاستيعاب التهيئة. لذلك ، إذا كتبت -

int number[] = {10, 20, 30, 40, 50};

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

number[4] = 50;

تعيّن العبارة أعلاه رقم العنصر الخامس في المصفوفة بقيمة 50. تحتوي جميع المصفوفات على 0 كمؤشر لعنصرها الأول الذي يُسمى أيضًا المؤشر الأساسي وسيكون المؤشر الأخير للمصفوفة هو الحجم الإجمالي للمصفوفة ناقصًا 1. توضح الصورة التالية التمثيل التصويري للمصفوفة التي ناقشناها أعلاه -

عرض صفيف

الوصول إلى عناصر المصفوفة

يتم الوصول إلى عنصر عن طريق فهرسة اسم المصفوفة. يتم ذلك بوضع فهرس العنصر بين أقواس مربعة بعد اسم المصفوفة. على سبيل المثال -

int var = number[9];

سوف تأخذ العبارة أعلاه العنصر العاشر من المصفوفة وتعيين القيمة لمتغير var . يستخدم المثال التالي جميع المفاهيم الثلاثة المذكورة أعلاه. إنشاء المصفوفات وتخصيصها والوصول إليها -

#include <stdio.h>
 
int main () {
   int number[10]; /* number is an array of 10 integers */
   int i = 0;
 
   /* Initialize elements of array n to 0 */         
   while( i < 10 ) {
	
      /* Set element at location i to i + 100 */
      number[ i ] = i + 100;
      i = i + 1;
   }
   
   /* Output each array element's value */
   i = 0;
   while( i < 10 ) {
	
      printf("number[%d] = %d\n", i, number[i] );
      i = i + 1;
   }
   
   return 0;
}

عندما يتم تجميع التعليمات البرمجية أعلاه وتنفيذها ، فإنها تنتج النتيجة التالية -

number[0] = 100
number[1] = 101
number[2] = 102
number[3] = 103
number[4] = 104
number[5] = 105
number[6] = 106
number[7] = 107
number[8] = 108
number[9] = 109

المصفوفات في جافا

فيما يلي البرنامج المكافئ المكتوب بلغة جافا. تدعم Java المصفوفات ، ولكن هناك اختلاف بسيط في طريقة إنشائها في Java باستخدام المشغل الجديد .

يمكنك محاولة تنفيذ البرنامج التالي لرؤية الإخراج ، والذي يجب أن يكون مطابقًا للنتيجة الناتجة عن مثال C أعلاه.

public class DemoJava {
   public static void main(String []args) {
      int[] number = new int[10];
      int i = 0;
      
      while( i < 10 ) {
		
         number[ i ] = i + 100;
         i = i + 1;
      }

      i = 0;
      while( i < 10 ) {
         System.out.format( "number[%d] = %d\n", i, number[i] );
         i = i + 1;
      }
   }
}

عند تنفيذ البرنامج أعلاه ، فإنه ينتج النتيجة التالية -

number[0] = 100
number[1] = 101
number[2] = 102
number[3] = 103
number[4] = 104
number[5] = 105
number[6] = 106
number[7] = 107
number[8] = 108
number[9] = 109

المصفوفات (القوائم) في بايثون

لا تمتلك Python مفهوم Array ، بدلاً من ذلك ، توفر Python بنية بيانات أخرى تسمى list ، والتي توفر وظائف مماثلة للمصفوفات في أي لغة أخرى.

فيما يلي البرنامج المكافئ المكتوب بلغة بايثون -

# Following defines an empty list.
number = []
i = 0

while i < 10:
   # Appending elements in the list
   number.append(i + 100)
   i = i + 1

i = 0
while i < 10:
   # Accessing elements from the list
   print "number[", i,  "] = ", number[ i ]
   i = i + 1

عند تنفيذ البرنامج أعلاه ، فإنه ينتج النتيجة التالية -

number[ 0 ] =  100
number[ 1 ] =  101
number[ 2 ] =  102
number[ 3 ] =  103
number[ 4 ] =  104
number[ 5 ] =  105
number[ 6 ] =  106
number[ 7 ] =  107
number[ 8 ] =  108
number[ 9 ] =  109

التسميات: