الأنواع المدرجة Enumerated Types
~~~~~~~~~~~~~~~~~~~~~~~~
من الخصائص الجذابة في لغة باسكال هي تعاملها مع أنواع معلومات مدرجة (أي لها درجات). قسم من هذه الأنواع معرفة داخل اللغة نفسها مثل Integer و char فهي عبارة عن مجاميع مدرجة من البيانات تكون لها قيم إبتدائية مثبتة من قبل الشركة المصدرة للمترجم، ويمكن للمبرمج أن يعرف أنواع آخرى لاستخدامته الخاصة في برامجه.
مثلا يمكن للمبرمج أن يعرف نوع من البيانات أسمه Color بحيث تكون قيمته (black, blue, white, red)
وذلك كما يلي:
TYPE
Color = (black, blue, white, red);
أو يمكن تعريف نوع لوصف حروف العلة
TYPE
vowel = (A, E, I, O, U);
الأنواع Color و vowel يطلق عليها User-defined enumerated data types وهي عبارة عن سلسة مرتبة من المعلومات تمت تسميتها من قبل المستفيد.
وبهذا يمكن تعريف متغيرات من النوع Color أو Vowel كما يلي :
TYPE
Color = (black, blue, white, red);
vowel = (A, E, I, O, U);
VAR
letter : vowel;
myColor : Color;
هنا المتغير letter لا يمكنه أن يحمل إي قيمة باستثناء الحروف المحددة في تعريف النوع vowel، وكذلك مع المتغير myColor.
ملاحظات عامة:
~~~~~~~~~~
1. لا يمكن تكرار قيمة ما في مكانين، مثلا هذا النوع لن يكون مقبول:
TYPE
grade = ('A', 'B', 'C');
لأن 'A' و 'B' و 'C' موصوفة ضمن النوع Char المعرف مسبقا في لغة باسكال.
إيضا
TYPE
day = (sat, sun, mon, tue, wed, thu, fri);
weekend = (fri);
تم تكرار الوصف fri في نوعين ، وهذا خطأ.
2. التعامل مع الانواع المدرجة هو نفسه التعامل مع باقي الأنواع القياسية، بإستثناء أنه لا يمكن قرائتها أو طباعتها باستعمال الدوال Read وwrite.
الدالة PRED(x):
~~~~~~~~~~~
تعيد هذه الدالة العنصر الذي يسبق العنصر X في النوع المدرج.
TYPE
day = (sat, sun, mon, tue, wed, thu, fri);
.
.
.
Pred(sun) => sat
Pred(tue) => mon
Pred(sat) => Undifind قيمة غير معرفة
الدالة SUCC(x):
~~~~~~~~~~~
تعيد العنصر التالي للعنصر x
TYPE
day = (sat, sun, mon, tue, wed, thu, fri);
.
.
.
Succ(sun) => mon
Succ(tue) => wed
Succ(fri) => Undifind قيمة غير معرفة
الدالة ORD(x):
~~~~~~~~~~~ تعيد هذا الدالة موقع العنصر x ضمن النوع المدرج
TYPE
day = (sat, sun, mon, tue, wed, thu, fri);
.
.
.
Ord(sat) => 0
Ord(tue) => 3
Ord('A') => 65
الدالة CHR(x):
~~~~~~~~~~~~
وهي عكس الدالة ORD وتعمل مع النوع char فقط
Chr(65) => 'A'
Chr(67) => 'C'