أنواع البيانات الترتيبية في باسكال الأعداد الصحيحة في باسكال

12.10.2019

يتناول الدرس أنواع البيانات القياسية الرئيسية في لغة باسكال، ومفهوم المتغير والثابت؛ يشرح كيفية التعامل مع العمليات الحسابية

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

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

دعونا نلقي نظرة على أنواع البيانات الأكثر شيوعا في باسكال.

أنواع البيانات الصحيحة في باسكال

يكتب يتراوح الذاكرة المطلوبة (بايت)
بايت 0..255 1
Shortint -128..127 1
عدد صحيح -32768.. 32767 2
كلمة 0..65535 2
لونجينت -2147483648..2147483647 4

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

أمثلة لكيفية وصف (إعلان) المتغيرات في باسكال:

البرنامج a1؛ فار س، ص: عدد صحيح؛ (نوع عدد صحيح) myname:string; (نوع السلسلة) begin x:=1; ص:=س+16; اسمي:="بيتر"; writeln ("الاسم: "، اسمي، "، العمر: "، ص) النهاية.

نتيجة:
الاسم: بيتر، العمر: 17 سنة

التعليقات في باسكال

لاحظ كيف يتم استخدام التعليقات في باسكال. في التعليقات على سبيل المثال، على سبيل المثال. يتم وضع نص الخدمة "غير المرئي" للمترجم بين قوسين متعرجين. عادة، يتم تقديم التعليقات من قبل المبرمجين لشرح أجزاء من التعليمات البرمجية.

المهمة 3.ويبلغ عدد سكان موسكو = 9.000.000 نسمة. يبلغ عدد سكان نيو فاسيوكي = 1000 نسمة. اكتب برنامجا يحدد الفرق في عدد السكان بين مدينتين. استخدم المتغيرات

أنواع البيانات الحقيقية في باسكال

الأعداد الحقيقية في لغة باسكال وفي البرمجة بشكل عام هي اسم الأعداد الكسرية.

يكتب يتراوح الذاكرة المطلوبة (بايت)
حقيقي 2.9 * 10E-39 .. 1.7 * 10E38 6
أعزب 1.5*10 إي-45 .. 3.4*10إي38 4
مزدوج 5*10E-324 .. 1.7*10E308 8
ممتد 1.9*10E-4951 .. 1.1*10E4932 10

النوع الحقيقي في لغة باسكال هو النوع الحقيقي الأكثر استخدامًا.

تم تقديم أعلاه أنواع البيانات البسيطة في باسكال، والتي تشمل:

  • ترتيبي
  • جميع
  • دعابة الدماغ
  • شخصية
  • قابل للقائمة
  • فاصلة
  • حقيقي

