ما الفرق بين أنواع البيانات البسيطة وأنواع البيانات المنظمة؟ أنواع البيانات المنظمة. أنواع البيانات: بسيطة ومنظمة

وتتميز الأنواع المهيكلة بتعدد العناصر التي يتكون منها هذا النوع، أي: لها عدة مكونات. كل مكون، بدوره، يمكن أن ينتمي إلى نوع منظم، أي. تداخل الأنواع مسموح به.

المصفوفاتتمثل اتحادًا رسميًا لعدة كائنات من نفس النوع (أرقام، رموز، سلاسل، إلخ)، تعتبر كلًا واحدًا. جميع مكونات المصفوفة هي بيانات من نفس النوع.

عرض عام لتعريف المصفوفة:

النوع A = صفيف [نوع فهرس الصفيف] من [نوع مكون الصفيف]

على سبيل المثال، M1=مصفوفة حقيقية؛

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

سِجِلّهي بنية بيانات تتكون من عدد ثابت من المكونات تسمى حقول السجل. على عكس المصفوفة، يمكن أن تكون مكونات السجل (الحقول) من أنواع مختلفة. تسمح لك السجلات بدمج قيم من أنواع مختلفة.

الشهر: (يناير، فبراير، مارس، إبريل، مايو، يونيو، يوليو، أغسطس، سبتمبر، أكتوبر، نوفمبر، ديسمبر)؛

السنة: 2000..2050؛

مجموعات- هذه مجموعات من الكائنات المتشابهة المرتبطة ببعضها البعض منطقيًا. يمكن أن يختلف عدد العناصر المضمنة في المجموعة من 0 إلى 256. إن عدم ثبات عناصرها هو الذي يجعل المجموعات تختلف عن المصفوفات والسجلات.

الأرقام = مجموعة من 1..5؛

ملف- منطقة مسماة من الذاكرة الخارجية. يحتوي الملف على مكونات من نفس النوع بخلاف الملفات (أي لا يمكنك إنشاء "ملف ملفات"). لم يتم تحديد طول الملف وهو محدود فقط بسعة أجهزة الذاكرة الخارجية.

F: ملف عدد صحيح؛

سوف نصبح أكثر دراية بالأنواع المنظمة بينما نواصل دراسة اللغة.

      1. المؤشر (النوع المرجعي)

يحتوي على عنوان بايت الذاكرة الذي يحتوي على قيمة بيانات من نوع معين. ويسمى هذا النوع أيضًا بالنوع المرجعي. يستخدم الوصف الحرف ^ ومعرف النوع. على سبيل المثال، P=^عدد صحيح؛

يعد استخدام المؤشرات وسيلة مرنة لإدارة الذاكرة الديناميكية ويوفر القدرة على معالجة صفائف البيانات الكبيرة.

    1. الثوابت

ثابتهي الكمية التي لا تتغير قيمتها أثناء تنفيذ البرنامج.

    عدديتستخدم الثوابت لكتابة الأرقام. تتميز الأنواع التالية:

جميع الأرقام: مكتوبة بعلامة + أو - أو بدون علامة، حسب القواعد الحسابية المعتادة: -10 +5 5

حقيقي يمكن كتابة الأرقام بأحد الشكلين:

دخول منتظم : 2.5 -3.14 2. - لاحظ أن الجزء الصحيح مفصول عن الجزء الكسري برمز النقطة؛

متسارع النموذج: في هذا الترميز، يتم تمثيل الرقم الحقيقي كـ m*10 p، حيث m العشريأو قاعدة الأرقام، 0.1 ± | م | ≥ 1، ص - طلبالأرقام، وهذا هو عدد صحيح ثابت. في الواقع، يمكن تمثيل أي عدد حقيقي بالشكل الأسي:

153.5 -0.1535*10 3

99.005 0.99005*10 2

تقوم كافة أجهزة الكمبيوتر المتوافقة مع IBM بتخزين الأعداد الحقيقية كمجموعة من الأجزاء العشرية والأُس، مما يسمح بتبسيط العمليات عليها باستخدام عمليات حسابية خاصة تتعامل مع الأجزاء العشرية والأُس بشكل منفصل. لكتابة رقم برمجيًا بالشكل الأسي، بدلاً من "الضرب في 10 أس"، استخدم الترميز هأو ه(لاتيني):

153.5 -0.1535*10 3 -0.1535E3 أو -1.535E02

99.005 0.99005*10 2 0.99005E+2 أو 9.9005e+01

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

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

تتكون الأرقام السداسية العشرية من أرقام سداسية عشرية مسبوقة بعلامة $. يتراوح نطاق الأرقام السداسية العشرية من $00000000 إلى $FFFFFFFF.

بالإضافة إلى الثوابت العددية، هناك أنواع أخرى من الثوابت:

    دعابة الدماغالثوابت.

إنها تعمل على التحقق من صحة أو زيف شروط معينة في البرنامج ولا يمكنها قبولها إلا واحدة من القيمتين: كلمة دالة حقيقيتقف على الحقيقة و خطأ شنيع- كذب؛

    شخصيةالثوابت.

