تسمح لنا المصفوفات بالإشارة إلى سلسلة من المتغيرات بنفس الاسم واستخدام رقم (فهرس) لاستدعاء العناصر الفردية في تلك السلسلة. تحتوي المصفوفات على حد أعلى وأسفل وعناصر الصفيف متجاورة داخل تلك الحدود.
عناصر الصفيف هي قيم من نفس النوع (سلسلة ، عدد صحيح ، سجل ، كائن مخصص).
في دلفي ، هناك نوعان من المصفوفات: مصفوفة ثابتة الحجم تظل دائمًا بنفس الحجم - صفيف ثابت - وصفيف ديناميكي يمكن أن يتغير حجمه في وقت التشغيل.
صفائف ثابتة
افترض أننا نكتب برنامجًا يتيح للمستخدم إدخال بعض القيم (مثل عدد المواعيد) في بداية كل يوم. سوف نختار تخزين المعلومات في قائمة. يمكن أن نطلق على هذه القائمة تعيينات، ويمكن تخزين كل رقم كمواعيد [1] ، ومواعيد [2] ، وهكذا.
لاستخدام القائمة ، يجب أن نعلنها أولاً. فمثلا:
التعيينات var: صفيف [0..6] من عدد صحيح ؛
يعلن متغير يسمى المواعيد التي تحتوي على صفيف أحادي البعد (متجه) من 7 قيم صحيحة. بالنظر إلى هذا الإعلان ، تشير المواعيد [3] إلى القيمة الصحيحة الرابعة في المواعيد. الرقم في الأقواس يسمى الفهرس.
إذا أنشأنا صفيف ثابت ولكن لا تخصص قيمًا لجميع عناصرها ، فالعناصر غير المستخدمة تحتوي على بيانات عشوائية ؛ هم مثل المتغيرات غير المهيأة. يمكن استخدام الكود التالي لتعيين جميع العناصر في صفيف المواعيد إلى 0.
بالنسبة لـ k: = 0 إلى 6 قم بالتعيينات [k]: = 0 ؛
نحتاج أحيانًا إلى تتبع المعلومات ذات الصلة في مصفوفة. على سبيل المثال ، لتتبع كل بكسل على شاشة جهاز الكمبيوتر الخاص بك ، تحتاج إلى الرجوع إلى إحداثيات X و Y باستخدام متعدد الأبعاد صفيف لتخزين القيم.
مع دلفي ، يمكننا أن نعلن عن مصفوفات بأبعاد متعددة. على سبيل المثال ، تعلن العبارة التالية عن صفيف ثنائي الأبعاد 7 × 24:
var DayHour: صفيف [1..7 ، 1..24] من Real ؛
لحساب عدد العناصر في صفيف متعدد الأبعاد ، اضرب عدد العناصر في كل فهرس. يقوم متغير DayHour ، المُعلن أعلاه ، بتخصيص 168 عنصر (7 * 24) في 7 صفوف و 24 عمودًا. لاسترداد القيمة من الخلية في الصف الثالث والعمود السابع ، نستخدم: DayHour [3،7] أو DayHour [3] [7]. يمكن استخدام الكود التالي لتعيين جميع العناصر في مصفوفة DayHour إلى 0.
for i: = 1 to 7 do
for j: = 1 to 24 do
DayHour [i، j]: = 0؛
صفائف ديناميكية
قد لا تعرف بالضبط حجم إنشاء المصفوفة. قد ترغب في الحصول على القدرة على تغيير حجم الصفيف في وقت التشغيل. يصف الصفيف الديناميكي نوعه ، وليس حجمه. يمكن تغيير الحجم الفعلي للصفيف الديناميكي في وقت التشغيل باستخدام اضبط الطول إجراء.
var الطلاب: مصفوفة السلسلة؛
يخلق مجموعة ديناميكية أحادية البعد من السلاسل. الإعلان لا يخصص ذاكرة للطلاب. لإنشاء الصفيف في الذاكرة ، نسمي إجراء SetLength. على سبيل المثال ، بالنظر إلى الإعلان أعلاه ،
SetLength (الطلاب ، 14) ؛
يخصص مصفوفة من 14 سلسلة مفهرسة من 0 إلى 13. المصفوفات الديناميكية دائمًا ما يتم فهرستها بشكل صحيح ، تبدأ دائمًا من 0 إلى واحد أقل من حجمها في العناصر.
لإنشاء مصفوفة ديناميكية ثنائية الأبعاد ، استخدم الكود التالي:
var Matrix: مصفوفة صفيف من Double؛
ابدأ
SetLength (مصفوفة ، 10 ، 20)
النهاية؛
الذي يخصص مساحة لصفيف ثنائي الأبعاد 10 × 20 لقيم الفاصلة العائمة المزدوجة.
لإزالة مساحة ذاكرة الصفيف الديناميكي ، قم بتعيين صفر لمتغير الصفيف ، مثل:
المصفوفة: = لا شيء ؛
في كثير من الأحيان ، لا يعرف برنامجك في وقت الترجمة عدد العناصر المطلوبة ؛ لن يعرف هذا الرقم حتى وقت التشغيل. باستخدام المصفوفات الديناميكية ، يمكنك تخصيص مساحة التخزين المطلوبة فقط في وقت معين. بمعنى آخر ، يمكن تغيير حجم المصفوفات الديناميكية في وقت التشغيل ، وهي إحدى المزايا الرئيسية للمصفوفات الديناميكية.
ينشئ المثال التالي صفيفًا من القيم الصحيحة ثم يستدعي وظيفة النسخ لتغيير حجم الصفيف.
فار
الموجه: صفيف العدد الصحيح ؛
k: عدد صحيح ؛
ابدأ
SetLength (Vector ، 10) ؛
بالنسبة إلى k: = منخفض (متجه) إلى مرتفع (متجه)
المتجه [k]: = i * 10 ؛
...
// الآن نحن بحاجة إلى مساحة أكبر
SetLength (Vector ، 20) ؛
// هنا ، يمكن أن تحتوي مصفوفة المتجهات على ما يصل إلى 20 عنصرًا // (تحتوي بالفعل على 10 منها) ؛
تنشئ الدالة SetLength صفيفًا أكبر (أو أصغر) وتنسخ القيم الموجودة إلى صفيف جديد. تضمن لك الوظائف المنخفضة والعالية الوصول إلى كل عنصر مصفوفة دون الرجوع إلى التعليمات البرمجية للحصول على قيم الفهرس الأدنى والأعلى الصحيحة.