تخزين البيانات لنفترض أنك طورت لعبة كمبيوتر تسمى "User Hostile" حيث يتنافس اللاعبون ضد واجهة كمبيوتر معقدة وغير ودية. أنت الآن بحاجة إلى كتابة برنامج يتتبع المبيعات الشهرية لهذه اللعبة على مدار فترة خمس سنوات. أو لنفترض أنك بحاجة إلى جرد بطاقات تداول Hacker Hero.
قريبًا ستصل إلى استنتاج مفاده أنك بحاجة إلى أكثر من أنواع البيانات الأساسية البسيطة لتخزين المعلومات ومعالجتها.
نبسب ؛

صفائف (قوائم). مقدمة لتسهيل العمل مع كمية كبيرة من البيانات ، يتم إعطاء مجموعة من الخلايا اسمًا شائعًا. تسمى هذه المجموعة من الخلايا مصفوفة
Array & ndash؛ إنها مجموعة من خلايا الذاكرة من نفس النوع ، وتقع جنبًا إلى جنب ولها اسم شائع. كل خلية في المجموعة لها رقم فريد.

عند العمل مع المصفوفات ، تحتاج إلى تعلم كيفية حل ثلاث مهام:
x تخصيص ذاكرة بالحجم المطلوب لصفيف
x كتابة البيانات إلى الخلية المطلوبة
x قراءة البيانات من الخلية


المصفوفات في باسكال


تقليديا ، يستخدم باسكال مصفوفات ثابتة مثل <قبل> var a: المصفوفة [1..10] من عدد صحيح ؛

يجب تعيين حدود المصفوفة بواسطة الثوابت ، ولا يمكنك تغيير حجم المصفوفة أثناء تشغيل البرنامج. ولكن يمكنك إنشاء فهرس ليس فقط لعدد صحيح ، ولكن أيضًا ، على سبيل المثال ، من حرف أو نوع تم تعداده. على سبيل المثال ، لحساب تواجد كل حرف ، يمكنك استخدام مصفوفة <قبل> var LettersCount: مصفوفة [& # 39 ؛ a & # 39 ؛ .. & # 39 ؛ z & # 39 ؛] من عدد صحيح ؛

واعمل معها بما يرضي قلبك: <قبل> LettersCount [& # 39 ؛ z & # 39 ؛]: = 1 ؛ LettersCount [& # 39 ؛ d & # 39 ؛]: = LettersCount [& # 39 ؛ d & # 39 ؛] + 1 ؛

تُعرف عيوب هذه المصفوفات: إذا لم يكن معروفًا مسبقًا عدد العناصر التي يجب استخدامها ، فسيتم تخصيص الحد الأقصى لحجم الذاكرة للمصفوفة. نتيجة لذلك ، في معظم الحالات ، "نخزن للمستقبل" ، وأحيانًا يكون هذا "الاحتياطي" تبين أنه لا يكفي. هذا هو سبب تسمية هذه المصفوفات & nbsp؛ static : حجمها ثابت ويجب تعيينه في مرحلة تجميع البرنامج. ومع ذلك ، يوجد في باسكال & nbsp؛ & nbsp؛ مصفوفات ديناميكية ، لا يمكن تعيين حجمها فحسب ، بل يمكن تغييرها أيضًا أثناء البرنامج. ستتم مناقشة هذه المصفوفات ومزايا استخدامها بمزيد من التفصيل.

إنشاء مصفوفة

عند إنشاء مصفوفة ، يتم تخصيص مساحة في الذاكرة (عدد معين من الخلايا) <قبل> 1) يمكن أن تكون المصفوفات تم إنشاؤها عن طريق سرد العناصر ببساطة: <قبل> var a: مجموعة من الأعداد الصحيحة ؛ SetLength (أ ، 3) ؛ أ [0]: = 1 ؛ أ [1]: = 2 ؛ أ [2]: = 3 ؛
2) يمكن أن تتكون المصفوفات من بيانات من أي نوع - أعداد صحيحة أو أرقام حقيقية ، سلاسل أحرف & nbsp؛ <قبل> var a: مجموعة من الأحرف ؛ SetLength (أ ، 3) ؛ أ [0]: = & # 39؛ a & # 39 ؛؛ أ [1]: = & # 39 ؛ b & # 39 ؛؛ أ [2]: = & # 39 ؛ c & # 39 ؛؛ 3) المصفوفة دائمًا "تعرف" حجمك. يتم استخدام الدالة & nbsp؛ length لتحديد حجم المصفوفة. غالبًا ما يتم تخزين حجم المصفوفة في متغير منفصل بحيث يمكن تغيير البرنامج بسهولة للعمل مع حجم مصفوفة مختلف. مثال: <قبل> N: = 10 ؛ // في المتغير N نقوم بتخزين حجم المصفوفة SetLength (أ ، ن) ؛ // ضبط الصفيف والحجم ن writeln (الطول (أ)) ؛ // عرض حجم المصفوفة يمكن ضبط حجم المصفوفة من لوحة المفاتيح.