لعرض قيم المتغيرات من النوع الحقيقي، عادة ما يتم استخدام الإخراج المنسق:

  • يستخدم التنسيق إما رقمًا واحدًا، مما يشير إلى عدد المواضع المخصصة لهذا الرقم بالشكل الأسي؛
  • ع:=1234.6789; رايتلن(ص:6:2); (1234.68)

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

    الثوابت في باسكال

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

    يتم الإعلان عن الثابت في لغة باسكال قبل الإعلان عن المتغيرات (قبل كلمة الخدمة var) ويبدو كما يلي:

    مثال على وصف ثابت في باسكال:

    1 2 3 4 5 6 ثابت س= 17 ; فار myname: سلسلة؛ ابدأ اسمي: = "بيتر"؛ writeln("الاسم: "، اسمي،"، العمر: "، x) النهاية.

    ثابت س = 17؛ فار myname:string; ابدأ اسمي:="بيتر"; writeln("الاسم: "،اسمي،"،العمر: "،x) النهاية.

    إخراج "جميل" للأعداد الصحيحة والأعداد الحقيقية

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


    العمليات الحسابية بالباسكال

    ترتيب العمليات

    1. تقييم التعبيرات بين قوسين؛
    2. الضرب، القسمة، div، mod من اليسار إلى اليمين؛
    3. الجمع والطرح من اليسار إلى اليمين.

    الإجراءات والوظائف الحسابية القياسية باسكال

    من المفيد هنا التطرق بمزيد من التفصيل إلى بعض العمليات الحسابية.

    • إن عملية inc في لغة باسكال، والتي تُلفظ بالزيادة، هي عملية باسكال قياسية تعني الزيادة بمقدار واحد.
    • مثال على عملية inc:

      س:=1; المؤتمر الوطني العراقي (خ)؛ (يزيد x بمقدار 1، أي x=2) writeln(x)

      الاستخدام الأكثر تعقيدًا لإجراء inc:
      Inc(x,n) حيث x هو نوع ترتيبي، وn هو نوع عدد صحيح؛ الإجراء Inc الزيادات x بواسطة n.

    • يعمل الإجراء Dec في باسكال بشكل مشابه: Dec(x) - يقلل x بمقدار 1 (إنقاص) أو Dec(x,n) - يقلل x بمقدار n.
    • يمثل عامل القيمة المطلقة معامل الرقم. يعمل مثل هذا:
    • أ: =- 9؛ ب:=أبس(أ); (ب=9)

      أ:=-9؛ ب:=أبس(أ); (ب=9)

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

      فار س:عدد صحيح؛ تبدأ س:=3; writeln(sqr(x)); (الجواب 9) انتهى.

    • عملية الأس في باسكالمفقود على هذا النحو. ولكن من أجل رفع رقم إلى قوة، يمكنك استخدام الدالة EXP.
    • الصيغة هي: exp(ln(a)*n)، حيث a عبارة عن رقم، وn هي الدرجة (a>0).

      ومع ذلك، في مترجم Pascal abc، تكون الأسية أبسط بكثير:

      فار س:عدد صحيح؛ تبدأ س:=9; writeln(sqrt(x)); (الجواب 3) انتهى.

    المهمة 4.أبعاد علبة الثقاب معروفة: الارتفاع - 12.41 سم، العرض - 8 سم، السمك - 5 سم احسب مساحة قاعدة الصندوق وحجمه
    (S=العرض*السُمك، V=المساحة*الارتفاع)

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

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

    الوكالة الفيدرالية للتعليم

    مقال

    "أنواع البيانات في باسكال"

    1. أنواع البيانات

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

    بشكل عام، تتميز لغة Object Pascal ببنية متفرعة من أنواع البيانات (الشكل 1.1). توفر اللغة آلية لإنشاء أنواع جديدة، بحيث يمكن أن يكون إجمالي عدد الأنواع المستخدمة في البرنامج كبيرًا حسب الرغبة.

    تنقسم البيانات المعالجة في البرنامج إلى متغيرات وثوابت وأحرف:

    الثوابت تمثل البيانات التي تم ضبط قيمها في قسم التصريح الثابت ولا تتغير أثناء تنفيذ البرنامج.

    المتغيرات يتم الإعلان عنها في قسم إعلان المتغيرات، ولكن على عكس الثوابت، فإنها تتلقى قيمها أثناء تنفيذ البرنامج، ويمكن تغيير هذه القيم. يمكن الإشارة إلى الثوابت والمتغيرات بالاسم.

    حرفي ليس له معرف ويتم تمثيله مباشرة بالقيمة الموجودة في نص البرنامج.

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

    يقدم هذا والفصول الأربعة اللاحقة وصفًا تفصيليًا لكل نوع.

    1.1 أنواع بسيطة

    تتضمن الأنواع البسيطة الأنواع الترتيبية والحقيقية والتاريخية.

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

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

    نوع التاريخ والوقتمصممة لتخزين التاريخ والوقت. في الواقع، يستخدم التنسيق الحقيقي لهذه الأغراض.

    1.1.1 الأنواع الترتيبية

    تتضمن الأنواع الترتيبية (انظر الشكل 1.1) الأنواع الصحيحة والمنطقية والحرفية والمعدادة والنطاقية. يمكن تطبيق الدالة Ord(x) على أي منها، مما يُرجع الرقم الترتيبي لقيمة التعبير X.


    أرز. 1.1 - هيكل نوع البيانات

    ل جميعالأنواع، فإن الدالة ord(x) ترجع قيمة x نفسها، أي Ord(X) = x لـ x ينتمي إلى أي جميعيكتب. تطبيق Ord(x) على منطقي , رمزية ولا تعد ولا تحصىالأنواع تعطي عددًا صحيحًا موجبًا في النطاق من 0 إلى 1 ( نوع منطقي)، من 0 إلى 255 ( رمزي)، من 0 إلى 65535 ( لا تعد ولا تحصى). نطاق النوعيحافظ على جميع خصائص النوع الترتيبي الأساسي، وبالتالي فإن نتيجة تطبيق الدالة ord(x) عليه تعتمد على خصائص هذا النوع.

    يمكنك أيضًا تطبيق الوظائف على الأنواع الترتيبية:

    بريد (خ)- تُرجع القيمة السابقة للنوع الترتيبي (القيمة التي تتوافق مع الرقم الترتيبي ord(x) -1، أي ord(pred(x)) = ord(x) - 1;

    نجاح (خ)- تُرجع القيمة التالية من النوع الترتيبي، الذي يتوافق مع الرقم الترتيبي ord(x) +1، أي ord(Succ(x)) = ord(x) + 1.

    على سبيل المثال، إذا قام البرنامج بتعريف متغير

    فإن الدالة PRED(c) سترجع الحرف "4"، وسترجع الدالة SUCC(c) الحرف "6".

    إذا تخيلنا أي نوع ترتيبي كمجموعة مرتبة من القيم تتزايد من اليسار إلى اليمين وتحتل مقطعًا معينًا على محور الرقم، فلن يتم تعريف الدالة pred(x) للطرف الأيسر، ويكون succ (x) لم يتم تعريفه للنهاية اليمنى لهذا الجزء.

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

    الجدول 1.1 - أنواع الأعداد الصحيحة

    اسم الطول، بايت مدى من القيم
    أساسي 4 0. .. 2 147 483 647
    بايت 1 0...255
    اختصار 1 -128...+127
    سمولينت 2 -32 768...+32 767
    كلمة 2 0...65 535
    عدد صحيح 4
    لونجينت 4 -2 147 483 648...+2 147 483 647
    كثافة العمليات64 8 -9*1018...+9*1018
    كلمة طويلة 4 0. . .4 294 967 295

    أنواع كلمة طويلةو كثافة العمليات64تم تقديمها لأول مرة في الإصدار 4، والأنواع سمولينتو أساسيغير متوفر في دلفي 1. اكتب عدد صحيحبالنسبة لهذا الإصدار، يستغرق الأمر 2 بايت وله نطاق قيمة من -32768 إلى +32767، أي نفس الشيء سمولينت .

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

    وترد في الجدول قائمة الإجراءات والوظائف المطبقة على الأنواع الصحيحة. 1.2. تشير الحروف b، s، w، i، l إلى تعبيرات من الأنواع التالية: بايت , Shortint، Word، عدد صحيح وLongint ,

    x هو تعبير عن أي من هذه الأنواع؛ تشير الحروف vb، vs، vw، vi، vl، vx إلى متغيرات من الأنواع المقابلة. تتم الإشارة إلى المعلمة الاختيارية بين قوسين مربعين.

    الجدول 1.2 - الإجراءات والوظائف القياسية المطبقة على الأنواع بأكملها

    جاذبية نوع النتيجة فعل
    القيمة المطلقة (خ) س إرجاع الوحدة x
    مركز حقوق الإنسان (ب) شار إرجاع حرف حسب الكود الخاص به
    ديسمبر (vx[،i]) - يقلل قيمة vx بمقدار i، وفي غياب i - بمقدار 1
    المؤتمر الوطني العراقي (VX [، أنا]) - تزيد قيمة vx بمقدار i، وفي غياب i - بمقدار 1
    مرحبا (ث) بايت إرجاع القوس الأعلى للوسيطة
    مرحبا انا) نفس إرجاع البايت الثالث
    لو (ط) إرجاع البايت المنخفض للوسيطة
    قليل) نفس
    غريب (ل) منطقية إرجاع True إذا كانت الوسيطة رقمًا فرديًا
    عشوائي (ث) نفس المعلمة إرجاع رقم عشوائي زائف موزع بشكل موحد في النطاق 0...(w-l)
    جذر (خ) X إرجاع مربع الوسيطة
    مبادلة (ط) عدد صحيح مبادلة بايت في كلمة واحدة
    مبادلة (ث) كلمة نفس

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

    أنواع منطقية . تشمل الأنواع المنطقية منطقية، بايت بول، بول، وورد بولو LongBool. في لغة باسكال القياسية، يتم تعريف النوع فقط منطقية، يتم تقديم أنواع منطقية أخرى في Object Pascal للتوافق مع Windows: الأنواع منطقيةو بايتبولكل منها يأخذ بايت واحد، بولو WordBool- 2 بايت لكل منهما، LongBool- 4 بايت. يمكن أن تكون القيم المنطقية إحدى الثوابت المعلنة مسبقًا False أو True.

    نظرًا لأن النوع المنطقي هو نوع ترتيبي، فيمكن استخدامه في بيان حلقة من النوع القابل للعد. في دلفي 32 ل منطقيةمعنى

    الترتيب (صحيح) = +1، بينما بالنسبة للأنواع الأخرى ( بول، ووردبولإلخ.)

    Ord(True) = -1، لذلك يجب استخدام هذه الأنواع من العوامل بحذر! على سبيل المثال، بالنسبة لإصدار دلفي 6، عبارة showMessage(" --- ") القابلة للتنفيذ في الحلقة التالية للن يتم تنفيذه أبداً:

    لـ L:= خطأ إلى صحيح افعل

    اظهر الرسالة("--)؛

    إذا قمنا باستبدال معلمة الحلقة من النوع L في المثال السابق بـ منطقيةسيتم تشغيل الحلقة وستظهر الرسالة على الشاشة مرتين. [بالنسبة لإصدارات دلفي 1 و2 ord (True) =+1 لأي ​​نوع منطقي.]

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

    للتشفير في نظام التشغيل Windows، يتم استخدام رمز ANSI (سمي على اسم المعهد الوطني الأمريكي للمعايير، وهو معهد التقييس الأمريكي الذي اقترح هذا الرمز). النصف الأول من أحرف الكمبيوتر الشخصي مع الرموز 0...127 يتوافق مع الجدول 1.3. النصف الثاني من الأحرف ذات الرموز 128...255 يختلف باختلاف الخطوط. تستخدم خطوط Windows القياسية Arial Cyr وCourier New Cyr وTimes New Roman آخر 64 رمزًا (من 192 إلى 256) لتمثيل الأحرف السيريلية (بدون الحروف "ё" و"Ё"): "A"... "Z" هي القيم المشفرة 192..223، "a"... "i" - 224...255. الرمزان "Ё" و"е" لهما الرمزان 168 و184 على التوالي.

    الجدول 1.3 - ترميز الأحرف وفقًا لمعيار ANSI

    شفرة رمز شفرة. رمز شفرة. رمز شفرة رمز
    0 NUL 32 ب.ل. 64 @ 96 "
    1 منطقة 33 ! 65 أ 97 أ
    2 اس تي اكس 34 66 في 98 ب
    3 إيتكس 35 # 67 مع 99 مع
    4 محكمة تكافؤ الفرص 36 $ 68 د 100 د
    5 إن كيو 37 % 69 ه 101 ه
    6 أك 38 & 70 F 102 F
    7 بيل 39 " 71 ز 103 د
    8" ب.س. 40 ( 72 ن 104 ح
    9 إتش تي 41 ) 73 أنا 105 أنا
    10 LF 42 * 74 ج 106 ي
    11 VT 43 + 75 ل 107 ك
    12 FF 44 F 76 ل 108 1
    13 سجل تجاري 45 - 77 م 109 م
    14 لذا 46 78 ن 110 ن
    15 إس.آي. 47 / 79 0 111 يا
    16 ديل 48 0 80 ر 112 ص
    17 DC1 49 1 81 س 113 س
    18 DC2 50 2 82 ر 114 ص
    19 DC3 51 3 83 س 115 س
    20 العاصمة 4 52 4 84 ت 116 ر
    21 ن.ك. 53 5 85 ش 117 ش
    22 مزامنة 54 6 86 الخامس 118 الخامس
    23 إي تي بي 55 7 87 دبليو 119 دبليو
    24 يستطيع 56 8 88 X 120 س
    25 م. 57 9 89 ي 121 ش
    26 الفرعية 58 : 90 ز .122 ض
    27 خروج 59 ; 91 ر 123 {
    28 خ.س 60 < 92 \ 124 1
    29 جي إس. 61 = 93 ] 125 }
    30 ر.س. 62 > 94 ل 126 ~
    31 نحن 63 F 95 127 ص

    تشير الأحرف ذات الرموز 0...31 إلى رموز الخدمة. إذا تم استخدام هذه الرموز في نص أحرف البرنامج، فسيتم اعتبارها مسافة بيضاء.

    لكتابة شارالعمليات العلائقية قابلة للتطبيق، بالإضافة إلى الوظائف المضمنة:

    شار (ج)- اكتب وظيفة شار; تحويل التعبير إلى الكتابة بايتإلى رمز وإعادته بقيمته؛

    UpCase(CH)- اكتب وظيفة شار; يتم إرجاع حرف كبير إذا كان сн حرفًا لاتينيًا صغيرًا، وإلا يتم إرجاع الرمز сн نفسه (بالنسبة إلى السيريلية، يتم إرجاع الحرف الأصلي).

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

    الألوان = (الأحمر، الأبيض، الأزرق)؛

    استخدام الأنواع المذكورة يجعل البرامج أكثر وضوحًا.

    يتم إنشاء المراسلات بين قيم النوع المعدود والأرقام الترتيبية لهذه القيم من خلال ترتيب التعداد: القيمة الأولى في القائمة تتلقى الرقم الترتيبي 0، والثاني - 1، وما إلى ذلك. النوع المُعدَّد هو 65536 قيمة، لذلك في الواقع يحدد النوع المُعدَّد مجموعة فرعية من النوع بأكمله كلمةويمكن اعتباره إعلانًا مدمجًا لمجموعة من الثوابت الصحيحة ذات القيم 0، 1، إلخ.

    يؤدي استخدام الأنواع المذكورة إلى زيادة موثوقية البرامج من خلال السماح لك بالتحكم في القيم التي تتلقاها المتغيرات المقابلة. يسمح Object Pascal بالتحويل العكسي: أي تعبير من النوع كلمةيمكن تحويلها إلى قيمة من النوع المعداد ما لم تتجاوز قيمة تعبير العدد الصحيح أصل هذا النوع. يتم تحقيق هذا التحويل باستخدام دالة معلنة تلقائيًا باسم النوع المذكور.

    نطاق النوع . نوع النطاق هو مجموعة فرعية من نوعه الأساسي، والذي يمكن أن يكون أي نوع ترتيبي باستثناء نوع النطاق.

    يتم تعريف نوع النطاق من خلال حدود قيمه ضمن النوع الأساسي:

    <мин.знач.>..<макс.знач.>

    هنا<мин. знач. >- الحد الأدنى لقيمة نطاق النوع؛<макс. знач. >- قيمته القصوى.

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

    عند تحديد نوع النطاق، يجب عليك اتباع القواعد التالية:

    يتم التعامل مع حرفين ".." كحرف واحد، لذا لا يُسمح بالمسافات بينهما؛ يجب ألا تتجاوز الحدود اليسرى للنطاق حدوده اليمنى.

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

    تتضمن مكتبة Object Pascal القياسية وظيفتين تدعمان العمل مع أنواع النطاق:

    عالي(x)- إرجاع القيمة القصوى لنوع النطاق الذي ينتمي إليه المتغير x؛

    منخفض (س)- إرجاع الحد الأدنى لقيمة نوع النطاق.

    1.1.2 الأنواع الحقيقية

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

    الجدول 1.4 - الأنواع الحقيقية

    في الإصدارات السابقة من دلفي 1...3 اكتب حقيقيتشغل 6 بايت ولها نطاق من القيم من 2.9*10-39 إلى 1.7*1038. في الإصدارين 4 و5، يكون هذا النوع مكافئًا للنوع مزدوج. إذا لزم الأمر (لأسباب التوافق) استخدم 6 بايت حقيقي، فأنت بحاجة إلى تحديد توجيه المترجم (التوافق التسلسلي).

    كما يتبين من الجدول. 1.4، يشغل الرقم الحقيقي في Object Pascal من 4 إلى 10 بايتات متجاورة وله البنية التالية في ذاكرة الكمبيوتر.

    هنا s هو رقم إشارة الرقم؛ ه - الجزء الأسي. يحتوي على ترتيب ثنائي. م هو الجزء العشري من الرقم.

    الجزء العشريم يبلغ طوله 23 (ل أعزب) حتى 63 (ل ممتد) بتات ثنائية، مما يضمن دقة تبلغ 7...8 ل أعزبو19...20 ل ممتدأرقام عشرية. يتم وضع العلامة العشرية (الفاصلة) قبل الرقم الأيسر (الأكثر أهمية) للجزء العشري، ولكن عند العمل على رقم، يتم نقل موضعها إلى اليسار أو اليمين وفقًا للترتيب الثنائي للرقم المخزن في الجزء الأسي لذلك تسمى العمليات على الأعداد الحقيقية حساب النقطة العائمة (الفاصلة).

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

    تحتل الأنواع موقعًا خاصًا في Object Pascal شركاتو عملة، والتي يتم التعامل معها على أنها أرقام حقيقية ذات أجزاء كسرية ذات طول ثابت: in شركاتالجزء الكسري يبلغ طوله 0 رقم، أي أنه ببساطة غائب عملةطول الجزء الكسري هو 4 منازل عشرية. في الواقع، يحدد كلا النوعين عددًا صحيحًا كبيرًا موقّعًا يخزن 19...20 رقمًا عشريًا مهمًا (داخليًا يشغلون 8 بايت متجاورة). وفي الوقت نفسه، في التعبيرات شركاتو عملةمتوافقة تمامًا مع أي أنواع حقيقية أخرى: يتم تعريف جميع العمليات الحقيقية عليها، ويمكن استخدامها كوسائط للوظائف الرياضية، وما إلى ذلك. مجال التطبيق الأكثر ملاءمة لهذه الأنواع هو الحسابات المحاسبية.

    1.1.3 نوع التاريخ والوقت

    يتم تعريف نوع التاريخ والوقت بواسطة معرف قياسي TDateTimeوهو مصمم لتخزين التاريخ والوقت في وقت واحد. في التمثيل الداخلي يستغرق 8 بايت وما شابه ذلك عملةهو رقم حقيقي بجزء كسري ثابت: الجزء الصحيح من الرقم يخزن التاريخ، والجزء الكسري يخزن الوقت. يتم تعريف التاريخ على أنه عدد الأيام التي مرت منذ 30 ديسمبر 1899، والوقت على أنه جزء من اليوم الذي مر منذ 0 ساعة، وبالتالي فإن القيمة 36444.837 تتوافق مع التاريخ 11/10/1999 والوقت 20:05. يمكن أن يكون عدد الأيام سالبًا، ولكن القيم الأصغر من -693594 (الموافق للتاريخ 00.00.0000 من ميلاد المسيح) يتم تجاهلها بواسطة وظائف تحويل التاريخ إلى نوع سلسلة.

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

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

    1.2 الأنواع المنظمة

    يتميز أي من الأنواع المهيكلة (وفي Object Pascal هناك أربعة منها: المصفوفات والسجلات والمجموعات والملفات) بتعدد العناصر التي تشكل هذا النوع. كل عنصر، بدوره، يمكن أن ينتمي إلى نوع منظم، مما يسمح لنا بالحديث عن التداخل المحتمل للأنواع. يسمح Object Pascal بعمق تعسفي لتداخل الأنواع، لكن الطول الإجمالي لأي منها في التمثيل الداخلي يجب ألا يتجاوز 2 جيجابايت.

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

    1.2.1 المصفوفات

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

    يتم تحديد وصف نوع المصفوفة على النحو التالي:

    <имя типа>= مصفوفة[<сп.инд.типов>] ل<тип>;

    هنا<имя типа>- المعرف الصحيح؛ مصفوفة من- الكلمات المحجوزة (صفيف، من)؛<сп.инд.типов>- قائمة بنوع واحد أو أكثر من أنواع الفهرس، مفصولة بفواصل؛ تعتبر الأقواس المربعة التي تؤطر القائمة من متطلبات بناء الجملة؛<тип>- أي نوع من كائن باسكال.

    يمكن استخدام أي أنواع ترتيبية بسعة لا تزيد عن 2 جيجابايت كأنواع فهرس في Object Pascal (أي باستثناء كلمة طويلةو كثافة العمليات64)

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

    في Object Pascal، يمكنك استخدام عامل إسناد واحد لنقل جميع عناصر مصفوفة واحدة إلى مصفوفة أخرى من نفس النوع.

    1.2.2 السجلات

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

    هيكل إعلان نوع المنشور هو:

    <имятипа>=سجل<сп.полей>نهاية؛

    هنا<имя типа>- المعرف الصحيح؛ سجل/ نهاية- الكلمات المحجوزة (سجل، نهاية)؛<сп.полей>- قائمة الحقول. عبارة عن سلسلة من أقسام السجل مفصولة بفاصلة منقوطة.

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

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

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

    1.2.3 مجموعات

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

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

    وصف نوع المجموعة هو:

    <имя типа>= مجموعة من<базовый тип>;

    هنا<имя типа>- المعرف الصحيح؛ مجموعة من- الكلمات المحجوزة (مجموعة، من)؛<базовый тип>- النوع الأساسي لعناصر المجموعة، والتي يمكن أن تكون أي نوع ترتيبي، باستثناء كلمة، عدد صحيح، لونجينت، Int64 .

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

    الهيكل الداخلي للمجموعة بحيث يتم تخصيص رقم ثنائي واحد لكل عنصر من عناصرها (بت واحد)؛ إذا تم تضمين عنصر في مجموعة، فإن البت المقابل له قيمة 1، وإلا - 0. وفي الوقت نفسه، الحد الأدنى لوحدة الذاكرة هو بايت واحد يحتوي على 8 بتات، لذلك خصص المترجم بايت واحد للمجموعات، و ونتيجة لذلك أصبحت قوة كل منهم متساوية 8 عناصر. السعة القصوى للمجموعة هي 256 عنصرًا. لمثل هذه المجموعات، يخصص المترجم 16 بايت متجاورة.

    وتجربة أخرى: قم بتغيير نطاق النوع الأساسي إلى 1..256. على الرغم من أن سعة هذا النوع هي 256 عنصرًا، إلا أنه عند محاولة ترجمة برنامج، سيبلغ المترجم عن الخطأ: قد تحتوي المجموعات على 256 عنصرًا على الأكثر لأن ترقيم عناصر المجموعة يبدأ من الصفر بغض النظر عن الحد الأدنى المعلن في البرنامج. يسمح المترجم بالاستخدام كنوع أساسي لنوع نطاق صحيح بحد أدنى 0 وحد أقصى 255، أو أي نوع معدود لا يزيد عن 256 عنصرًا (الحد الأقصى لعدد العناصر للنوع المعدود هو 65536 عنصرًا).

    1.3 سلاسل

    يتم استخدام الأنواع التالية لمعالجة النص في Object Pascal:

    سلسلة قصيرة ShortStringأو سلسلة [ن]، حيث ن<= 255;

    سلسلة طويلة خيط ;

    خط عريض سلسلة واسعة ;

    سلسلة محطة فارغة pchar .

    القاسم المشترك بين هذه الأنواع هو أن كل سلسلة يتم التعامل معها على أنها مصفوفة أحادية البعد من الأحرف، حيث يمكن أن يتغير عدد الأحرف فيها في برنامج قيد التشغيل: بالنسبة للسلسلة [n]، يتغير طول السلسلة من 0 إلى n، بالنسبة إلى خيطو pchar- من 0 إلى 2 جيجا بايت.

    يستخدم لغة باسكال القياسية سلاسل قصيرة فقط سلسلة [ن]. في الذاكرة، يتم تخصيص هذه السلسلة بعدد n+i بايت، ويحتوي البايت الأول على الطول الحالي للسلسلة، وتقع الأحرف نفسها بدءًا من البايت الثاني. وبما أن طول السلسلة في هذه الحالة هو بايت واحد، فلا يمكن أن يتجاوز الحد الأقصى لطول السلسلة القصيرة 255 حرفًا. يتم استخدام النوع القياسي للإعلان عن سلسلة قصيرة ذات أقصى طول سلسلة قصيرة(مقابل خيط).

    يستخدم نظام التشغيل Windows على نطاق واسع السلاسل الطرفية الخالية، وهي عبارة عن سلاسل من الأحرف مفصولة بالحرف #o. الحد الأقصى لطول هذه السلسلة يقتصر فقط على الذاكرة المتوفرة ويمكن أن يكون كبيرًا جدًا.

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

    1.4 المؤشرات والذاكرة الديناميكية

    1.4.1 الذاكرة الديناميكية

    الذاكرة الديناميكية- هذه هي ذاكرة الوصول العشوائي للكمبيوتر الشخصي المتوفرة للبرنامج أثناء تشغيله. يعني وضع البيانات الديناميكية استخدام الذاكرة الديناميكية مباشرة أثناء تشغيل البرنامج. في المقابل، يتم إجراء التخصيص الثابت بواسطة مترجم Object Pascal عندما يتم ترجمة البرنامج. مع الوضع الديناميكي، لا يُعرف نوع ولا كمية البيانات التي سيتم وضعها مسبقًا.

    1.4.2 المعالم

    PC RAM عبارة عن مجموعة من الخلايا لتخزين المعلومات - بايت، لكل منها رقم خاص بها. تسمى هذه الأرقام بالعناوين، فهي تسمح لك بالوصول إلى أي بايت من الذاكرة. يوفر Object Pascal للمبرمج وسيلة مرنة لإدارة الذاكرة الديناميكية - ما يسمى بالمؤشرات. المؤشر هو متغير يحتوي على عنوان بايت من الذاكرة كقيمة له. باستخدام المؤشرات، يمكنك وضع أي من أنواع البيانات المعروفة في Object Pascal في الذاكرة الديناميكية. البعض منهم فقط ( بايت، شار، ShortInt، منطقية) تشغل بايتًا واحدًا في التمثيل الداخلي، والباقي - عدة بايتات مجاورة. لذلك، يعالج المؤشر فعليًا البايت الأول فقط من البيانات.

    عادةً ما يرتبط المؤشر ببعض أنواع البيانات. سوف نسمي هذه المؤشرات المكتوبة. للإعلان عن مؤشر مكتوب، استخدم الرمز ^، الموجود أمام النوع المقابل.

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

    سيتم استدعاء المؤشرات من هذا النوع غير مكتوبة. نظرًا لأن المؤشرات غير المكتوبة غير مرتبطة بنوع معين، فيمكن استخدامها لتخصيص البيانات ديناميكيًا والتي يتغير هيكلها ونوعها أثناء تشغيل البرنامج.

    كما ذكرنا سابقًا، فإن قيم المؤشرات هي عناوين المتغيرات في الذاكرة، لذلك تتوقع إمكانية تمرير قيمة مؤشر إلى آخر. في الواقع، هذا ليس صحيحا. في Object Pascal، يمكنك فقط تمرير القيم بين المؤشرات المرتبطة بنفس نوع البيانات.

    1.4.3 تخصيص وتحرير الذاكرة الديناميكية

    يتم التعامل مع كافة الذاكرة الديناميكية في Object Pascal على أنها مجموعة مستمرة من البايتات، والتي تسمى الكومة.

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

    يمكن استخدام البيانات المخصصة ديناميكيًا في أي مكان في البرنامج حيث تكون صالحة للثوابت والمتغيرات من النوع المناسب

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

    التخلص (بي جي)؛

    التخلص (العلاقات العامة)؛

    سيعود إلى الكومة الذاكرة التي تم تخصيصها مسبقًا لمؤشرات pJ وpR (انظر أعلاه).

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

    1.5 كتابة الأسماء المستعارة

    لأي نوع يمكنك الإعلان عن أي عدد تريده من الأسماء المستعارة. على سبيل المثال:

    TMyInteger = Integer;

    في المستقبل، يمكن استخدام الاسم المستعار بنفس طريقة استخدام النوع الأساسي:

    Mylnt: TMyInteger;

    Mylnt:= 2*Round(pi);

    تُستخدم هذه الأنواع من الأسماء المستعارة عادةً لتحسين رؤية رمز البرنامج. ومع ذلك، في Object Pascal يمكنك الإعلان عن الأسماء المستعارة المكتوبة بقوة عن طريق إضافة نوع الكلمة المحجوزة قبل اسم النوع الأساسي:

    TMyIntegerType = نوع عدد صحيح؛

    MylntVar: TMyIntegerType;

    من وجهة نظر المترجم، تتوافق الأسماء المستعارة المكتوبة مع النوع الأساسي في أنواع مختلفة من التعبيرات، ولكنها تعلن في الواقع عن نوع بيانات جديد، لذلك لا يمكن استخدامها كمعلمات رسمية لاستدعاء الإجراءات الفرعية بدلاً من النوع الأساسي. إذا، على سبيل المثال، تم الإعلان عن الإجراء

    وظيفة MylntFunc(APar: عدد صحيح): عدد صحيح؛

    ثم مثل هذا النداء لها

    ميلنتفونك (ميلنتفار)

    سيتم اعتبارها خاطئة من قبل المترجم.

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

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

    كما هو الحال في لغات البرمجة عالية المستوى الأخرى، تم تحسين أنواع المتغيرات في باسكال لأداء مهام من أنواع مختلفة، ولها نطاق مختلف من القيم والأطوال بالبايت.

    تقسيم الأنواع المتغيرة

    تنقسم أنواع المتغيرات في باسكال إلى بسيطة ومنظمة. تشمل الأنواع البسيطة الأنواع الحقيقية والترتيبية. وتشمل تلك المنظمة المصفوفات والسجلات والمجموعات والملفات. بشكل منفصل، يتم تمييز المؤشرات والكائنات والأنواع الإجرائية.

    دعونا نلقي نظرة على الأنواع الترتيبية والحقيقية. تتضمن الأنواع الترتيبية 5 أنواع من الأعداد الصحيحة ونوع التعداد ونوع النطاق.

    الأنواع الترتيبية

    هناك 5 أنواع من الأعداد الصحيحة، تختلف في طول البايت ونطاق القيم.

    طول البايت وShortInt هو 1 بايت. الفرق بينهما هو أن Byte يخزن القيم غير السالبة فقط، بينما يسمح لك ShortInt بتخزين القيم السالبة (من -128 إلى +127). يرتبط نوعي Word وInteger ببعضهما البعض بطريقة مماثلة، مع الاختلاف الوحيد وهو أن حجمهما هو 2 بايت.

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

    من المهم أن نفهم أن الصفر يشغل مساحة كبيرة من الذاكرة كأي رقم آخر. وبالتالي، عند تكوين نطاق من القيم، سيكون الحد الأدنى للرقم السالب في القيمة المطلقة أكبر بمقدار واحد من الرقم الموجب: على سبيل المثال، من -128 إلى +127.

    يمكن أن تأخذ المتغيرات التابعة لها القيمة TRUE (صحيح) أو FALSE (خطأ) وتتطلب بايت واحد من الذاكرة.

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

    أنواع حقيقية

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

    وفقًا للترتيب الموضح أعلاه، سيشغل المتغير من كل نوع 4 أو 6 أو 8 أو 10 بايت.

    المصفوفات

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

    سلسلة = صفيف شار؛

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

    يتيح نطاق المؤشرات المكتوبة الوصول إلى كل عنصر محدد في المصفوفة:

    في هذه الحالة، نقرأ العنصر الثاني من المصفوفة Y التي تم إنشاؤها مسبقًا.

    تعد متغيرات السلسلة في باسكال أيضًا حالة خاصة لمصفوفة أحادية البعد، لأن السلسلة عبارة عن سلسلة من الأحرف، أي عناصر من نوع char.

    دعامات

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

    اكتب NTel = سجل

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

    وأخيراً، في السطر الأخير قمنا بتعريف المتغير One، وهو من النوع NTel.

    يمكنك الوصول إلى السجل ككل ومكوناته الفردية، على سبيل المثال: one.NAME (أي متغير_اسم.سجل_فيلد_اسم).

    ملفات

    يتيح لك Pascal العمل مع النصوص والملفات المكتوبة وغير المكتوبة، وهي عبارة عن تسلسل منظم للمكونات التي لها نفس النوع.

    عند القراءة من ملف أو الكتابة إليه، يمكن استخدام العنوان الكامل أو شكله القصير:

    "C:\Folder\File2.txt"

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

    يمكنك تعيين متغير نوع الملف على النحو التالي:

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

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

    أخيراً

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

    تتضمن الأنواع الترتيبية (انظر الشكل 4.1) أنواع الأعداد الصحيحة والمنطقية والحرفية والمعدادة والنطاقية. تنطبق الدالة ORD(X) على أي منها، حيث تقوم بإرجاع الرقم الترتيبي لقيمة التعبير X. بالنسبة للأنواع الصحيحة، تقوم الدالة ORD(X) بإرجاع قيمة X نفسها، أي. ORD(X) = X لـ X التي تنتمي إلى أي نوع من أنواع الصدفة. يؤدي تطبيق ORD(X) على الأنواع المنطقية والحروف والتعداد إلى إنتاج عدد صحيح موجب في النطاق من 0 إلى 1 (منطقي)، ومن 0 إلى 155 (حرف)، ومن 0 إلى 65535 (تعداد). يحتفظ نوع النطاق بجميع خصائص النوع الترتيبي الأساسي، وبالتالي فإن نتيجة تطبيق الدالة ORD(X) عليه تعتمد على خصائص هذا النوع.

    يمكنك أيضًا تطبيق الوظائف على الأنواع الترتيبية:

    PRED (X) - تُرجع القيمة السابقة للنوع الترتيبي (القيمة التي تتوافق مع الرقم الترتيبي ORD(X) - 1)، أي.

    ORD(PRED(X)) = ORD(X) - 1;

    SUCC (X) - تُرجع القيمة الترتيبية التالية التي تطابق الرقم الترتيبي ORD(X) +1، أي.

    ORD(SUCC(X)) = ORD(X) + 1.

    على سبيل المثال، إذا قام البرنامج بتعريف متغير

    ثم سترجع الدالة PRED(C) القيمة "4"، وسترجع الدالة SUCC(C) القيمة "6".

    إذا تخيلنا أي نوع ترتيبي كمجموعة مرتبة من القيم، تتزايد من اليسار إلى اليمين وتحتل مقطعًا معينًا على محور الرقم، فلن يتم تعريف الدالة PRED(X) لليسار، وSUCC(X) لليمين نهاية هذا الجزء.

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

    الجدول 4.1

    عند استخدام الإجراءات والوظائف ذات المعلمات الصحيحة، يجب أن تسترشد بـ "تداخل" الأنواع، أي. أينما يمكن استخدام WORD، يمكن استخدام BYTE (ولكن ليس العكس)، وLONGINT "يتضمن" عددًا صحيحًا، والذي بدوره يتضمن SHORTINT.

    وترد قائمة الإجراءات والوظائف المطبقة على أنواع الأعداد الصحيحة في الجدول 4.2. حروف ب، ق، ث، ط، ليتم تحديد التعبيرات من النوع BYTE وSHORTINT وWORD وINTEGER وLONGINT، على التوالي، x هو تعبير عن أي من هذه الأنواع؛ حروف vb، vs، vw، vi، vl، vxتشير إلى متغيرات الأنواع المقابلة. تتم الإشارة إلى المعلمة الاختيارية بين قوسين مربعين.

    الجدول 4.2

    الإجراءات والوظائف القياسية المطبقة على الأنواع بأكملها
    جاذبية نوع النتيجة فعل
    القيمة المطلقة (خ) س إرجاع الوحدة x
    مركز حقوق الإنسان (ب) شار إرجاع حرف حسب الكود الخاص به
    ديسمبر (vx[، i]) - يقلل قيمة vx بمقدار i، وفي غياب i - بمقدار 1
    المؤتمر الوطني العراقي (VX [، أنا]) - تزيد قيمة vx بمقدار i، وفي غياب i - بمقدار 1
    مرحبا انا) بايت إرجاع البايت العالي للوسيطة
    مرحبا (ث) نفس نفس
    لو (ط) " إرجاع البايت المنخفض للوسيطة
    قليل) " نفس
    غريب (ل) منطقية إرجاع True إذا كانت الوسيطة رقمًا فرديًا
    عشوائي (ث) نفس المعلمة إرجاع رقم عشوائي زائف موزع بشكل موحد في النطاق 0...(w-l)
    سنجر (خ) X إرجاع مربع الوسيطة
    مبادلة (ط) عدد صحيح مبادلة بايت في كلمة واحدة
    مبادلة (ث) كلمة

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

    أ:= 32767; (أقصى قيمة عددية ممكنة)

    س:= أ + 2؛ (تجاوز الحد أثناء تقييم هذا التعبير !}

    y:= LongInt(a)+2; (لا يوجد تجاوز بعد إرسال المتغير إلى نوع أكثر قوة)

    رايت لين (س:10:0، ص:10:0)

    نتيجة لتشغيل البرنامج نحصل عليه

    نوع منطقي. يمكن أن تكون القيم المنطقية إحدى الثوابت المعلنة مسبقًا FALSE (خطأ) أو TRUE (صحيح). تنطبق عليهم القواعد التالية:

    خطأ شنيع< True;

    succ(False)= صحيح;

    بريد (صحيح) = خطأ.

    نظرًا لأن النوع المنطقي هو نوع ترتيبي، فيمكن استخدامه في عامل نوع قابل للعد، على سبيل المثال:

    لـ 1:= من الخطأ إلى الصحيح ....

    نوع الحرف.قيمة نوع الحرف هي مجموعة كافة أحرف الكمبيوتر. يتم تعيين عدد صحيح لكل حرف في النطاق 0...255. يعمل هذا الرقم كرمز للتمثيل الداخلي للرمز؛ ويتم إرجاعه بواسطة الدالة ORD.

    يتم استخدام رمز ASCII للتشفير ( الكود القياسي الأمريكي لتبادل المعلومات- الكود الأمريكي القياسي لتبادل المعلومات). هذا رمز 7 بت، أي. يمكنه تشفير 128 حرفًا فقط في النطاق من 0 إلى 127. وفي الوقت نفسه، في البايت 8 بت المخصص لتخزين حرف في Turbo Pascal، يمكنك تشفير ضعف عدد الأحرف في النطاق من 0 إلى 255. النصف الأول من أحرف الكمبيوتر الشخصي مع الرموز 0...127 يتوافق مع معيار ASCII (الجدول 4.3). النصف الثاني من الأحرف ذات الرموز 128...255 لا يقتصر على الإطار الصارم للمعيار ويمكن تغييره على أنواع مختلفة من أجهزة الكمبيوتر (يوضح الملحق 2 بعض خيارات التشفير الشائعة لهذه الأحرف).

    الجدول 4.3

    ترميز الأحرف وفقًا لمعيار ASCII
    شفرة رمز شفرة رمز شفرة رمز شفرة رمز
    NUL ب.ل. ® "
    منطقة ! أ أ
    اس تي اكس " في ب
    إيتكس # مع مع
    محكمة تكافؤ الفرص $ د د
    إن كيو % ه ه
    بسأل & F F
    بيل " ز ز
    ب.س. ( ح ح
    NT ) أنا أنا
    LF * ج ي
    VT + ك ك
    FF , ل أنا
    سجل تجاري - م م
    لذا . ن ن
    إس.آي. / عن
    ديل ص ص
    DC1 س س
    DC2 ر ص
    DC3 س س
    DC4 ت ر
    ن.ك. ش ش
    مزامنة الخامس الخامس
    إي تي بي ث ث
    يستطيع X X
    م. ش ش
    الفرعية : ض ض
    خروج / [ {
    خ.س < \ ل
    جي إس. = ] }
    ر.س. > ^ ~
    نحن ? - ن

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

    رمز شفرة معنى
    بيل يتصل؛ يكون عرض هذا الرمز مصحوبًا بإشارة صوتية
    NT الجدولة الأفقية؛ عند عرضه على الشاشة، يحرك المؤشر إلى موضع يكون من مضاعفات 8 زائد 1 (9، 17، 25، إلخ.)
    LF ترجمة الخط؛ عند عرضه على الشاشة، سيتم إخراج جميع الأحرف اللاحقة بدءًا من نفس الموضع، ولكن في السطر التالي
    VT علامة تبويب عمودية؛ وعند عرضه على الشاشة يتم استبداله بحرف خاص
    FF تشغيل الصفحة؛ عند الإخراج إلى الطابعة، فإنه يشكل صفحة؛ وعند الإخراج إلى الشاشة، يتم استبداله بحرف خاص
    سجل تجاري إرجاع؛ يتم إدخاله عن طريق الضغط على مفتاح Enter (عند الإدخال باستخدام READ أو READLN، فهذا يعني أمر "Enter" ولا يتم وضعه في المخزن المؤقت للإدخال؛ وعند الإخراج، يعني أمر "متابعة الإخراج من بداية السطر الحالي")
    الفرعية نهاية الملف؛ يتم الدخول من لوحة المفاتيح بالضغط على Ctrl-Z؛ عند الإخراج يتم استبداله بعلامة خاصة
    التعاون بين بلدان الجنوب نهاية العمل؛ يتم إدخاله من لوحة المفاتيح بالضغط على مفتاح ESC؛ عند الإخراج يتم استبداله بعلامة خاصة

    تنطبق العمليات العلائقية، بالإضافة إلى الوظائف المضمنة، على نوع CHAR: СНR(В) - وظيفة من نوع CHAR؛ تحويل تعبير B من النوع BYTE إلى حرف وإرجاعه بقيمته؛

    UPCASE(CH) - وظيفة نوع CHAR؛ يتم إرجاع الحرف الكبير إذا كان CH حرفًا لاتينيًا صغيرًا، وإلا يتم إرجاع الحرف CH نفسه، على سبيل المثال:

    cl:= UpCase("s") ;

    c2:= UpCase ("Ф") ;

    WriteLn(cl،" "،c2)

    نظرًا لأن وظيفة UPCASE لا تعالج السيريلية، فإن نتيجة تشغيل هذا

    سيتم عرض البرامج على الشاشة

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

    الألوان =(الأحمر، الأبيض، الأزرق)؛

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

    TypeMonth=(يناير، فبراير، مارس، أبريل، مايو، يونيو، يوليو، أغسطس، سبتمبر، أكتوبر، نوفمبر، ديسمبر)؛

    الشهر: TypeMonth؛

    إذا كان الشهر = أغسطس ثم WriteLn("سيكون من الجميل الذهاب إلى البحر!");

    سيكون الأمر، كما ترى، واضحًا جدًا. واحسرتاه! في Turbo Pascal لا يمكنك استخدام السيريلية في المعرفات، لذلك نحن مضطرون إلى الكتابة على النحو التالي:

    TypeMonth=(jan,feb,mar,may,jun,jul,aug,sep,oct,nov,dec);

    الشهر: TypeMonth؛

    إذا كان الشهر = أغسطس ثم WriteLn("سيكون من الجيد الذهاب إلى البحر!");

    يتم تحديد المراسلات بين قيم النوع المعدود والأرقام الترتيبية لهذه القيم من خلال ترتيب التعداد: القيمة الأولى في القائمة تتلقى الرقم الترتيبي 0، والثانية - 1، وما إلى ذلك. الحد الأقصى للسعة للنوع المُعدَّد هو 65536 قيمة، لذلك في الواقع يحدد النوع المُعدَّد مجموعة فرعية معينة من نوع WORD بأكمله ويمكن اعتباره إعلانًا مضغوطًا لمجموعة من الثوابت الصحيحة ذات القيم 0، 1، إلخ.

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

    الألوان = (أسود، أحمر، أبيض)؛

    الترتيبي = (واحد، اثنان، ثلاثة)؛

    الأيام = (الإثنين، الثلاثاء، الأربعاء)؛

    من حيث السلطة والتمثيل الداخلي، فإن الأنواع الثلاثة متساوية:

    أورد (أسود) = 0، ...، أورد (أبيض) = 2،

    أورد(واحد)=0, ...أورد(ثلاثة)=2,

    أورد(الاثنين)=0, ...أورد(الأربعاء)=2.

    ومع ذلك، إذا تم تعريف المتغيرات

    العقيد: الألوان؛ الأسطوانات: ترتيبي؛

    ثم يسمح للمشغلين

    الأسطوانات:= succ(two);

    يوم:= بريد(الثلاثاء);

    ولكن غير مقبول

    كما ذكرنا من قبل، هناك مراسلات فردية بين قيم النوع المذكور ومجموعة الأعداد الصحيحة المحددة بواسطة الدالة ORD(X). يسمح Turbo Pascal أيضًا بالتحويل العكسي: يمكن تحويل أي تعبير من النوع WORD إلى قيمة من نوع التعداد، طالما أن قيمة التعبير الصحيح لا تتجاوز power1™ لنوع التعداد. يتم تحقيق هذا التحويل باستخدام دالة معلنة تلقائيًا باسم النوع المذكور (انظر القسم 4.4). على سبيل المثال، بالنسبة لإعلان النوع الذي تمت مناقشته أعلاه، فإن المهام التالية متكافئة:

    العقيد:= الألوان(0);

    بالطبع التكليف

    سيكون غير مقبول.

    يمكن الإعلان عن المتغيرات من أي نوع تم تعداده دون الإعلان عن هذا النوع أولاً، على سبيل المثال:

    العقيد: (أسود، أبيض، أخضر)؛

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

    <мин.знач.>..<макс.знач.>

    هنا<мин.знач. >- الحد الأدنى لقيمة نطاق النوع؛

    <макс.знач.>- قيمته القصوى.

    على سبيل المثال:

    رقم = "0".."9";

    ليس من الضروري وصف نوع النطاق في قسم TYPE، ولكن يمكن تحديده مباشرة عند الإعلان عن متغير، على سبيل المثال:

    Ihr: "أ".."Z"؛.

    عند تحديد نوع النطاق، يجب عليك اتباع القواعد التالية:

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

    أيام = (mo,tu,we,th,fr,sa,su);

    نهاية الأسبوع = sa .. su;

    ثم سيقوم ORD(W) بإرجاع القيمة 5 بينما سيؤدي PRED(W) إلى حدوث خطأ.

    تتضمن مكتبة Turbo Pascal القياسية وظيفتين تدعمان العمل مع أنواع النطاقات:

    HIGH(X) - يُرجع القيمة القصوى لنوع النطاق الذي ينتمي إليه المتغير X؛

    LOW(X) - يُرجع الحد الأدنى لقيمة نوع النطاق.

    سيقوم البرنامج القصير التالي بطباعة السطر

    WriteLn(منخفض(ك)،".."،عالي(ك))

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

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

    رياضيا يتم كتابته على النحو التالي:

    (-1) s × M × B E، حيث s هي الإشارة، وB هو الجذر، وE هو الأس، وM هو الجزء العشري.

    تحدد القاعدة نظام الأرقام. لقد ثبت رياضيًا أن أرقام الفاصلة العائمة ذات الأساس B=2 (التمثيل الثنائي) هي الأكثر مقاومة لأخطاء التقريب، وبالتالي يتم مصادفة القواعد 2 فقط، والأقل شيوعًا، 10. لمزيد من العرض، سنفترض دائمًا B= 2، وستبدو صيغة الرقم ذو النقطة العائمة كما يلي:

    (-1) ق × م × 2 ه

    ما هو العشري والنظام؟ الجزء العشريهو عدد صحيح ذو طول ثابت يمثل البتات الأكثر أهمية في الرقم الحقيقي. لنفترض أن الجزء العشري الخاص بنا يتكون من ثلاث بتات (|M|=3). خذ على سبيل المثال الرقم "5"، والذي سيكون في النظام الثنائي يساوي 101 2. البتة الأكثر أهمية تقابل 2 2 = 4، والبت الأوسط (الذي يساوي الصفر) هو 2 1 =2، والبت الأقل أهمية هو 2 0 =1. طلب– هذه هي درجة الأساس (اثنين) للرقم الأعلى. في حالتنا E = 2. ومن الملائم كتابة مثل هذه الأرقام بالشكل القياسي "العلمي"، على سبيل المثال "1.01e+2". من الواضح على الفور أن العشري يتكون من ثلاث علامات، والترتيب هو اثنان.

    لنفترض أننا نريد الحصول على رقم كسري باستخدام نفس الأجزاء الثلاثة من الجزء العشري. يمكننا القيام بذلك إذا أخذنا، على سبيل المثال، E=1. إذن سيكون العدد لدينا متساويًا

    1.01e+1 = 1×2 1 +0×2 0 +1×2 -1 =2+0.5=2.5

    من الواضح أنه بهذه الطريقة يمكن تمثيل نفس العدد بطرق مختلفة. دعونا نفكر في مثال بطول الجزء العشري |M|=4. ويمكن تمثيل الرقم "2" على النحو التالي:

    2 = 10 (ثنائي) = 1.000e+1 = 0.100e+2 = 0.010e+3.

    لذلك، بالفعل في الآلات الأولى، تم تمثيل الأرقام في ما يسمى شكل طبيعي، عندما كان يُفترض دائمًا أن الجزء الأول من الجزء العشري يساوي واحدًا.

    يؤدي هذا إلى حفظ بت واحد (نظرًا لأن البت الضمني لا يحتاج إلى تخزينه في الذاكرة) ويضمن تمثيل الرقم بشكل فريد. في مثالنا، "2" له تمثيل واحد ("1.000e+1")، ويتم تخزين الجزء العشري في الذاكرة كـ "000"، لأن الوحدة الرائدة ضمنية. لكن تظهر مشكلة جديدة في التمثيل الطبيعي للأرقام، وهو أنه من المستحيل تمثيل الصفر بهذا الشكل.

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

  • أنواع بيانات لغة باسكال: التصنيف والأوصاف. أنواع البيانات الحسابية والترتيبية، والإجراءات معها. التعبيرات الحسابية: الوظائف والعمليات وترتيب الإجراءات. توافق نوع البيانات والتحويلات.

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

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

    لراحة المبرمجين، لدى باسكال العديد من أنواع البيانات القياسية، بالإضافة إلى القدرة على إنشاء أنواع جديدة.

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

    قائم على أنواع البيانات الأساسيةتم بناء جميع الأنواع الأخرى من لغة باسكال والتي تسمى: إنشاؤه.

    يظهر في الجدول التقسيم إلى أنواع البيانات الأساسية والمبنية في باسكال:

    يتم وصف أنواع البيانات التي أنشأها المبرمج في القسم يكتبوفقا للنموذج التالي:

    يكتب<имя_типа> = <описание_типа>;

    على سبيل المثال:

    اكتب Lat_Bukvy = "a" .. "z"، "A" .. "Z"؛

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

    اكتب Int = عدد صحيح؛

    يمكنك تقصير نص البرنامج قليلاً.

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

    أنواع البيانات الترتيبية

    من بين أنواع البيانات الأساسية، أبرزها أنواع ترتيبية. ويمكن تبرير هذا الاسم بطريقتين:

    الإجراءات القياسية التي تعالج أنواع البيانات الترتيبية

    فقط للكميات أنواع ترتيبيةتم تحديد الوظائف والإجراءات التالية:

    1. وظيفة أورد(خ)إرجاع الرقم الترتيبي لقيمة المتغير x (نسبة إلى النوع الذي ينتمي إليه المتغير x).
    2. وظيفة بريد(خ)تُرجع القيمة التي تسبق x (لا تنطبق على العنصر الأول من النوع).
    3. وظيفة نجاح(خ)تُرجع القيمة التالية لـ x (لا تنطبق على العنصر الأخير من النوع).
    4. إجراء شركة(خ)ترجع القيمة التالية x (for أنواع البيانات الحسابيةوهذا يعادل العامل x:= x + 1).
    5. إجراء شركة(س، ك)تُرجع القيمة k التالية لـ x (for أنواع البيانات الحسابيةوهذا يعادل العامل x:= x + k).
    6. إجراء ديسمبر(خ)تُرجع القيمة التي تسبق x (for أنواع البيانات الحسابيةوهذا يعادل العامل x:= x - 1).
    7. إجراء ديسمبر(س، ك)تُرجع قيمة k–e التي تسبق x (for أنواع البيانات الحسابيةوهذا يعادل العامل x:= x - k).

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

    دعونا نشرح كل ما قيل مع مثال. لنوع البيانات

    اكتب ستة عشر = 0 .. 15 ;

    محاولة إضافة 1 إلى الرقم 15 ستؤدي إلى النتيجة التالية:

    1 1 1 1 1 1 0 0 0 0

    سيتم قطع الوحدة الأولية، وبالتالي اتضح ذلك شركة(15)=0 .

    ويلاحظ وجود موقف مماثل عند الحد الأدنى للنطاق المسموح به لنوع البيانات الترتيبي التعسفي لهذا الإجراء ديسمبر(خ)والوظائف بريد(خ):

    أنواع البيانات المتعلقة ترتيبي

    دعونا الآن وصف أنواع البيانات الترتيبيةبالتفصيل.

    1. نوع منطقي منطقيةلها قيمتان: خطأ وصحيح، وتحقق لهما المساواة التالية:
    2. لنوع الحرف شاريتضمن 256 حرفا جدول ASCII الموسع(على سبيل المثال، "أ"، "ب"، "أنا"، "7"، "#"). رقم الحرف الذي تم إرجاعه بواسطة الدالة أورد() ، يطابق رقم هذا الرمز في جدول ASCII.
    3. أنواع البيانات الصحيحةلنضعها في جدول:
    4. قابل للقائمةيتم تحديد أنواع البيانات في القسم يكتبمن خلال سرد عناصرها بشكل واضح. على سبيل المثال:

      اكتب الأسبوع = (الأحد، الاثنين، الثلاثاء، الأربعاء، الخميس، الجمعة، السبت)؛ 0 1 2 3 4 5 6

      تذكر أنه بالنسبة لهذا النوع من البيانات:

    5. أنواع البيانات الفاصلةيتم تحديدها فقط من خلال حدود نطاقها. على سبيل المثال:

      اكتب الشهر = 1 .. 12 ؛
      بودني = الإثنين .. الجمعة؛

    6. يستطيع المبرمج إنشاء أنواع بيانات خاصة به، وهي عبارة عن مزيج من عدة أنواع قياسية. على سبيل المثال:

      اكتب Valid_For_Identifiers = "a" .. "z" , "A" .. "Z" , "_" , "0" .. "9" ؛

    يتكون هذا النوع من الجمع بين عدة فترات، وفي هذه الحالة يتم تغيير ترتيب الحروف اللاتينية: إذا كان في النوع القياسي