• 0
أحمد أبو عبد البر

الدرس الثاني في لغة Object pascal :المتغيرات

سؤال

بسم الله الرحمن الرحيم

 

نكمل ما بدأناه بعون الله تعالى

 

المتغيرات

المتغيرات هي عبارة حاويات للبيانات. فمثلاً في الطريقة الرياضية عندما نقول أن س = 5 فهذا يعني أن س هي متغير وهي في هذه اللحظة تحمل القيمة 5. كذلك يمكن إدخالها في عبارات رياضية، حيث أن قيمة س مضروبة في 2 ينتج عنها 10:

 

س = 5

س * 2 ينتج عنها 10

 

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

كذلك يجب التعريف عن المتغير قبل إستخدامه كما في المثال التالي:

program FirstVar;{$mode objfpc}{$H+}uses  {$IFDEF UNIX}{$IFDEF UseCThreads}  cthreads,  {$ENDIF}{$ENDIF}  Classes  { you can add units after this };var  x: Integer;begin  x:= 5;  Writeln(x * 2);  Writeln('Press enter key to close');  Readln;end. 

 

فعند تنفيذه نحصل على القيمة 10.

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

 

  x: Integer;

 

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

 

وأنا أنبه إلى أمرين

الأول وهو أن الجملة في لغة الباسكال لا بد أن تنتهي بفاصلة منقوطة ";" ونسيانها يعني أن الجملة لم تنته

وسواء في ذلك الإعلان عن المتغيرات كما العبارة السابقة أو الإسناد كما في العبارة التالية

 

الثاني أن الإعلان عن المتغيرات يقع قبل بداية البرنامج اي قبل العبارة begin

 

أما عبارة

 

  x:= 5;

 

فهي تعني وضع القيمة 5 في المتغير الصحيح x

 

يمكن أن نعلن عن متغير ونسنده إلى قيمة افتراضية مثل أن نكتب بعد var

 

x:integer=50;

 

يمكن إضافة متغير آخر للبرنامج نسميه y مثلاً كما في المثال التالي:

 

var  x, y: Integer;begin  x:= 5;  y:= 10;  Writeln(x * y);  Writeln('Press enter key to close');  Readln;end.

 

 

نجد أن مخرجات البرنامج السابق هي:

 

50Press enter key to close

 

 

 

في المثال التالي نقوم بإختبار نوع جديد من المتغيرات، وهو متغير يحتوي على حرف character

 

var  c: Char;begin  c:= 'M';  Writeln('My first letter is: ', c);  Writeln('Press enter key to close');  Readln;end.

 

 

 

أما المثال التالي فهو لنوع الأعداد الحقيقية التي يمكن أن تحتوي على كسور:

var  x: Single;begin  x:= 1.8;  Writeln('My Car engine capacity is ', x, ' litters');  Writeln('Press enter key to close');  Readln;end.

 

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

var  x: Integer;begin  Write('Please input any number:');  Readln(x);  Writeln('You have entered: ', x);  Writeln('Press enter key to close');  Readln;end.  

 

في هذه الحالة أصبح تخصيص القيمة للمتغير x هو عن طريق لوحة المفاتيح.

 

البرنامج التالي يقوم بحساب جدول الضرب لرقم يقوم بإدخاله المستخدم:

program MultTable;{$mode objfpc}{$H+}uses  {$IFDEF UNIX}{$IFDEF UseCThreads}  cthreads,  {$ENDIF}{$ENDIF}  Classes  { you can add units after this };var  x: Integer;begin  Write('Please input any number:');  Readln(x);  Writeln(x, ' * 1 = ', x * 1);  Writeln(x, ' * 2 = ', x * 2);  Writeln(x, ' * 3 = ', x * 3);  Writeln(x, ' * 4 = ', x * 4);  Writeln(x, ' * 5 = ', x * 5);  Writeln(x, ' * 6 = ', x * 6);  Writeln(x, ' * 7 = ', x * 7);  Writeln(x, ' * 8 = ', x * 8);  Writeln(x, ' * 9 = ', x * 9);  Writeln(x, ' * 10 = ', x * 10);  Writeln(x, ' * 11 = ', x * 11);  Writeln(x, ' * 12 = ', x * 12);  Writeln('Press enter key to close');  Readln;end.

 

الملاحظة المهمة في المثال السابق أن أي عبارة تتم كتابتها بين علامتي تنصيص أحادية تكتب كما هي مثلاً:

 

  ' * 1 = '

 

أما مايُكتب بدون تنصيص فإن قيمته هي التي تظهر.

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

  Writeln('5 * 3');  Writeln(5 * 3); 

 

فالعبارة تُكتب كما هي:

 

5 * 3

 

أما ناتج العبارة الثانية فيكون حاصل العملية الحسابية:

 

15

 

في المثال التالي سوف نقوم بإجراء عملية حسابية ونضع الناتج في متغير ثالث ثم نظهر قيمة هذا المتغير:

var  x, y: Integer;  Res: Single;begin  Write('Input a number: ');  Readln(x);  Write('Input another number: ');  Readln(y);  Res:= x / y;  Writeln(x, ' / ', y, ' = ', Res);  Writeln('Press enter key to close');  Readln;end. 

 

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

ونوع المتغير Single يُستخدم لتعريف متغيرات كسرية ذات دقة عشرية أُحادية.

 

 

الأنواع الفرعية

 

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

post-259874-0-81583000-1363257916_thumb.

يمكن معرفة مدى هذه الأنواع وعدد خانات الذاكرة التي تحتاجها بإستخدام الدوال: Low, High, SizeOf. كما في المثال التالي:

program Types;{$mode objfpc}{$H+}uses  {$IFDEF UNIX}{$IFDEF UseCThreads}  cthreads,  {$ENDIF}{$ENDIF}  Classes;begin  Writeln('Byte: Size = ', SizeOf(Byte), ', Minimum value = ', Low(Byte),    ', Maximum value = ', High(Byte));  Writeln('Integer: Size = ', SizeOf(Integer),     ', Minimum value = ', Low(Integer), ', Maximum value = ', High(Integer));   Write('Press enter key to close');  Readln;end.

 

 

 

=================================================

الدورة منقولة من كتابي الأستاذ الفاضل معتز عبد العظيم وما تراه باللون الأخضر فمن زياداتي

تم تعديل بواسطه أحمد أبو عبد البر
1

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

1 إجابات على هذا السؤال .

  • 0

الله يبارك لكم و فيكم

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

  • يستعرض القسم حالياً   0 members

    لا يوجد أعضاء مسجلين يشاهدون هذه الصفحة .