الرجوع إلى عنصر مصفوفة يأتي الكثير من فائدة المصفوفات من حقيقة أنه يمكن الوصول إلى عناصرها بشكل فردي.
طريقة القيام بذلك هي استخدام فهرس لترقيم العناصر.
الفهرس عبارة عن قيمة تشير إلى عنصر مصفوفة معين
تذكر!
يبدأ ترقيم الصفيف في باسكال من الصفر!
(هذا أمر إلزامي & [مدش] ؛ يجب أن تبدأ من نقطة الصفر. هذا مهم بشكل خاص للتذكر)

أمثلة على الوصول إلى المصفوفة أ: <قبل> x: = (A [3] + 5) * A [1] // اقرأ قيم A [3] و A [1] A [0]: = x + 6 // اكتب قيمة جديدة إلى A [0] دعنا نحلل البرنامج للعمل مع عناصر المصفوفة . <قبل> var i: عدد صحيح ؛ أ: مجموعة من الأعداد الصحيحة. يبدأ نبسب ؛ نبسب ؛ أنا: = 1 ؛ نبسب ؛ نبسب ؛ سيتلينجث (أ ، 5) ؛ // إنشاء مجموعة من 5 عناصر نبسب ؛ نبسب ؛ نبسب ؛ أ [0]: = 23 ؛ // لكل عنصر من عناصر المصفوفة الخمسة (الفهارس من 0 إلى 4) نبسب ؛ نبسب ؛ أ [1]: = 12 ؛ // اكتب قيمة محددة نبسب ؛ نبسب ؛ أ [2]: = 7 ؛ نبسب ؛ نبسب ؛ أ [3]: = 43 ؛ نبسب ؛ نبسب ؛ أ [4]: ​​= 51 ؛ نبسب ؛ نبسب ؛ أ [2]: = أ [i] + 2 * أ [i - 1] + أ [2 * i] ؛ // قم بتغيير قيمة العنصر باستخدام الفهرس 2 إلى نتيجة التعبير نبسب ؛ نبسب ؛ // لأن i = 1 ، ثم نستبدل قيمة المتغير i في التعبير الذي نحصل عليه نبسب ؛ نبسب ؛ // التعبير التالي & nbsp؛ a [2]: = a [1] + 2 * a [0] + a [2]؛ نبسب ؛ نبسب ؛ writeln (a [2] + a [4]) ؛ نهاية.
نتيجة للتشغيل هذا البرنامج ستظهر على الشاشة قيمة مجموع عناصر المصفوفة مع الفهرس 2 والفهرس 4 الذي يساوي 116. كما ترون من المثال ، يمكننا الوصول إلى أي عنصر من المصفوفة . وأيضًا احسب العدد المطلوب من العنصر باستخدام صيغ مختلفة (على سبيل المثال ، كما في البرنامج A [i-1] أو A [2 * i] ، في هذه الحالات ، سيتم حساب فهارس العناصر وتعتمد على قيمة i.)

لنلق نظرة على مثال البرنامج <قبل> var a: مجموعة من الأعداد الصحيحة ؛ يبدأ نبسب ؛ نبسب ؛ سيتلينجث (أ ، 5) ؛ نبسب ؛ نبسب ؛ أ [5]: = 5 ؛ أ [-1]: = 0 ؛ نهاية.

لأن يتم التصريح عن المصفوفة بخمسة عناصر ، لذلك سيتم ترقيم العناصر & nbsp؛ من 0 إلى 4. نرى أن البرنامج في السطر السادس يشير إلى عنصر غير موجود а [5] وعلى السطر السابع إلى غير موجود أيضًا a [-1].

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


نبسب ؛
نبسب ؛

عند العمل مع المصفوفات ، عادة ما يتعين عليك العمل مع جميع عناصر المصفوفة دفعة واحدة.
التكرار خلال العناصر: نتفحص جميع عناصر المصفوفة ونقوم ، إذا لزم الأمر ، بإجراء بعض العمليات على كل منها.
لهذا ، غالبًا ما يتم استخدام حلقة بها متغير ، والتي تتغير من 0 إلى N-1 ، حيث N هو عدد عناصر المصفوفة.
تحت N سننظر في الحجم الحالي للصفيف ، وهو
N: = length (A) . N: = length (A) <قبل> ... بالنسبة إلى i: = 0 إلى n - 1 ابدأ // هنا نعمل مع [i] نهاية؛ ... في الحلقة المحددة ، سيأخذ المتغير i القيم 0 ، 1 ، 2 ، ... ، N-1. & nbsp؛ وهكذا ، في كل خطوة من الحلقة ، نصل إلى عنصر معين من المصفوفة بالرقم i.
وبالتالي ، يكفي وصف ما يجب القيام به مع عنصر واحد من المصفوفة [i] ووضع هذه الإجراءات داخل هذه الحلقة.

لنكتب برنامجًا يملأ المصفوفة بالأرقام الطبيعية الأولى ، أي في نهاية البرنامج ، يجب أن تصبح عناصر المصفوفة متساوية <قبل> أ [0] = 1 أ [1] = 2 أ [2] = 3 ... أ [N - 1] = N من السهل رؤية النمط: يجب أن تكون قيمة عنصر المصفوفة أكبر بمقدار 1 من فهرس العنصر.
ستبدو الحلقة هكذا <قبل> بالنسبة إلى i: = 1 إلى n - 1 do أ [i]: = أنا + 1 ؛ أكمل المهمة.