يمكن أن يأخذ قيمة أي حرف قابل للطباعة ويتم كتابته كالحرف المضمن فيه الفواصل العليا("ونقلت واحدة"):

في الحالة الأخيرة، قيمة ثابت الحرف تساوي حرف المسافة. إذا كنت تريد كتابة رمز الفاصلة العليا نفسه كحرف ثابت، فسيتم مضاعفته داخل الفواصل العليا الخارجية: """"

تتضمن ثوابت الأحرف أيضًا ثوابت على شكل #X، حيث X هي قيمة رقمية تتراوح من 0 إلى 255 ضمنًا، وتمثل رقمًا عشريًا أسكي-شفرةرمز. ترد جداول رموز ASCII المستخدمة من قبل أنظمة التشغيل DOS وWindows في الملحق 1. على سبيل المثال، ستتوافق القيمة #65 مع رمز الحرف اللاتيني "A".

    خيطالثوابت.

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

"أدخل قيمة X:"

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

يمكن تسمية الثوابت في توربو باسكال. لم يذكر اسمهيتم استخدام الثوابت، على سبيل المثال، عند عرض نص الرسائل في المثال السابق. الثوابت المسماةتم وصفها في قسم وصف البرنامج بواسطة مشغل النموذج التالي:

اسم ثابت1=قيمة1;

Name2=Value2;

NameN=ValueN;

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

ثابت ه=2.7182818285;

lang="توربو باسكال 7.1";

يصف هذا الثابت الرقمي e بقيمة أساس اللوغاريتم الطبيعي وثابت السلسلة المسمى lang الذي يحتوي على السلسلة "Turbo Pascal 7.1".

يجب أن يكون كل اسم يقدمه المبرمج فريدضمن برنامج واحد. إذا قمنا بتضمين هذا القسم في برنامجنا، فلن نتمكن بعد الآن من إنشاء كائنات أخرى تسمى e واللغة فيها.

تعد طريقة الخوارزمية الهيكلية إحدى الطرق المنهجية لتطوير الخوارزميات. يعتمد على التمثيل المرئي للخوارزميات في شكل تسلسلات من الأجزاء الهيكلية للتحكم.

تتكون كل خوارزمية من خطوات أولية يمكن دمجها في هياكل خوارزمية معينة: خطي (تسلسلي)، المتفرعة , دورية .

التعريف 1

خطي هو تصميم خوارزمي يتم تنفيذه كسلسلة من الإجراءات (الخطوات)، مع تنفيذ كل إجراء (خطوة) مرة واحدة فقط، بعد كل إجراء (خطوة) يتم زيادة الإجراء (الخطوة) بمقدار 1 حتى تصبح القيمة أكبر من المعلمة النهائية لـ الخوارزمية.

يتم تمثيل العمليات الخطية باستخدام الخوارزميات الخطية. تُستخدم الخوارزميات من هذا النوع لوصف حل عام للمشكلات في شكل تسلسل من الوحدات.

التعريف 2

المتفرعة (المتفرعة) استدعاء تصميم خوارزمي يوفر الاختيار بين حلين اعتمادًا على قيم البيانات المدخلة.

هناك نوعان من الفروع: غير مكتمل (إذا كان هناك شيء) و مكتمل (إذا-ثم-آخر). باستخدام التفرع الكامل، يمكنك تنظيم فرعين في الخوارزمية ( الذي - التيأو خلاف ذلك)، سيؤدي كل منها إلى نقطة مشتركة لدمجها، وسيتم تنفيذ الخوارزمية بغض النظر عن المسار الذي سلكه الحل. في حالة وجود تفرع غير مكتمل، يتم افتراض بعض إجراءات الخوارزمية على فرع واحد فقط ( الذي - التي)، نظرًا لأن العنصر الثاني مفقود، ليست هناك حاجة لتنفيذ أي إجراء لإحدى نتائج التحقق؛ سيتم تمرير عنصر التحكم على الفور إلى نقطة الدمج. هناك 4 أنواع أساسية من البنية المتفرعة:

  1. نوع المتفرعة غير مكتملة "اذا ثم "، والتي بموجبها يتم تنفيذ جميع الإجراءات إذا كان الشرط صحيحا.
  2. نوع كامل المتفرعة "إذا - إذن - وإلا" ، حيث سيتم تنفيذ إجراءين حسب حقيقة الشرط.
  3. المتفرعة مع اختيار النوع "الذي - التي" ، حيث سيتم تنفيذ الإجراء 1 بموجب الشرط 1، والإجراء 2 بموجب الشرط 2، وما إلى ذلك.
  4. المتفرعة مع اختيار النوع "خلاف ذلك" ، والتي بموجبها، بموجب الشرط 1، سيتم تنفيذ الإجراء 1، بموجب الشرط 2، الإجراء 2، وما إلى ذلك، وبخلاف ذلك سيتم تنفيذ جميع الإجراءات الأخرى.

فيما يلي مخططات كتلة للخوارزميات المتفرعة.

التعريف 3

دوري (أو دورة) هو تصميم خوارزمي يتم فيه تنفيذ مجموعة معينة من الإجراءات (الخطوات) المتتالية عدة مرات حسب ظروف المشكلة والبيانات المدخلة.

التعريف 4

تسمى هذه المجموعة من الإجراءات المتكررة في كل خطوة من خطوات الدورة جسم الحلقة .

يحتوي أي هيكل دوري على عناصر البنية المتفرعة للخوارزمية.

هناك 3 أنواع من الخوارزميات الدورية:

  • حلقة مع المعلمة (حلقة حسابية)؛
  • حلقة بشرط مسبق؛
  • حلقة ذات شرط لاحق (يُطلق على الحلقتين الأخيرتين اسم التكرار).

حلقة حسابية

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

حلقة مع شرط مسبق

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

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

حلقة مع الشرط اللاحق

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

في المشاكل الحقيقية، كقاعدة عامة، هناك أي عدد من الدورات.

فيما يلي مخططات كتلة للخوارزميات الدورية.

أنواع البيانات: بسيطة ومنظمة

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

التعريف 5

عامل هو كائن مسمى (خلية الذاكرة) يغير قيمته.

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

يتم تحديد نوع المتغير بواسطة:

  • الطريقة المستخدمة لتسجيل المعلومات في خلايا الذاكرة؛
  • مقدار الذاكرة المطلوبة لتخزينها.

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

التعريف 6

تسمى المتغيرات الموجودة في البرنامج طوال فترة تشغيله ثابتة .

التعريف 7

تسمى المتغيرات التي يتم إنشاؤها وتدميرها في مراحل مختلفة من تنفيذ البرنامج متحرك .التعريف 10

مجموعة مصفوفة يطلقون على مجموعة مرتبة من الكميات من نفس النوع والتي لها اسم شائع وأرقام تسلسلية للعناصر (المؤشرات).

يتم تخزين عناصر المصفوفة في ذاكرة الكمبيوتر القريبة، على عكس العناصر الفردية. تتميز المصفوفات بعدد مؤشرات العناصر.

تتميز المصفوفة أحادية البعد بوجود فهرس واحد فقط لكل عنصر. من أمثلة المصفوفات أحادية البعد المتتاليات الهندسية والحسابية، التي تحدد سلسلة محدودة من الأرقام.

التعريف 11

يتم استدعاء عدد العناصر في المصفوفة البعد .

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

يتم إدخال عناصر المصفوفة أحادية البعد عنصرًا تلو الآخر، بالترتيب اللازم لحل مشكلة معينة. إذا كان من الضروري إدخال المصفوفة بأكملها، فسيتم إدخال العناصر بترتيب فهرس تصاعدي.

الفصل 6. منظم
أنواع البيانات تحدد أنواع البيانات المنظمة مجموعات من المكونات من نفس الأنواع أو من أنواع مختلفة. يتم تشكيل أنواع المكونات من أنواع البيانات الأخرى (بسيطة، منظمة، مؤشرات، وما إلى ذلك). في لغة باسكال هناك الأنواع الهيكلية التالية: - نوع المصفوفة؛ - نوع السجل؛ - مجموعة النوع؛ - نوع الملف. لدى Turbo Pascal نوعان أكثر تنظيماً: - سلسلة من نوع السلسلة - ونوع سلسلة PChar، وهما أنواع من المصفوفات. فيما يلي، للإيجاز، سيتم استدعاء كائنات الأنواع المنظمة بنفس أسماء أنواعها، دون تحديد كلمة "نوع": صفيف، سجل، مجموعة، ملف، سلسلة. في معيار اللغة، هناك أنواع منظمة مجمعة وغير معبأة. في Turbo Pascal، الكلمة معبأ، التي تصف النوع المعبأ، ليس لها أي تأثير؛ كلما أمكن، يتم تنفيذ عملية تعبئة البيانات تلقائيًا. 6.1. Array Type-array هو عدد ثابت من المكونات المرتبة من نفس النوع، ومجهزة بمؤشرات. يمكن أن تكون أحادية البعد أو متعددة الأبعاد. لتحديد نوع المصفوفة، استخدم مصفوفة الكلمات المحجوزة، وبعد ذلك يجب الإشارة إلى نوع فهرس (فهارس) المكونات (بين قوسين مربعين) ثم بعد كلمة - نوع المكونات نفسها: اكتب<имя типа>= مصفوفة[<тип индекса(индексов)>] ل<тип компонент> ; مثال. اكتب Arr = مجموعة من Real؛ (نوع مصفوفة من 3 أرقام حقيقية) Matrix = مصفوفة عدد صحيح؛ (النوع عبارة عن مصفوفة ثنائية الأبعاد من الأعداد الصحيحة، تتكون من 3 صفوف وعمودين) من خلال إدخال نوع المصفوفة، يمكنك بعد ذلك تحديد المتغيرات أو الثوابت المكتوبة من هذا النوع. يمكن أن يكون أبعاد المصفوفة أي شيء، ويمكن أن تكون مكونات المصفوفة من أي نوع، بما في ذلك المكونات المنظمة، ويمكن أن يكون الفهرس (المؤشرات) من أي نوع ترتيبي، باستثناء نوع Longint. عند تعيين قيم لمصفوفة ثابتة، تتم الإشارة إلى المكونات بين قوسين ويتم فصلها بفواصل، وإذا كانت المصفوفة متعددة الأبعاد، فإن الأقواس الخارجية تتوافق مع الفهرس الأيسر، والأقواس المتداخلة بداخلها تتوافق مع الفهرس التالي، وما إلى ذلك. لذلك، بالنسبة للأنواع المقدمة أعلاه، يمكنك تحديد، على سبيل المثال، المتغيرات والثوابت التالية: var Ml, M2: Arr; مطر: مصفوفة؛ const M3: Arr =(1, 2, 3); حصيرة: المصفوفة = ((1، 2)، (3، 4)، (5، 6))؛ يتوافق الثابت الأخير مع البنية التالية: 1 2 3 4 5 6 ملاحظة. يمكن أيضًا إدخال نوع المصفوفة مباشرةً عند تحديد المتغيرات المقابلة أو الثوابت المكتوبة. على سبيل المثال: var Ml, M2: array of Real; مطر: مصفوفة الأعداد الصحيحة؛ يتم تعريف نفس المصفوفات هنا كما في المثال السابق. عند الإعلان عن المصفوفات بهذه الطريقة، تذكر أن أنواعها لن تكون مطابقة لأي أنواع أخرى، حتى لو كانت لها نفس البنية. لذلك، لا يمكنك تمريرها كمعلمات إلى روتين فرعي (انظر القسم 10.3)، ولا يمكنك أيضًا تعيين قيم المصفوفات الأخرى (والعكس صحيح)، حتى لو كانت بنياتها هي نفسها. يتم الوصول إلى مكونات المصفوفة عن طريق تحديد اسم المصفوفة متبوعًا بقيمة فهرس (فهارس) المكونات بين قوسين مربعين. بشكل عام، يمكن تحديد كل فهرس مكون من خلال تعبير من النوع المناسب، على سبيل المثال: M1، Matrix، M2، إلخ. يمكن تعيين قيمة لمصفوفة واحدة لمصفوفة أخرى، ولكن من نوع مماثل فقط. لذلك، إذا تم إعطاء المصفوفات التالية: var A, B: array of Integer; C: مجموعة من الأعداد الصحيحة؛ فلنفترض أن العامل التالي: A:= B; من ناحية أخرى، العامل C:= A; غير صالح، لأن المصفوفتين A وC ليسا نوعين متطابقين. هناك بعض الاختلافات في العمل مع مصفوفات الأحرف أحادية البعد (يجب عدم الخلط بينه وبين قيم السلسلة - راجع القسم 6.2). وبالتالي، يمكن تعيين قيمة للثوابت المكتوبة من هذا النوع مثل ثوابت السلسلة العادية عن طريق تحديد سلسلة من الأحرف بين الفواصل العليا، على سبيل المثال const A: array of Char = "aaaaa"؛ ب: مجموعة من Char = "bbb"؛ بالنسبة لمثل هذه المصفوفات، مثل السلاسل، يمكنك استخدام عمليات المقارنة (حتى لو لم تكن أنواعًا متطابقة وحتى لو كانت ذات أحجام مختلفة) والتسلسل (الاتحاد) - انظر. البند 6.2. يمكن استخدامها في عبارات الإخراج Write وWriteLn. على سبيل المثال، بالنسبة للمصفوفات التي تم إدخالها أعلاه، يمكنك كتابة if A > B ثم WriteLn(A) else WriteLn(B); 6.2. سلسلة من النوع سلسلة في Turbo Pascal، نوع السلسلة (نوع السلسلة القياسي) هو سلسلة من الأحرف ذات الطول التعسفي (حتى 255 حرفًا). يمكن اعتبار السلسلة بمثابة مصفوفة من الأحرف، ولكن بسبب الاستخدام الواسع النطاق للسلاسل وبعض الميزات مقارنة بالمصفوفات القياسية، يتم فصلها إلى نوع بيانات منفصل. يمكن الإشارة إلى حجم نوع السلسلة بين قوسين مربعين (من 1 إلى 255). إذا لم يتم تحديد حجم السلسلة، فمن المفترض أن يكون 255، على سبيل المثال: var Str: string; MaxStr: سلسلة؛ (سلسلة مكونة من 255 حرفًا) const January: string = "January"; تنطبق عمليات التسلسل (+) والمقارنة على السلاسل. تضيف عملية التسلسل سلسلة ثانية إلى السلسلة الأولى. مثال. قم بربط سلسلتين. Str، Strl، Str2: سلسلة؛ ابدأ Strl:= "Turbo"; Str2:= "باسكال"; Str:= Strl + Str2; (في المتغير Str - نهاية "Turbo Pascal". يمكنك مقارنة سلاسل ذات أطوال مختلفة. تتم المقارنة من اليسار إلى اليمين وفقًا لرموز ASCII للأحرف المقابلة. تعتبر الأحرف المفقودة في السلسلة الأقصر تحتوي على رمز أقل من رمز أي حرف صالح. على سبيل المثال، "XS" أكبر من "X". مثال. تحقق مما إذا كانت مجموعة الأحرف المدخلة هي اسم الشهر باللغة الروسية. برنامج EXAMPLE11؛ مثيل const: صفيف من السلسلة!10]= ("يناير"، "فبراير"، "مارس"، "أبريل"، "مايو"، "يونيو"، "يوليو"، "أغسطس"، "سبتمبر"، "أكتوبر" ، "تشرين الثاني كانون الأول")؛ الشهر: منطقية = خطأ؛ فار Str: سلسلة؛ ط: عدد صحيح؛ ابدأ Writeln("أدخل الأحرف الكبيرة:"); ReadLn(Str); بالنسبة إلى i:= 1 إلى 12، افعل إذا كانت Str = Instance[i] ثم Month:=True؛ إذا كان الشهر ثم WriteLn("تم إدخال اسم الشهر") آخر WriteLn("لم يتم إدخال اسم الشهر") ينتهي. في الواقع، سلسلة من أحرف N هي مصفوفة من أحرف N + 1: string[N] = array of Char. الهدف من الحرف الفارغ هو الإشارة إلى عدد الأحرف في السلسلة المراد استخدامها ويمكن أن يختلف من حرف برمز 0 إلى حرف برمز N. يمكنك العمل معه مثل الأحرف الأخرى في سلسلة (كتابة وقراءة قيمته الخ)، ولكن دون أن ننسى الغرض الرئيسي منه. 6.3. سلسلة ASCIIZ في الإصدار 7.0، من أجل التوافق مع لغات البرمجة الأخرى وبيئة Windows، تم تقديم نوع آخر من السلاسل - سلاسل تنتهي بصفر بايت - حرف برمز 0 (ما يسمى بسلاسل ASCIIZ). على عكس السلاسل النصية، لا يوجد حد لحجم هذه السلاسل (في الواقع، يمكن أن يصل حجمها إلى 65535 بايت). يتم إعطاء هذه السلاسل النوع القياسي PChar. في الواقع، هذا النوع هو مؤشر إلى حرف (حول المؤشرات، راجع الفقرة 7): PChar = ^Char; ومع ذلك، فإن استخدام بناء الجملة الموسع (المفتاح (X+) - راجع القسم 17.7.1) يسمح لك باستخدام مثل هذا المتغير كسلسلة مكافئة لمصفوفة من النوع pChar = مصفوفة Char، حيث K هو عدد الأحرف في السلسلة، دون احتساب الحرف اللاحق بالرمز 0. على عكس نوع السلسلة، فإن الحرف ذو الفهرس 0 هنا هو الحرف الأول من السلسلة، والحرف الأخير مع الفهرس K هو الحرف الأخير مع الرمز 0. عند العمل مع سلاسل ASCIIZ فمن المستحسن تحديد بناء جملة موسع؛ في هذه الحالة، لا توجد صعوبات عند استخدام الإجراءات القياسية المختلفة التي تعمل مع السلاسل. مثال. استخدام سلاسل PChar مع بناء الجملة الموسعة. برنامج EXAMPLE12؛ ($X+) (ليس ضروريًا لأنه الافتراضي) اكتب T = صفيف Char؛ (مصفوفة لسلسلة مكونة من 7 أحرف) var Str: PChar; const A: T = "مرحبًا!"#0; start Str:= "HELLO!"; WriteLn(Str); (خط الإخراج: مرحبا Str:= @А; {допустимо также: Str:=A} WriteLn(Str); {вывод строки: привет!} WriteLn(Str);{вывод символа "р"} ReadLn end. Если используется ключ {$Х-}, переменная типа PChar в этом случае рассматривается как указатель на один единственный символ. В этом случае ни один из операторов предыдущего примера, за исключением операторов Str:=@A; и ReadLn, недопустимы, а оператор WriteLn(Str^), выполненный после оператора Str:=@A;, выдаст один символ "п". Для работы с ASCIIZ-строками в версии 7.0 используются специальные стандартные модули Strings (см. п. 16.2) и WinDos (см. п. 16.6). 6.4. Запись Тип-запись включает ряд компонент, называемых полями, которые могут быть разных типов. При задании типа-записи после зарезервированного слова record следует перечислить все поля типа-записи с указанием через двоеточие их типов и завершить задание типа словом end. Поля отделяются друг от друга точкой с запятой. Количество полей записи может быть любым. Пример. type Complex = record {Тип комплексных чисел} Re: Real; Im: Real end; Data = record {Тип - дата рождения} Year: Integer; Month: 1..12; Day: 1..31 end; Person = record {Тип - сведения о сотруднике} Name: string; Sex: (Male, Female); Age: Integer; Married: Boolean end; Примечание. Если несколько полей типа-записи имеют один и тот же тип, то их имена можно перечислить через запятую и затем указать этот общий тип. Так, рассмотренный в примере тип комплексных чисел можно ввести и другим образом: type Complex = record Re, Im: Real end; После введения типа-записи можно затем задать переменные или типизированные константы этого типа - записи. При задании значений константе ее поля записываются в круглых скобках через точку с запятой. Для задания значения каждого поля сначала указывается имя поля, а затем через двоеточие - его значение. Так, для введенных выше типов можно задать, например, следующие переменные и константы: var X, У, Z: Complex; Dat: Data; const Birthday: Data = (Year: 1971; Month: 12; Day: 9); Ivanov: Person = (Name: "Иванов"; Sex: Male; Age: 40; Married: True); Примечание. Тип-запись можно вводить и непосредственно при определении переменных или типизированных констант. Например, фрагмент var X, Y, Z: record Re, Im: Real end; определяет те же комплексные переменные, что и в предыдущем примере. Доступ к полям записи осуществляется указанием имени переменной (константы) и имени поля, записываемого через точку, например: Ivanov.Age, X.Re, Dat.Day и т. д. Пример. Использование полей записей. X.Re:= 1.5; X.Im:=1.7; Y.Re:= -X.Re; Y.Im:= -X.Im; Ivanov.Married:= False; Для того чтобы не выписывать каждый раз имя записи при обращении к ее полям, можно использовать оператор над записями WITH. Его структура выглядит следующим образом: with !}<имя записи>يفعل<оператор> ; في هذه الحالة، يمكن تحديد حقل السجل فقط داخل البيان. على سبيل المثال، الجزء: بـ X يبدأ Re:= 1.5; ايم:= 1.7؛ Y.Re:= -Re; Y.Im:= -انتهى الأمر؛ مع إيفانوف يتزوج:= خطأ؛ يعادل الجزء من المثال السابق. يمكن أن يحتوي نوع السجل على جزء متغير يتغير بتطبيقات مختلفة، على سبيل المثال، في نوع السجل لمعلمات الأشكال الهندسية، يتم تحديد ضلع للمربع، والجانبين والزاوية بينهما للمثلث، ونصف القطر لـ دائرة، وما إلى ذلك. يمكن أن يكون الجزء المتغير واحدًا فقط ويجب أن يكون موجودًا في نهاية الإدخال. مثال. باستخدام جزء البديل. اكتب الشكل = (مربع، مثلث، دائرة)؛ Param = سجل X، Y: حقيقي؛ (إحداثيات نقطة الربط) الشكل الشكل: شكل (معلمات الشكل) المربع: (الجانب: حقيقي)؛ المثلث: (الضلع، الجانب 2، الزاوية: الحقيقية)؛ الدائرة: (نصف القطر: حقيقي) النهاية؛ فار MySquare، MyCircle: Param؛ يبدأ الجزء المتغير بحالة الكلمة، متبوعًا بمتغير تحديد متغير (في مثال الشكل) يشير إلى النوع. التالي هي الثوابت التي يمكن أن يأخذ متغير تحديد الخيار قيمها (في المثال، مربع، مثلث، دائرة). بعد كل ثابت، تتم كتابة حقول خيار التسجيل المحدد، مفصولة بنقطتين بين قوسين، مع الإشارة إلى أنواعها. الأقواس مطلوبة حتى لو لم يكن هناك جزء مختلف لخيار معين. تجدر الإشارة إلى أن الجزء المتغير لا يتم إنهاؤه ببيان النهاية الخاص به، كما هو الحال في بنية CASE العادية، لأنه يتبعه بيان النهاية للنوع بأكمله. في معيار لغة باسكال، قبل استخدام أحد خيارات التسجيل، يجب تعيين القيمة المناسبة لمتغير تحديد الخيار: Fig:= Square; MySquare.Side:=5.0; الشكل:= الدائرة؛ MyCircle.Radius:=7.5; في Turbo Pascal، هذه العملية ليست ضرورية، على الرغم من أنه إذا تم تحديد متغير اختيار، فيمكن بعد ذلك النظر إليه في البرنامج لتحديد الاختيار الذي تم تعيينه. علاوة على ذلك، فإن تحديد قيمة متغير التحديد ليس له أي تأثير على أي شيء، والجزء التالي يعادل الجزء الذي تمت مناقشته أعلاه: Fig:= Circle; MySquare.Side:= 5.0; الشكل:= مربع؛ MyCircle.Radius:-7.5; في نوع السجل، يجوز عدم إدخال متغير لتحديد الخيارات، ولكن إدراج خيارات مختلفة فقط، على سبيل المثال: Transf = حالة السجل Integer of 1: (_Word: Word)؛ 2: (_TwoSymb: مجموعة من Char) النهاية؛ 6.5. المجموعة في لغة باسكال، نوع المجموعة هو درجة محددة للمجموعة الأصلية من الكائنات ذات النوع الترتيبي، أي مجموعة من جميع المجموعات الممكنة لكائنات المجموعة الأصلية. لا يمكن أن يزيد عدد عناصر المجموعة الأصلية في Turbo Pascal عن 256، ويجب أن تكون الأعداد الترتيبية للعناصر (أي قيمة الدالة Ord) في النطاق من 0 إلى 255. لتحديد نوع المجموعة ، يجب عليك استخدام مجموعة الكلمات المحجوزة و of، ثم الإشارة إلى عناصر هذه المجموعة، عادةً في شكل تعداد أو نطاق، على سبيل المثال: type Alfa = set of "A".."Z"; العد = مجموعة من (زائد، ناقص، مولت، قسمة)؛ عشرة = مجموعة من 0..9؛ الرقم = مجموعة "0".."9" ؛ عن طريق إدخال نوع المجموعة، يمكنك تحديد المتغيرات أو الثوابت المكتوبة من نوع المجموعة هذا. عند إسناد قيم لمجموعة ثابتة، يتم إدراج عناصرها مفصولة بفواصل (يجوز تحديد النطاقات) وتوضع بين قوسين مربعين. على سبيل المثال، بالنسبة للأنواع المقدمة أعلاه، يمكنك تعيين المتغيرات التالية والثوابت المكتوبة: var CharVal: Alfa; العملية: عد؛ مؤشر ثابت: عشرة = ; الرقم: الرقم = ["0".."9"]; ملحوظة. كما هو الحال مع الأنواع المهيكلة الأخرى، يمكن تقديم نوع المجموعة مباشرة عند تعريف المتغيرات أو الثوابت المكتوبة: var CharVal: set of "A."."Z"; العملية: مجموعة من (زائد، ناقص، مولت، قسمة)؛ مؤشر const: مجموعة من 0..9 = ; الرقم: مجموعة "0".."9"=["0".."9"]; يمكن تعيين قيمة أو أخرى للمجموعة في البرنامج. عادةً ما يتم تعيين القيمة باستخدام مُنشئ المجموعة. يحدد المنشئ مجموعة من العناصر عن طريق إدراج التعبيرات بين قوسين مربعين يتم إعطاء قيمها بواسطة عناصر هذه المجموعة. من المقبول استخدام نطاقات من العناصر. مثال. يتم تعيين الهياكل التالية منشئي: كل مجموعة تتضمن ما يسمى. مجموعة فارغة لا تحتوي على عناصر. يمكن أيضًا استخدام مُنشئ المجموعة مباشرةً في العمليات على المجموعات. يتم تعريف العمليات التالية للمجموعات: + - اتحاد المجموعات؛ - - اختلاف المجموعات؛ * - تقاطع الكثير؛ = - التحقق من تكافؤ مجموعتين؛<>- التحقق من عدم تكافؤ مجموعتين؛<= - проверка, является ли левое множество подмножеством правого множества; > = - التحقق مما إذا كانت المجموعة اليمنى هي مجموعة فرعية من المجموعة اليسرى؛ in - يتحقق مما إذا كان العنصر المحدد على اليسار مدرجًا في المجموعة المحددة على اليمين. نتيجة عملية الاتحاد أو الاختلاف أو التقاطع هي المجموعة المقابلة، أما العمليات الأخرى فتعطي نتيجة من النوع المنطقي. مثال. أدخل سلسلة أحرف تتكون من أحرف لاتينية وأرقام ومسافات. التحقق من صحة الأحرف المدخلة. برنامج EXAMPLE13؛ فار Str: سلسلة؛ L: بايت؛ ترو: منطقية؛ ابدأ WriteLn("أدخل سطرًا"); ReadLn(Str); L:= الطول(شارع); (عدد الأحرف المدخلة) Tru:= L > 0; (صحيح إذا لم تكن سلسلة فارغة) بينما يبدأ Tru و(L > 0) (تحقق من نهاية السطر) Tru:=Str[L] في ["0".."9"، "A".، "Z" , "a".."z", " "]; (التحقق من صحة الحرف) Dec(L) (الحرف السابق) النهاية؛ إذا كان Tru ثم WriteLn("الخط الصحيح")، وإلا فإن WriteLn("الخط الخطأ"" ينتهي. 6.6. ملف نوع الملف عبارة عن سلسلة من المكونات من نفس النوع الموجودة على جهاز خارجي (يعتمد معيار اللغة على موقع البيانات على الأشرطة المغناطيسية). يمكن أن تكون المكونات من أي نوع، باستثناء نوع الملف (أو التي تحتوي على مكونات من نوع الملف) ونوع الكائن. لم يتم الإعلان عن عدد المكونات في الملف. لتحديد نوع الملف، استخدم الكلمات المحجوزة file و of، متبوعة بنوع مكون الملف. مثال. اكتب الرقم = ملف عدد صحيح؛ (نوع الملف الصحيح) Symb = ملف "A".."Z"; (نوع الملف الكبير) يحدد نوع النص القياسي نوع ملف يحتوي على أحرف متسلسلة في سلاسل. ضع في اعتبارك أن نوع النص في Turbo Pascal لا يعادل الملف من نوع Char. عن طريق إدخال نوع الملف، يمكنك تحديد متغيرات نوع الملف: var Fl, F2: Number; F3: نص؛ FF4: رمز؛ في Turbo Pascal، يمكنك استخدام ملف بدون نوع، ولا يحدد تعريفه نوع المكون. في هذه الحالة، يتم العمل مع الملف على المستوى المادي وفقًا للتنسيق الداخلي لبياناته. في هذه الحالة، يمكن أن تكون المكونات الفعلية للملف من أنواع مختلفة. مثال. اكتب UnType = ملف؛ يمكن أيضًا تحديد نوع الملف مباشرةً عند الإعلان عن متغيرات الملف: var Fl, F2: file of Integer; متغيرات الملف لها استخدامات محددة. لا يمكنك إجراء أي عمليات عليها (تعيين قيمة، مقارنة، وما إلى ذلك). ولا يمكن استخدامها إلا لإجراء العمليات على الملفات (القراءة والكتابة وحذف ملف وما إلى ذلك). ستتم مناقشة العمل مع الملفات في الفقرة 11. بالإضافة إلى ذلك، من خلال متغير الملف، يمكنك الحصول على معلومات حول ملف معين (النوع، المعلمات، اسم الملف، وما إلى ذلك). د.)

خوارزمية البرمجة المنفصلة

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

عامل - يوجد كائن مسمى (خلية ذاكرة) يمكنه تغيير قيمته. اسميشير المتغير معنى،وتبقى طريقة تخزينه وعنوانه مخفيين عن المبرمج. بالإضافة إلى اسمه وقيمته، هناك متغير يكتب،تحديد المعلومات الموجودة في الذاكرة. يكتبمجموعات متغيرة:

  • * الطريقة المستخدمة لتسجيل المعلومات في خلايا الذاكرة.
  • * مقدار الذاكرة المطلوبة لتخزينها.

يتم تحديد مقدار الذاكرة لكل نوع بحيث يمكنه استيعاب أي قيمة من نطاق القيم الصالحة لهذا النوع. على سبيل المثال، يمكن أن يأخذ نوع البايت قيمًا من 0 إلى 255، والتي في الكود الثنائي (255 = 11111111 2) تتوافق مع خلية ذاكرة بطول 8 بت (أو بايت واحد).

في الخوارزميات الموضحة أعلاه، يتم تخزين جميع البيانات في شكل متغيرات. على سبيل المثال، التعليمات "أدخل رقمين أ، ب"تعني أن يقوم المستخدم بإدخال قيم متغيرين، والتعليمة “K=K+1” تعني زيادة قيمة المتغير K بمقدار واحد.

إذا كانت المتغيرات موجودة في البرنامج طوال مدة تشغيله، يتم استدعاؤها ثابتة.تسمى المتغيرات التي يتم إنشاؤها وتدميرها في مراحل مختلفة من تنفيذ البرنامج متحرك.

يتم استدعاء كافة البيانات الأخرى الموجودة في البرنامج والتي لا تتغير قيمها طوال فترة تشغيله الثوابت أو دائم.الثوابت، مثل المتغيرات، لها نوع. يمكن الإشارة إليها بشكل صريح، على سبيل المثال، في التعليمات "K = K + 1" 1 هناك ثابت، أو للراحة يمكن تحديدها بواسطة المعرفات: باي = 3.1415926536. المعنى فقط بايلا يمكن تغييره لأنه ثابت وليس متغير.

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

مجموعة مصفوفة هي مجموعة مرتبة من الكميات من نفس النوع ولها اسم مشترك، ويتم تناول (تمييز) عناصرها بأرقام متسلسلة (مؤشرات). على سبيل المثال، يمكننا أن نتخيل خزانة تحتوي على العديد من الأدراج المرقمة (المجموع هو "الصندوق رقم 1"، "الصندوق رقم 2"، "الصندوق رقم 3"، وما إلى ذلك؛ "الصندوق" هو ​​الاسم العام لجميع الأدراج عناصره). يتم الوصول إلى محتويات مربع معين (عنصر الصفيف) بعد تحديد المربع برقمه (الفهرس). يتم تخزين عناصر المصفوفة في ذاكرة الكمبيوتر في مكان قريب، ولا تتضمن العناصر الفردية من النوع البسيط مثل هذا الترتيب للبيانات في الذاكرة. تختلف المصفوفات في عدد المؤشرات التي تحدد عناصرها.

مصفوفة أحادية البعد(خزانة ذات أدراج في صف واحد) تفترض أن كل عنصر له فهرس واحد فقط. من أمثلة المصفوفات أحادية البعد المتتاليات الحسابية والهندسية التي تحدد سلسلة محدودة من الأرقام. يتم استدعاء عدد العناصر في المصفوفة البعد.عند تعريف مصفوفة أحادية البعد، يتم كتابة البعد الخاص بها بين قوسين بجوار اسمها. على سبيل المثال، إذا قيل: "تم إعطاء المصفوفة A(10)"، فهذا يعني أن العناصر معطاة: أ ر أ 2 ,…, أ على سبيل المثال . دعونا نفكر في خوارزميات معالجة عناصر المصفوفات أحادية البعد.

يتم إدخال عناصر المصفوفة أحادية البعد عنصرًا تلو الآخر، بالترتيب اللازم لحل مشكلة معينة. عادةً، عندما تحتاج إلى إدخال مصفوفة بأكملها، فإن الترتيب الذي تم إدخال العناصر به ليس مهمًا، ويتم إدخال العناصر بترتيب تصاعدي لمؤشراتها.