مصفوفة (حوسبة)
[[ملف:Arraystatic.svg|تصغير|مصفوفة ثنائية البعد]]
'''المصفوفة''' هي تركيبة من [[بيانات|البيانات]] يتم إنشائها بشكل برمجي في [[حاسوب|الحاسوب]]، يمكنها تخزين العديد من العناصر من نفس النوع، وكل عنصر يحمل قيمة، يتم حجز مساحة من الذاكرة لتحمل قيمة ومكان كل عنصر بشكل متسلسل، المصفوفة لها سعة ثابتة
<ref>''[http://courses.washington.edu/css342/zander/css332/array.html - Bothell Computing & Software Systems]''- University of Washington، اطلع عليه بتاريخ 15-08-2014 {{Webarchive|url=https://web.archive.org/web/20170801033711/http://courses.washington.edu/css342/zander/css332/array.html |date=01 أغسطس 2017}}</ref>
و لا تتغير خلال [[وقت التنفيذ]]، لهذا يجب تحديد سعة المصفوفة خلال وقت البرمجة.
المصفوفة يمكن أن تحتوي بيانات ببعد واحد أو أكثر . يمكن تصور المصفوفة الثنائية البعد على أنها مصفوفات داخل أخرى: فالبعد الأول يمكن اعتباره المصفوفة الرئيسة، أما البعد الثاني فهو مصفوفة داخل البعد الأول .
كل عنصر من المصفوفة له حجم خاص به وحسب نوع المصفوفة، السعة الكلية للمصفوفة عبارة عن حجم العنصر مضروب في عدد العناصر.

== الأداء والقيود ==
يتم تمثيل العناصر في الذاكرة في شكل مناطق متجاورة
<ref>''[https://people.eecs.berkeley.edu/~demmel/cs267-1995/lecture07/lecture07.html - الحوسبة المتوازية ]''EECS COLLEGE OF ENGINEERING UC Berkeley، اطلع عليه بتاريخ 15-08-2014 {{Webarchive|url=https://web.archive.org/web/20150923211512/http://www.cs.berkeley.edu/~demmel/cs267-1995/lecture07/lecture07.html |date=23 سبتمبر 2015}}</ref>
، هذا ما يجعل عمليات الإدراج والحذف مستحيلة، إلا إذا قمت بإنشاء مصفوفة جديدة. فمن الضروري نسخ جميع العناصر من الجدول الأصلي إلى الجدول الجديد، ومن ثم تحرير مساحة الذاكرة المخصصة للمجموعة القديمة، أو يمكن استخدام [[مصفوفة ديناميكية|المصفوفة الديناميكية]].
في بعض لغات البرمجة اسم المصفوفة هو [[مؤشر (برمجة)|مؤشر]] لأول عنصر في الفهرس
.<ref>''[http://barmijha.isna3ha.com/all/Levolue/C/00_coursc/00_introduction/chapc9/cour910.htm - اللغة البرمجية C] {{webarchive|url=https://web.archive.org/web/20140819083942/http://barmijha.isna3ha.com/all/Levolue/C/00_coursc/00_introduction/chapc9/cour910.htm |date=19 أغسطس 2014 }}''- http://boredzo.org/pointers/#arrays،اطلع عليه بتاريخ 15-08-2014 {{Webarchive|url=https://web.archive.org/web/20140819083942/http://barmijha.isna3ha.com/all/Levolue/C/00_coursc/00_introduction/chapc9/cour910.htm |date=19 أغسطس 2014 }}</ref> توجد حالات قد تشكل مشكلة في النظام أو [[ثغرة أمنية (حوسبة)|ثغرة أمنية]] أو خطأ في سير البرنامج
<ref>''[https://personal.utdallas.edu/~edsha/papers/shao/ITCC-05.pdf Efficient Array & Pointer Bound Checking Against Buffer Overflow Attacks]'' - University of Texas at Dallas ، اطلع عليه بتاريخ 15-08-2014 {{Webarchive|url=https://web.archive.org/web/20070416220304/http://www.utdallas.edu/~edsha/papers/shao/ITCC-05.pdf |date=16 أبريل 2007}}</ref>
و هي الإشارة إلى عنصر خارج المجموعة.
على سبيل المثال: إذا تم تصميم مصفوفة تحتوي على 50 عددا صحيحا وقمت بكتابة قيمة إلى المؤشر أكبر من 50، فهذه القيمة ستكتب خارج ذاكرة المخصصة للمصفوفة، ولكن في بعض الأحيان [[نظام تشغيل|نظام التشغيل]] يمنع هذا.
سعة المصفوفة المحدودة له ميزة ثبات زمن الوصول إلى قيمة العنصر، بغض النظر عن مكان العنصر المطلوب. ويرجع ذلك إلى أن العناصر هي مجموعة متجاورة في الذاكرة.
== مؤشر الفهرسة ==
كل عنصر من المصفوفة يمثل متغير مستقل بذاته، فيمكن أن يخزن قيمة أو يسترجعها بواسطة استخدام المؤشر العددي (قيمة غير سالبة) المقابلة لموقع ذلك العنصر. قيمة المؤشر الأول في المصفوفة قد يكون صفرا أو واحد، وهذا حسب لغة البرمجة .
* '''الفهرسة من 0 :''' في هذا الوضع العنصر الأول من المصفوفة يتم الإشارة إليه برقم صفر. وفقا لذلك، فإن أي عنصر من المصفوفة يمكن الوصول إلى قيمته بإنقاص 1 من رقم ترتيبه. لغة البرمجة C هي مثال نموذجي يستخدم هذا الأسلوب من الفهرسة.<ref name="وثائق شركة انتل">''[https://software.intel.com/sites/products/documentation/hpc/mkl/mklman/GUID-34C8DB79-0139-46E0-8B53-99F3BEE7B2D4.htm One-Based and Zero-Based Indexing]''، اطلع عليه بتاريخ 15-08-2014 {{Webarchive|url=https://web.archive.org/web/20140819103125/https://software.intel.com/sites/products/documentation/hpc/mkl/mklman/GUID-34C8DB79-0139-46E0-8B53-99F3BEE7B2D4.htm |date=19 أغسطس 2014}}</ref>
* '''الفهرسة من 1 :''' الفهرسة على هذا النحو، العنصر الأول من المصفوفة يتم الإشارة إليه برقم 1، وأي عنصر من المجموعة يمكن الإشارة إليه برقم ترتيبه.<ref name="وثائق ميكروسوفت فيجوال بيسك">''[https://www.vbtutor.net/vb6/lesson16.html Introduction to Arrays]''، اطلع عليه بتاريخ 15-08-2014 {{Webarchive|url=https://web.archive.org/web/20170415232341/http://vbtutor.net/vb6/lesson16.html |date=15 أبريل 2017}}</ref>
* '''الفهرسة المستندة إلى قيمة «ن»: '''هذا الوضع من الفهرسة يتنوع فيها المؤشر وقد يكون حرفا أو رمزا وهي تستند إلى قيمة. كما يمكنها قبول قيمة سالبة.

== الاستخدامات ==
تستخدم المصفوفات لتمثيل الهياكل المعقدة للبيانات مثل :
* [[الكومة (بنية معطيات)|الكومة]]
* [[جدول تجزئة|جدول هاش]]
* [[رتل (بنية معطيات)|رتل]]
* [[مكدس (بنية بيانات)|مكدس]]
* [[سلسلة (علم الحاسوب)|سلسلة]]
* [[شجرة بحث ثنائية]]
أو في [[خوارزمية|الخوارزميات]] على سبيل المثال - [[خوارزمية البحث الثنائي|خوارزمية بحث ثنائي]] .

== أمثلة ==
الأمثلة التالية ب<nowiki/>[[سي (لغة برمجة)|لغة البرمجة C]].
=== مصفوفة أحادية البعد ===

<syntaxhighlight lang="c">
int mydata[10]; // إنشاء مصفوفة بسعة 10 عناصر
mydata[0] = 22;  // إسناد قيمة '22' لأول عنصر في المصفوفة
mydata[1] = 1;
mydata[2] = 11;
mydata[3] = 2;
mydata[9] = 33; // إسناد قيمة '33' لأخر عنصر في المصفوفة
</syntaxhighlight>

=== مصفوفة ثنائية البعد ===
<syntaxhighlight lang="c">
 int mydata[10] [10] //  عشرة مصفوفات بسعة عشرة عناصر
 mydata[0] [5] = 64; //إسناد قيمة للعنصر الخامس في المصفوفة الأولى
</syntaxhighlight>

=== إسناد قيمة العناصر في وقت الإنشاء ===
<syntaxhighlight lang="c">
int mydata[5] = {6, 3335, 42, 85, 50};
</syntaxhighlight>

== مراجع ==

{{مراجع}}
{{روابط شقيقة}}
{{بنى بيانات}}
{{شريط بوابات|برمجة الحاسوب|رياضيات|علم الحاسوب}}

{{ضبط استنادي}}

[[تصنيف:أنواع البيانات]]
[[تصنيف:بنى البيانات]]
المصفوفة هي تركيبة من البيانات يتم إنشائها بشكل برمجي في الحاسوب، يمكنها تخزين العديد من العناصر من نفس النوع، وكل عنصر يحمل قيمة، يتم حجز مساحة من الذاكرة لتحمل قيمة ومكان كل عنصر بشكل متسلسل، المصفوفة لها سعة ثابتة
- Bothell Computing & Software Systems- University of Washington، اطلع عليه بتاريخ 15-08-2014 
و لا تتغير خلال وقت التنفيذ، لهذا يجب تحديد سعة المصفوفة خلال وقت البرمجة.
المصفوفة يمكن أن تحتوي بيانات ببعد واحد أو أكثر . يمكن تصور المصفوفة الثنائية البعد على أنها مصفوفات داخل أخرى: فالبعد الأول يمكن اعتباره المصفوفة الرئيسة، أما البعد الثاني فهو مصفوفة داخل البعد الأول .
كل عنصر من المصفوفة له حجم خاص به وحسب نوع المصفوفة، السعة الكلية للمصفوفة عبارة عن حجم العنصر مضروب في عدد العناصر.

 الأداء والقيود 
يتم تمثيل العناصر في الذاكرة في شكل مناطق متجاورة
- الحوسبة المتوازية EECS COLLEGE OF ENGINEERING UC Berkeley، اطلع عليه بتاريخ 15-08-2014 
، هذا ما يجعل عمليات الإدراج والحذف مستحيلة، إلا إذا قمت بإنشاء مصفوفة جديدة. فمن الضروري نسخ جميع العناصر من الجدول الأصلي إلى الجدول الجديد، ومن ثم تحرير مساحة الذاكرة المخصصة للمجموعة القديمة، أو يمكن استخدام المصفوفة الديناميكية.
في بعض لغات البرمجة اسم المصفوفة هو مؤشر لأول عنصر في الفهرس
.- اللغة البرمجية C - http://boredzo.org/pointers/#arrays،اطلع عليه بتاريخ 15-08-2014  توجد حالات قد تشكل مشكلة في النظام أو ثغرة أمنية أو خطأ في سير البرنامج
Efficient Array & Pointer Bound Checking Against Buffer Overflow Attacks - University of Texas at Dallas ، اطلع عليه بتاريخ 15-08-2014 
و هي الإشارة إلى عنصر خارج المجموعة.
على سبيل المثال: إذا تم تصميم مصفوفة تحتوي على 50 عددا صحيحا وقمت بكتابة قيمة إلى المؤشر أكبر من 50، فهذه القيمة ستكتب خارج ذاكرة المخصصة للمصفوفة، ولكن في بعض الأحيان نظام التشغيل يمنع هذا.
سعة المصفوفة المحدودة له ميزة ثبات زمن الوصول إلى قيمة العنصر، بغض النظر عن مكان العنصر المطلوب. ويرجع ذلك إلى أن العناصر هي مجموعة متجاورة في الذاكرة.
 مؤشر الفهرسة 
كل عنصر من المصفوفة يمثل متغير مستقل بذاته، فيمكن أن يخزن قيمة أو يسترجعها بواسطة استخدام المؤشر العددي (قيمة غير سالبة) المقابلة لموقع ذلك العنصر. قيمة المؤشر الأول في المصفوفة قد يكون صفرا أو واحد، وهذا حسب لغة البرمجة .
 الفهرسة من 0 : في هذا الوضع العنصر الأول من المصفوفة يتم الإشارة إليه برقم صفر. وفقا لذلك، فإن أي عنصر من المصفوفة يمكن الوصول إلى قيمته بإنقاص 1 من رقم ترتيبه. لغة البرمجة C هي مثال نموذجي يستخدم هذا الأسلوب من الفهرسة.One-Based and Zero-Based Indexing، اطلع عليه بتاريخ 15-08-2014 
 الفهرسة من 1 : الفهرسة على هذا النحو، العنصر الأول من المصفوفة يتم الإشارة إليه برقم 1، وأي عنصر من المجموعة يمكن الإشارة إليه برقم ترتيبه.Introduction to Arrays، اطلع عليه بتاريخ 15-08-2014 
 الفهرسة المستندة إلى قيمة «ن»: هذا الوضع من الفهرسة يتنوع فيها المؤشر وقد يكون حرفا أو رمزا وهي تستند إلى قيمة. كما يمكنها قبول قيمة سالبة.

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

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

int mydata[10]; // إنشاء مصفوفة بسعة 10 عناصر
mydata[0] = 22;  // إسناد قيمة '22' لأول عنصر في المصفوفة
mydata[1] = 1;
mydata[2] = 11;
mydata[3] = 2;
mydata[9] = 33; // إسناد قيمة '33' لأخر عنصر في المصفوفة

 مصفوفة ثنائية البعد 
 int mydata[10] [10] //  عشرة مصفوفات بسعة عشرة عناصر
 mydata[0] [5] = 64; //إسناد قيمة للعنصر الخامس في المصفوفة الأولى

 إسناد قيمة العناصر في وقت الإنشاء 
int mydata[5] = {6, 3335, 42, 85, 50};

 مراجع 

تصنيف:أنواع البيانات
تصنيف:بنى البيانات