دروس في الباسكال

achraf.mouni

  • Hero Member
  • *****
    • مشاركة: 2439
    • مشاهدة الملف الشخصي
    • البريد الالكتروني
في: آذار 17, 2009, 09:43:49 مسائاً
بسم الله الرحمن  الرحيم....
رأيت ان الكثير يبحث عن تعلم لغة الباسكال
فأقدم اليوم اعزائي الاعضاء دروس عن لغة الباسكال...
12 درسا + تطبيقات بدأنا على بركة الرحمن
الدرس الاول

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


إتباعها لحل المسألة بواسطة الحاسب


هذه الخطوات هي ما  تعرف باللوغاريتم The Algorithm بعد ذلك يمكن تحويل هذه الخطوات إلى إيعازات باسكال  

والتي ستتحول بدورها إلى لغة الآلة المستعملة

بواسطة برنامج المصنف  Compiler

وبرنامج الباسكال هو مجموعه من الإيعازات بعضها منفذ Executable  وبعضها غير منفذ Non-Executable

وتتألف هذه الإيعازات من كلمات دليليه أو من  كلمات تعريفية يجب على المبرمج تعريفها في بداية كل برنامج

ولتوضيح ذلك نرى  مخطط لبرنامج باسكال

Program The Total (input, output);


{This  program find sum of two integer number}

Var

A, B, Total:  integer;

Begin

Write (‘Enter two integer numbers to be add:  ‘);
Readln (a, b);
Total: = a+b;
Writeln (‘The sum of’, A,’and’,  B,’is’, Total);
End.

حيث نلاحظ

- السطر الأول هو للتعريف باسم  البرنامج ووسيله الإدخال والإخراج

- أن الجزء الملون بالأزرق هو عباره عن  كلمات محجوزه سنتعرف عليها بالتفصيل بالدروس القادمه

- الجزء الملون بالأخضر  هو عباره عن إيعاز غير منفذ وهي ملاحظات خاصه بقاريء البرنامج

- الكلمه  الدليليه Var للتصريح عن المتغيرات وسيتم دراستها بالتفصيل

- الجزء الممتد  من Begin إلى End هو عباره عن جسم البرنامج والأوامر بينها

- السطر الأخير  يحتوي على End متبوعه بنقطه وذلك للدلاله على نهايه البرنامج وسنلاحظ أن

1-  بعد كل سطر هنالك نقطه فاصلة ( للدلالة على سطر آخر يليه

2- بعد  كلمه End هنالك نقطة (.) للدلاله على أنه لا يوجد سطر بعد  ذلك
..........................................
الدرس الثاني :  أنواع البيانات في الباسكال


في هذا الدرس سوف نتعرف على  أنواع البيانات في لغة الباسكال والقواعد الخاصه لكل منها

للتمكن من جمع  هذه البيانات في تعابير تشكل إيعازات البرامج في هذه اللغة

يمكننا تمييز  نوعين من أنواع البيانات :


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

1-  الكميات الصحيحه Integer
وهي الأعداد الصحيحه الكامله التي لا تحوي على  كسور

مثل 11

2- الكميات الحقيقيه Real

وهي الأعداد الحقيقيه  التي تحوي كسور فيها

مثل 2.3434

3- الكميات المميزه  Char

وهي الحروف والأشكال المميزة

مثل A,@,H,^,&

4-  الكميات المنطقيه Boolean

ويمكن أن تأخد قيمتين هما إما صحيح True أو خطأ  False


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


achraf.mouni

  • Hero Member
  • *****
    • مشاركة: 2439
    • مشاهدة الملف الشخصي
    • البريد الالكتروني
رد #1 في: آذار 17, 2009, 09:46:02 مسائاً
الدرس الثالث :  المتغيرات في برنامج الباسكال

التصريح  Var
ويتم في هذا القسم من البرنامج التصريح عن نوع البيانات بالبرنامج  قبل إستخدامها
ويتم التصريح حسب نوع البيانات إما الأنواع الأربعه Integer ,  Real , Boolean , Chr أو نوع قام المستخدم بتعريفه وسيتم دراسته بفصل آخر
ويخضع  إسم المتغير إلى شروط وهي
1- أن يبدأ بحرف ( ولا تقبل الأسماء التي تبدأ بأرقام  )
2- يحوي الإسم حروفا وأرقاما فقط
3- لا يكون الإسم من ضمن الكلمات  المحجوزه بالذاكرة
4- يفضل دائما أن يكون إسم له معنى للتسهيل

أمــــثــلة

A: integer; تم تعريف مكان بالذاكره إسمه  A وهو يقبل البيانات فقط من نوع الأعداد الصحيحه
B: Real; تم تعريف مكان  بالذاكره إسمه B وهو يقبل البيانات من النوع الصحيح وأيضا النوع الذي الحقيقي الذي  يحوي كسور
Grade: Chr; تم تعريف مكان بالذاكره إسمه Grade وهو يقبل البيانات من  النوع Chr
F: Boolean; تم تعريف مكان بالذاكره إسمه F وهو يقبل بيانات من النوع  Boolean أي قيم منطقيه (يقبل إما قيمه True – False )

والآن لنأخذ مثال  تطبيقي على إستخدام التصريح Var

A:=5; (صحيح)

A:=3.5; (خطأ) – لإنه  تم إسناد عدد حقيقي كسري إلى متغير صحيح


B:=5; (صحيح)

B:=3.5;  (صحيح)

Grade:=`r`; (صحيح)

Grade:=d; (خطأ) – لعدم وضع الأقواس  

F:=True; (صحيح)

F:=False; (صحيح)

F:=10; (خطأ) – لإن  المتغير F لايقبل إلا قيم منطقيه إما True أو False

ونلاحظ مما سبق  

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

لقد تعرفنا على طريقة تعريف متغيرات بالبرنامج لحفظ  البيانات فيها حسب نوعها وذلك داخل التعريف Var

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

نوع  جديد داخل الأمر Const وتكون على الشكل التالي

Const

A = 30  ;

B = 9.6 ;

C = “Name”;

- طوال عمل البرنامج سيسند للثابت A  القيمة 30 ولا يمكن تغيير هذه القيمة خلال البرنامج أبدا

- نلاحظ أن هناك  علامة مساواة = بين إسم الثابت وقيمته بينما في تعريف Var المتغيرات هناك علامة :  بين إسم المتغير ونوعه

- الثابت المعرف يعامل في البرنامج على أنه كلمة  محجوزة Reserved Word

Program  Circle(input,output);

Const
Pi=3.14;

Var

Radius :  integer ;
Circum , area : real ;

Begin

Writeln ( ‘Enter  Radius’);

Read ( radius);

Circum := 2*pi* radius ;

Area :=  pi * radius * radius ;

Writeln (‘The value of circum  is’,circum);

Writeln (‘The value of area is’,area);

End.

في  البرنامج السابق قمنا بتعريف ثابت في البرنامج بالإسم pi وهو يتخذ دائما القيمة  3.14

إستخدام الثوابت في البرنامج يسهل عمل البرنامج ويسهل تعديل القيم  بسهولة بخاصة في البرامج الكبيرة

لو أردنا تنفيذ البرنامج السابق ولكن بدون  الإعتماد على الثوابت فسيكون البرنامج على الشكل

Program  Circle(input,output);

Var

Pi : real ;

Radius : integer  ;

Circum , area : real ;

Begin

Write (‘Enter Value of pi  :’);

Readln (pi);

Writeln ( ‘Enter Radius’);

Read (  radius);

Circum := 2*pi* radius ;

Area := pi * radius * radius  ;

Writeln (‘The value of circum is’,circum);

Writeln (‘The value  of area is’,area);

End;

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

الأول : Writeln

وهو يقوم بطباعة الجملة والإنتقال بعدها إلى السطر  الذي يليه مثل

Writeln (‘This is First Line’);

Writeln (‘This is  the second Line’);

Writeln (‘This is the first line’,’This is complete of  the first line’);

نلاحظ في هذا المثال أنه سيقوم بطباعة الجملة الأولى وفي  نفس السطر سيقوم بطباعة الجملة الثانية وسينتقل بعدها للسطر الذي  بعده

الثاني : Write

وهو مشابه للأمر Writeln ولكن الفرق الوحيد أنه  لا ينتقل سطر للأسفل بعد طباعة الجملة بل يكمل بنفس السطر

Write (‘This is  the first line ‘);

Writeln (‘This is the complete of the first  line’);

Write (‘This is the Second line’);

Write (‘This is  complete of line 2’);

Writeln (‘This is the End’);

في هذا المثال  توضيح كامل لعمل دالة الإخراج بحالتيها


achraf.mouni

  • Hero Member
  • *****
    • مشاركة: 2439
    • مشاهدة الملف الشخصي
    • البريد الالكتروني
رد #2 في: آذار 17, 2009, 09:47:24 مسائاً
الدرس الخامس :  أمر Write والأمر Writeln

يقرأ البرنامج السطر الأول ويطبعه وبما أنه  Write فإن المؤشر لن ينتق للسطر الذي يليه بل سيقرأ السطر الآخر ويطبعه بنفس السطر  

وبما أن السطر الثاني من النوع Writeln فإن المؤشر بعد الإنتهاء من طباعة  السطر ينتقل للسطر التالي لطباعة البيانات الأخرى

لذلك سيكون ناتج السطور  السابقة بعد التنفيذ

This is the first line This is the complete of the  first line

This is the Second line This is complete of line 2 This is the  End

I

بعد الإنتهاء من نتفيذ الأوامر ينتقل المؤشر I إلى السطر الذي  يلي آخر جمله لإنها من النوع Writeln

تدريب :

لو أراد منك طباعة  الأسطر التالية

My Name is Rayan

o

I live in  Riyadh

حيث يقصد دائما بالعلامة o فراغ

الجواب

Writeln (‘My  Name is Rayan’);

Writeln ;

Writeln (‘I Live in Riyadh  ‘);

ويمكن أيضا حلها بالشكل التالي

Writeln (‘My Name is  Rayan’);

Writeln(‘’);

Write (‘I Live in Riyadh ‘);

والفرق  بينهما أن المؤشر في الحالة الأولى سيكون في النهاية في السطر الذي يلي آخر عبارة  

وفي المثال الثاني سيكون في نفس السطر الأخير

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

فلو فرضنا أن S=10 وأراد  طباعة قيمتها فنكتب

Writeln (‘The Value of S =’,s);

ويمكن أيضا  طباعة أكثر من قيمة أكانت جملة أو متغير وذلك بإستخدام الفاصلة [,] بينها  

مثل لو عرفنا المتغيرات التالية

A = ‘Rayan’;

B = ‘=’  ;

C= ‘20’;

Writeln (‘My Name is’,B,A,’and my age  is’,c);

فسيكون الناتج على الشكل

My Name is =Rayan and my age is  20
........................................
الدرس السادس : أمر Read والأمر  Readln

سنتعرف في هذا القسم على نوع جديد من الأوامر في  الباسكال وهذا النوع من الأنواع الشائعة الإستخدام في البرنامج وهو الأمر Readln  ويستخدم هذا الأمر لإدخال البيانات من المستخدم وحفظها في متغيرات تناسب نوع  البيانات المدخلة وله نوعان

الأول : Readln

وهو يقوم بقراءة  البيانات من المستخدم وبعدها ينتقل المؤشر للسطر التالي

الثاني : Read  

وهو مشابه للأمر Readln ولكن الفرق الوحيد أنه لا ينتقل سطر للأسفل بعد  قراءة البيانات بل يكمل بنفس السطر

Write (‘Enter Your Name  :’);

Readln (Name);

في المثال السابق يقوم البرنامج في السطر الأول  بطباعة السؤال ( أدخل إسمك ) ولإننا إستخدمنا الأمر Write فإن المؤشر لا ينتقل  للسطر التالي بل يقرأ السطر التالي والمؤشر في نفس السطر

في السطر التاني  ينتقل البرنامج لوضع إستقبال البيانات من المستخدم ومن ثم حفظها في المتغير المختار  Name و يجب أن تكون البيانات المدخلة من نفس نوع المتغير وإلا سوف يولد البرنامج  رسالة خطأ

Enter your name : I

لو أضفنا السطور التالية  للمثال

Writeln (‘Enter your Age :’);

Read (Age);

Write  (‘Enter your Salary :’);

Readln (Salary);

في السطر الثالث يطبع  البرنامج الرسالة وينتقل بعدها للسطر التالي لإستقبال البيانات من المستخدم ، ونلا  حظ هنا اننا إستخدمنا الأمر Read

بعدها سيقوم البرنامج بطباعة السطر الخامس  ولن ينتقل للسطر التالي بل سيستقبل البيانات في نفس السطر لإننا إستخدمنا الأمر  Write

 __________________


achraf.mouni

  • Hero Member
  • *****
    • مشاركة: 2439
    • مشاهدة الملف الشخصي
    • البريد الالكتروني
رد #3 في: آذار 17, 2009, 09:53:46 مسائاً

الدرس السابع : قاعدة  الأولويات


يجب علينا قبل الدخول في البرمجة فهم  الطريقة الرياضية للتعامل مع البيانات وطريقة تعامل المصنف مع الدوال الرياضية  والأقواس

وبرنامج الباسكال يتعامل مع العمليات الرياضية حسب القاعدة  التالية

والتي تعتمد على الأسبقية بحيث

أولا : تنفيذ الدالة  Not

ثانيا : تنفيذ الدوال  التالية

AND

MOD

DIV

/

*
بحيث أن الدالتين  Div و Mod دوال رياضية سيتم التعرف عليها لاحقا

ثالثا : تنفيذ العمليات  

OR

-

+

رابعا : تنفيذ المعاملات المنطقية  

=

<>

<=

>=

<

>

عندما  يكون هناك دالتين من نفس المستوى ننفذ الدالة بدءا من اليسار إلى اليمين  

لتتضح الرؤيا حول إستخدام قاعدة الأولويات نرى الأمثلة  التالية

1-Write a PASCAL program to find the roots of a quadratic  equation (assume that b2 – 4ac >= 0)


يريد في هذا المثال إيجاد  جذور لمتتابعة ثنائية

الحل

Program  Root(input,output);

Var

A,b,c :integer;

X1,x2 : real  ;

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

وفي حالة وجود عمليات قسمة فناتجها دائما عدد حقيقي وليس  صحيح

Begin

Writeln (‘Enter the Numbers A , B ,C’);

Readln  (a,b,c);

X1:= (-b+sqrt(b*b –4*a*c))/(2*a);

X2:= (-b-sqrt(b*b  –4*a*c))/(2*a);

Write (‘The Nunmber X1 =’,x1 ,’And Number X2  =’,x2);

End.

2- Find (7 Div 2/3)

في هذا المثال نلاحظ أن  الدالتين Div و / يأتيان في مرتبة واحده في أولوية التنفيذ

ولكن لإن Div  أتت قبل من جهة اليسار فنقوم بتنفيذها أولا لذلك

7 div 2/3 =


3 /  3 =


1.0


( لاحظ أن العدد جوابه 1.0 وليس 1 لإنه ناتج من قسمة  فلذلك يعد عدد حقيقي Real ولا يعتبر Integer)

 __________________


achraf.mouni

  • Hero Member
  • *****
    • مشاركة: 2439
    • مشاهدة الملف الشخصي
    • البريد الالكتروني
رد #4 في: آذار 17, 2009, 09:56:00 مسائاً

الدرس الثامن : التعابير  الرياضية



في هذا القسم سوف نتعرف على العمليات الرياضية  المستخدمة في الباسكال وطريقة إستخدامها

أولا : العمليات - و + و  *

التعامل مع هذه العمليات متشابة وهي تقبل الأعداد الحقيقة والصحيحة  

5 + 7 = 12

5.0 + 7 = 12.0

7 –5 =2

7*5 =  30

نلاحظ من هذا المثال أن ناتج

عدد صحيح Integer + عدد صحيح Integer  = Integer

عدد حقيقي Real + عدد حقيقي Real = Real

عدد صحيح Integer  + عدد حقيقي Real = Real

ثانيا : العملية /

عملية القسمة دائما  مهما كان نوع المدخلات أكانت أعداد حقيقة أو صحيح

فجوابها دائما عدد حقيقي  Real

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

ثالثا : العملية Div

وهي  عملية قسمة ولكن فقط تعطي الناتج من القسمة وتهمل الباقي من القسمة

20 Div 3  = 6

18 Div 3 = 6

(-17) Div 3 = -5

19 Div 3 = 6

3  Div 10 = 0

16 Div (-3) = -5

الدالة Div تقبل دائما مدخلات من النوع  الصحيح Integer وتعطي جواب دائما Integer

ولا تقبل أبدا القيم الحقيقية  Real

1.4 Div 4 = X

ثالثا : العملية Mod


وتعطي هذه  العملية الباقي من قسمة عددين ولاحظ دائما عند قسمة عدد على أكبر منه فناتجها العدد  نفسه


20 Mod 3 = 2


18 Mod 3 = 0


19 Mod 3  =1


3 Mod 10 = 3




الدالة Mod تقبل دائما مدخلات من  النوع الصحيح Integer وتعطي جواب دائما Integer


ولا تقبل أبدا القيم  الحقيقية Real


1.4 Mod 4 = X

 __________________


achraf.mouni

  • Hero Member
  • *****
    • مشاركة: 2439
    • مشاهدة الملف الشخصي
    • البريد الالكتروني
رد #5 في: آذار 17, 2009, 09:56:26 مسائاً
الدرس التاسع

الأنواع المدرجة 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'

 __________________


achraf.mouni

  • Hero Member
  • *****
    • مشاركة: 2439
    • مشاهدة الملف الشخصي
    • البريد الالكتروني
رد #6 في: آذار 17, 2009, 09:57:01 مسائاً
الدرس العاشر

جملة IF - ELSE

قبل البدأ في شرح جملة IF -  ELSE وتوضيح صيغتها العامة، يجب أن نتطرق إلى موضوع مهم وهو التعابير البوليانية في  لغة باسكال، فلنبدأ على بركة الله.
التعابير البوليانية  :
ّّّّّّّّّّّّّّّّّّّّ~~~~~~~~~~
في لغة باسكال تظهر التعابير البوليانية  على أحد شكلين:
1- المتغيرات البوليانية Boolean variables
وهي عبارة عن  متغيرات خاصةتعرف في القسم VAR من البرنامج، وتأخذ أحد قيميتن True أو  False
VAR
switch : Boolean;
هنا المتغير switch يأخذ أحد قيمتين Ture أو  False
switch := Ture;
switch := False;
ويجب ملاحظة أنه لا يمكن قراءة  مثل هذه المتغيرات باستعمال الدالة read إلا أنه من الممكن طباعتها بالدالة  write.
2- متغيرات مربوطة بعوامل نسبية Relation Operators:
من الممكن صياغة  التعابير البوليانية باستعمال متغيرات تربط بينها العوامل النسبية التالية
=  يساوي
<> لا يساوي
=> أقل من أو يساوي
=< أكبر من أو  يساوي
> أقل من
< أكبر من

3- تعابير بوليانية مربوطة بعوامل  منطقية logical operators
يمكن ربط أكثر من تعبير بولياني باستعمال أحد العوامل  المنطقية التالية
NOT نفي
AND و
OR أو

ملاحظة:
العوامل المنطقية  تتمتع بأسبقية أعلى من العوامل النسبية، لهذا فإن التعبير التي يعتبر خطأ:
NOT  4>5

لأن العامل NOT سوف يطبق أولا، لذا يجب كتابه التعبير السابق كما  يلي:
NOT (4>5)

لتكون قيمته true

بعد هذا الشرح عن التعابير  البوليانية، نعود إلى جملة IF

جملة IF ELSE
~~~~~~~~~
الشكل العام  لها:
IF boolean expression
THEN statment1
ELSE  statment2

&& الحالة الأولى:
^^^^^^^^^^^
عندما يكون لدينا  عبارة واحدة في فيعي جملة IF
مثال: لدينا متغيرين num1 و num2 والمطلوب طباعة  العدد الأكبر بينهما
IF num1>num2
THEN writeln('The larger is: ',  num1)
ELSE writeln('The larger is: ', num2)
لاحظ هنا عدم وجود فاصلة منقوطة  في العبارات بعد THEN و ELSE

&& الحالة  الثانية:
^^^^^^^^^^^
عندما تكون لدينا أكثر من عبارة في كل فرع من فرعي الـ  IF
مثال: في نفس المثال السابق لو كان المطلوب تخزين الرقم الأكبر في متغير max  بعد طباعته

IF num1>num2
THEN BEGIN
writeln('The larger is: ',  num1);
max:= num1
END
ELSE BEGIN
writeln('The larger is: ',  num2);
max:= num2
END
في هذه الحالة نحتاج إلى وضع العبارات التي بداخل  الـ THEN بين BEGIN و END ونفصل بينها بفواصل منقوطة، ولكن بدون فاصلة قبل الـ  ELSE

 __________________


achraf.mouni

  • Hero Member
  • *****
    • مشاركة: 2439
    • مشاهدة الملف الشخصي
    • البريد الالكتروني
رد #7 في: آذار 17, 2009, 09:57:49 مسائاً
الدرس الحادي عشر


عبارة CASE في  باسكال

تستخدم عبارة Case (الحالة) في المواقع التي يراد فيها الاختيار  بين عدد من البدائل.
تستخدم عبارة الـ CASE كبديل عن استعمال عدد من عبارات IF -  ELSE المتتالية، والتي غالبا ما تكون أكثر تعقيدا، وصعبة التتبع والفهم
أما  باستعمال الـ CASE فإن البرنامج يصبح أكثر وضوحا، وسهل التتبع

الصيغة العامة  لـ CASE:
~~~~~~~~~~~~~
CASE selector OF
constent1  :
statement1;
constent2  :
statment2;
.
.
.
.
END;
selector هو عبارة عن متغير من أي  نوع مدرج (راجع درس الأنواع المدرجة)
constent1 و constent2 هي قيم يمكن أن  يأخذها المتغير selector
فإذا كانت قيمة selector هي constent1 يتم تنفيذ  العبارت التالية لها في هيكل CASE وهي statement1.
وإذا كانت قيمته constent2  تنفذ العبارة statment2 وهكذا.

لاحظ المثال التالي:
PROPGRAM ex1 (input,  output);
VAR
lettergrade : char;
BEGIN
wirteln('Enter your last  grade: ');
readln(lettergrade);
CASE lettergrade OF
'A':  writeln('4.0');
'B': writeln('3.0');
'C': writeln('2.0');
'D':  writeln('1.0');
'F': writeln('0.0');
END
END.
في هذا المثال سوف  يطبع البرنامج الدرجة المقابلة للتقدير الذي حصلت عليه مؤخرا

في بعض  الأحيان قد نرغب في تنفيذ نفس الأوامر لعدة قيم للمتغير selector، في هذه الحالة  تذكر هذه القيم وتفصل بينها بالفاصلة
PROPGRAM ex2 (input,  output);
VAR
number : Integer;
BEGIN
wirteln('Enter a number between  1 - 10: ');
readln(number);
CASE number OF
1, 3, 5, 7, 9 : writeln('The  number is odd');
2, 4, 6, 8, 10: writeln(' the number is even');  
END
END.

طبعا إذا أردنا تنفيذ أكثر من أمر واحد في كل حالة يجب أن  نحيطها بـ BEGIN و END.

 __________________


achraf.mouni

  • Hero Member
  • *****
    • مشاركة: 2439
    • مشاهدة الملف الشخصي
    • البريد الالكتروني
رد #8 في: آذار 17, 2009, 09:58:46 مسائاً
الدرس الثاني عشر


حلقات التكرار في لغة باسكال
قد  يتطلب الأمر في بعض البرامج أن نكرر تنفيذ مجموعة من الأوامر لعدد من المرات، أو  إلى إن يصبح تعبير ما صحيح (true) أو خطأ (false).
كأن نرغب في أن يطلب برنامجنا  إدخال10 أعداد من المستخدم، أو نطلب منه إدخال القدر الذي يريده من الأعداد على أن  يكون العدد الأخير يساوي 0 مثلا. هنا نحن بحاجة إلى استعمال الحلقات في  برنامجنا.
يوجد في لغة باسكال 3 تراكيب لعمل حلقات التكرار، وسوف نبدأ في هذا  الدرس بتعلم أولى هذه الحلقات وهي حلقة FOR.
حلقة التكرار  FOR:
~~~~~~~~~~~~
إذا أردنا تنفيذ مجموعة من الأوامر لعدد محدد من المرات،  لنقل 6 مرات.
فأمامنا خياران، الأول أن نعيد كتابة هذه الأوامر 6 مرات في  البرنامج وهو أمر مزعج خاصة إذا كان المطلوب أن نعيد التنفيذ لعدد أكبر من المرات،  600 مثلا
أما الخيار الثاني (وهو الأفضل) أن نستخدم حلقة التكرار FOR في  البرنامج. وبهذا فإننا تكتب الأوامر التي ترغب في تكرارها 6 مرات داخل حلقة For مرة  واحدة فقط
كيف؟
كهذا :
 كود:
FOR i:=1 TO 6 DO
write('@');
هنا استعملنا حلقة FOR لتكرار أمر الطباعة write ('@') لستة  مرات
هذا البرنامج سوف يطبع الأعداد من 1 إلى 20

 كود:
PROGRAM example1 (input,output);
VAR
i: integer;
BEGIN
FOR i:=1 TO 20 DO
Writeln ( i);
END.
والآن لاحظ هذا البرنامج الذي يطبع نفس الأعداد ولكن بالعكس من 20  إلى 1
 كود:
PROGRAM example1 (input, output);
VAR
i: integer;
BEGIN
FOR i:=20 DOWNTO 1 DO
Writeln ( i);
END.
هل لاحظت الفرق بين استخدام TO و DOWNTO داخل حلقة FOR؟
في  الأمثلة السابقة كانت هناك عبارة واحدة نرغب في تكراره، أي أن جسم الحلقة مكون من  عبارة واحدة فقط، ولكن يمكن لجسم الحلقة أن يتكون من عدة عبارات، وفي هذه الحالة  يجب أن تحدد بداية ونهاية جسم الحلقة بـ BEGIN و END.

 __________________


achraf.mouni

  • Hero Member
  • *****
    • مشاركة: 2439
    • مشاهدة الملف الشخصي
    • البريد الالكتروني
رد #9 في: آذار 17, 2009, 10:00:57 مسائاً
التطبيق



برنامجك الاول :  
اول شئ يجب ان تفعله ان تفتح مترجم الباسكال .
في هذه السلسلة المترمجة من  موقع .sepsis سيتم شرح البرمجة بالباسكال بالتفصيل و بطريقة سلسة و سهلة  للجميع.
دائماً نبدأ البرنامج بكتابة اسمه . ادخل program و اسم البرنامج بعدها  . سوف نقوم بتسمية برنامجنا الاول "Hello" لانه سيقوم بطباعة الجمله المشهوره  "Hello world" على الشاشه , سوف تكون طريقة الكتابه بهذه الطريقه :

 كود:
program Hello;
بعدها  يجب علينا ان نطبع الكلمتين begin و end . بعدها نقوم بكتابة شيفرة البرنامج بين  هاتين الكلمتين . تذكر وضع النقطه بعد الكلمه end , هكذا ستكون صيغة ما كتبناه حتى  الآن :

 كود:
program Hello;

begin
end.
الآن نكتب الشيفره التي تطبع الجمله على الشاشه :
 كود:
program Hello;

begin
Write('Hello world');
end.
يجب ان تكون الجمله بين علامة الاقتباس الفرديه ' . واي شي يكون  بين علامة الاقتباس الفرديه عباره عن سلسله (كلمات و حروف) . كل السلاسل يجب ان  تكون بهذا الشكل . علامة الفاصله المنقوطه ; هي نهاية السطر . يجب ان تتذكر دائما  ان تضع هذه العلامه في نهاية سطر .

الامر Readln يستخدم لانتظار المستخدم  ان يقوم بالضغط على زر الادخال لكي ينتهي البرنامج .
 كود:
program Hello;

begin
Write('Hello world');
Readln;
end.
الآن يجب ان تخزّن البرنامج بإسم hello.pas


achraf.mouni

  • Hero Member
  • *****
    • مشاركة: 2439
    • مشاهدة الملف الشخصي
    • البريد الالكتروني
رد #10 في: آذار 17, 2009, 10:02:09 مسائاً
التطبيق الثاني



تجميع البرنامج و ترجمته :  
برنامجنا الاول الآن جاهز للترجمه . عندما تقوم بترجمة البرنامج , سيقوم  المترجم بقرائة الملف المصدري (الشفره التي قمت بكتابتها) و يقوم بتطبيقها . اذا  كنت تستخدم مترجم من نوع IDE قم بالضغط على CTRL+F9 انها دائماً تستخدم لترجمة و  تشغيل البرنامج في المترجمات من نوع IDE . اذا كنت تستخدم مترجم يعتمد على سطر  الاوامر مثل Free Pascal ادخل الامر التالي :

 كود:
fpc hello.pas
اذا  تلقيت اي خطأ عند الترجمه يجب ان تقرأ هذا الدرس مره اخرى بعنايه لاكتشاف اين هو  الخطأ . مستخدمين IDE سوف يجدون ان برنامجهم تمت ترجمته و تم تشغيله في وقت قصير .  مستخدمين سطر الاوامر يجب ان يدخلون اسم البرنامج في متلقي الاوامر لكي يعمل .  

يجب ان تجد الجمله "Hello world" عندما تقوم بتشغيل برنامجك و عند الضغط  على زر الادخال سوف يتم الخروج من البرنامج .
مبروك ! لقد كتبت اول برنامج لك  في باسكال .


المزيد من الاوامر :
الامر Writeln مثل الامر Write  بإستثناء انه يقوم بنقل المؤشر إلى سطر جديد . هنا شفره لبرنامج يقوم بطباعة الكلمه  Hello و بعدها world في السطر الذي يليه :

 كود:
program Hello;

begin
Writeln('Hello');
Write('world');
Readln;
end.

استخدام الاوامر من الوحدات :
الاوامر التي تقوم ببنائها  في مترجمك اساسيه جداً و انت تحتاج لاستخدام المزيد . الوحدات يمكن ان تُدرَج في  برنامجك لكي تعطيك القدره على استخدام المزيد من الاوامر . الوحده crt احد اقوى  الوحدات المفيده الموجوده . الامر ClrScr موجود من ضمن الوحده crt و استخدامها هو  تنظيف الشاشه . كيفية استخدام هذا الامر :

 كود:
program Hello;

uses
crt;

begin
ClrScr;
Write('Hello world');
Readln;
end.

 __________________


achraf.mouni

  • Hero Member
  • *****
    • مشاركة: 2439
    • مشاهدة الملف الشخصي
    • البريد الالكتروني
رد #11 في: آذار 17, 2009, 10:03:44 مسائاً
التعليقات :
التعليقات جمل تستخدم للتعليق على احد  اجزاء البرنامج . المترجم لا يعتبر التعليقات جزء من الشيفره والتعليقات فقط  للاشخاص الذين يطّلعون على الشيفره المصدريه للبرنامج , التعليقات يتم اضافتها بين  العلامتين { } . يفضل دائما ان تقوم بكتابة تعليقات في اول الملف تشرح فيه وظيفة  الملف و ان تقوم بكتابة التعليقات بجانب الاوامر صعبة الفهم لكي تقوم بشرحها .  


مثال :

 كود:
{This program will clear the screen, print "Hello world" and wait for the user to press enter.}

program Hello;

uses
crt;

begin
ClrScr;{Clears the screen}
Write('Hello world');{Prints "Hello world"}
Readln;{Waits for the user to press enter}
end.المسافات :
قد تلاحظ اننا تركنا قبل الاوامر 3 اسطر . هذه  الطريقه مفيده في جعل البرنامج سهل القرائه . الكثير من المبتدئين لا يفهم سبب وضع  تلك المسافات ولكن اذا بدأ بكتابة البرامج الكبيره سوف يفهم فائدتها .  


الالوان :
لتغيير لون النص الذي يُطبع على الشاشه يمكننا استخدام  الامر TextColor .

مثال :

 كود:
program Colors;

uses
crt;

begin
TextColor(Red);
Writeln('Hello');
TextColor(White);
Writeln('world');
end.الامر TextBackground يقوم بتغيير لون خلفية النص . اذا كنت تريد  تغيير لون خلفية الشاشه إلى لون معيّن يجب ان تستخدم الامر ClrScr .

 كود:
program Colors;

uses
crt;

begin
TextBackground(Red);
Writeln('Hello');
TextColor(White);
ClrScr;
end.
 __________________


achraf.mouni

  • Hero Member
  • *****
    • مشاركة: 2439
    • مشاهدة الملف الشخصي
    • البريد الالكتروني
رد #12 في: آذار 17, 2009, 10:06:54 مسائاً
إحداثيات الشاشه :
يمكنك ان تضع السهم في اي مكان  تريده في الشاشه بإستخدام الامر GoToXY . في الدوس , الشاشه بعرض 80 حرف و ارتفاعها  25 حرف . يتغير الطول و العرض في المنصات الاخرى , قد تتذكر الرسوم البيانيه في  الرياضيات . احداثيات الشاشه كذلك تعمل بنفس الطريقه . في المثال الذي سوف نعرضه  سوف نعرف كيف نحرّك المؤشر إلى العمود العاشر في الصف الخامس

 كود:
program Coordinates;

uses
crt;

begin
GoToXY(10,5);
Writeln('Hello');
end.
النوافذ :
النوافذ ستسمح لك بتعريفها على الشاشه لكي تحتل  المنطقه التي تطلبها . اذا قمت بإنشاء النافذه و قمت بتنظيف الشاشه سوف يتم تنظيف  ما على الشاشه فقط . الامر Window يأخذ 4 بارامترات و هم إحداثيات (اعلى , يسار ,  يمين , اسفل) .


 كود:
program Coordinates;

uses
crt;

begin
Window(1,1,10,5);
TextBackground(Blue);
ClrScr(Blue);
end.الصوت :
الامر Sound يُصدر صوت بالتكرار الذي تطلبه منه الذي  تطلبه منه . الامر Delay يأخذ الوقت بالثواني التي تخبره بها . يستخدم هذا الامر  بين الامرين Sound و NoSound ليُصدر الصوت الاخير من مقدار معين من الوقت  


 كود:
program Sounds;

uses
crt;

begin
Sound(1000);
Delay(1000);
NoSound;
end.
ماهي المتغيرات؟

المتغيرات عباره عن اسماء تخزّن في  ذاكرة الحاسوب . هذا الاسم يستخدم لتخزين المعلومات في الذاكره .

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


استخدام المتغيرات :
يجب دائماً ان نعلن عن المتغيرات قبل  استخدامها . نستخدم الكلمه الاساسيه var لعمل ذلك . دائماً يجب اختيار نوع البيانات  للمتغير . وهذه هي انواع المتغيرات المختلفه .

Byte :
من 0 إلى 255  

Word :
من 0 إلى 65535

ShortInt :
من -128 إلى 127  

Integer :
من -32768 إلى 32767

LongInt :
من -4228250000  إلى 4228249000

Real :
قيم النّقطة المتغيّرة

Char :
حرفاً  واحداً

String :
فوق 255 حرف

Boolean :
true او false  


في هذا المثال سوف نتعرف على طريقة الاعلان عن متغير من نوع intger  اسمه i :

 كود:
program Variables;

var
i: Integer;

begin
end.لإعطاء قيمه للمتغير يتم استخدام عامل الاسناد :=


 كود:
program Variables;

var
i: Integer;

begin
i := 5;
end.
يمكنك انشاء متغيرين او اكثر من نفس النوع إذا وضعت الفاصله  بعد المتغير الاول و قمت بكتابة اسم المتغير الثاني بعدها . كذلك يمكنك انشاء  متغيرات مختلفه بدون الحاجه إلى استخدام الجمله الاساسيه var اكثر من مره :  

 كود:
program Variables;

var
i, j: Integer;
s: String;

begin
end.
اذا كنت تريد ادراج سلسله في متغير يجب استخدام علامة الاقتباس  الفرديه ' , النوع Boolean فقط يمكن اسناد قيمتين له و هم True و False :  


 كود:
program Variables;

var
i: Integer;
s: String;
b: Boolean;

begin
i := -3;
s := 'Hello';
b := True;
end.


الحسابات مع المتغيرات :
يمكن استخدام المتغيرات  في العمليات الحسابيه . على سبيل المثال يمكن أن تسند القيمة بمتغيّر ثمّ تضيف  الرقم 1 له . العمليات الحسابيه التي يمكن استخدامها :

 كود:
+ : اضافه (زائد
- : 
طرح 
* : ضرب 
/ : قسمه 
div 
قسمة عدد صحيح 
mod 
باقي قسمة العدد الصحيح



المثال التالي يقوم ببعض العمليات  الحسابيه :

 كود:
program Variables;

var
Num1, Num2, Ans: Integer;

begin
Ans := 1 + 1;
Num1 := 5;
Ans := Num1 + 3;
Num2 := 2;
Ans := Num1 - Num2;
Ans := Ans * Num1;
end.
يستخدم النوع Strings في تخزين السلاسل مثل الحروف والارقام  المختلفه و غيره , و يمكنك استخدام العمليات الحسابيه مع هذا النوع من المتغيرات  حيث لا يتم جمع الرقمين المخزنين على صيغة String بمعنى جمع , مثلاً اذا قمت بإضافة  السلسله التي قيمتها 1 إلى السلسله التي قيمتها 1 سوف يكون الناتج 11 و ليس 2 .  

 كود:
program Variables;

var
s: String;

begin
s := '1' + '1';
end.

يمكنك قراءة محتوى المتغيرات بإستخدام Readln و ReadKey .  الامر الثاني و هو ReadKey من الوحده crt و هي تقرأ حرف واحد فقط . سوف ترى ان  طريقة عمل ReadKey مختلفه عن Readln .



 كود:
program Variables;

uses
crt;

var
i: Integer;
s: String;
c: Char;

begin
Readln(i);
Readln(s);
c := ReadKey;
end.
طباعة المتغيرات على الشاشه طريقه سهله . اذا كنت تريد طباعة  المتغيرات على الشاشه يمكنك استخدام الامر Writeln :

 كود:
program Variables;

var
i: Integer;
s: String;
begin
i := 24;
s := 'Hello';
Writeln(i);
Writeln(s,' world');
end.
 __________________


achraf.mouni

  • Hero Member
  • *****
    • مشاركة: 2439
    • مشاهدة الملف الشخصي
    • البريد الالكتروني
رد #13 في: آذار 17, 2009, 10:08:58 مسائاً
الثوابت :
الثوابت لا تختلف عن المتغيرات إلا انه  قيمتها لا يمكن ان تتغير أي قيمه ثابته . يمكن اسناد القيمه إلى الثابت عند الاعلان  عن الثابت . const هي الكلمه الاساسيه للاعلان عن الثوابت .
 كود:
 
const
pi: Real = 3.14;

var
c, d: Real;

begin
d := 5;
c := pi * d;
end.التعامل مع السلاسل :

يمكنك في السلاسل ان تقوم بإستخراج  حرف معيّن من سلسله معينه


 كود:
program Strings;

var
s: String;
c: Char;

begin
s := 'Hello';
c := s[1];{c = 'H'}
end.كذلك يمكنك معرفة طول سلسله بإستخدام الامر Length :


 كود:
program Strings;

var
s: String;
l: Integer;

begin
s ;= 'Hello';
l := Length(s);{l = 5}
end.
للبحث عن شئ في سلسله يمكنك استخدام الامر Pos .  
البارامترات :
1: كلمة البحث
2: السلسله التي سيتم البحث بها  



 كود:
program Strings;

var
s: String;
p: Integer;

begin
s := 'Hello world';
p := Pos('world',s);
end.
الامر Delete يقوم بحذف الحروف من السلسله .
البارامترات :  
1: السلسله التي سيتم الحذف منها
2: بدء الحذف من اين
3: كمية الاحرف  التي سيتم حذفها


 كود:
program Strings;

var
s: String;

begin
s ;= 'Hello';
Delete(s,1,1);{s = 'ello'}
end.
الامر Copy يقوم بنسخ ما هو مطلوب من السلسله
البارامترات  :
1: السلسله التي سيتم النسخ منها
2: بدء النسخ من اين
3: كمية الاحرف  التي سيتم نسخها


 كود:
program Strings;

var
s, t: String;

begin
s ;= 'Hello';
t := Copy(s,1,3);{t = 'Hel'}
end.
الامر Insert يقوم بإضافة الحروف المطلوبه في السلسله المختاره  .
البارامترات :
1: الحروف التي سوف تضاف للسلسله
2: المتغير الذي سيتم  الاضافه إليه
3: من اين سيتم اضافة الحروف


 كود:
program Strings;

var
s: String;

begin
s := 'Hlo';
Insert('el',s,2);
end.
التحويلات :
الامر Str يقوم بتحويل المتغير من نوع integer  إلى string .


 كود:
program Convert;

var
s: String;
i: Integer;

begin
s ;= '123';
Str(i,s);
end.
الامر Val يقوم بتحويل المتغير من نوع string إلى integer  


 كود:
program Convert;

var
s: String;
i: Integer;

begin
i ;= 123;
Val(s,i,i);
end.
الامر Int يعطيك العدد قبل الفاصله في عدد حقيقي


 كود:
program Convert;

var
r: Real;

begin
r := Int(3.14);
end.الامر Frac يعطيك العدد بعد الفاصله في عدد حقيقي


 كود:
program Convert;

var
r: Real;

begin
r := Frac(3.14);
end.
الامر Round سيكمل عدد حقيقي إلى اقرب عدد صحيح


 كود:
program Convert;

var
i: Integer;

begin
i := Round(3.14);
end.الامر Trunc سيعطيك العدد قبل فاصلة كعدد صحيح .


 كود:
program Convert;

var
i: Integer;

begin
i := Trunc(3.14);
end.
الحاسوب يستخدم الارقام من 0 إلى 255 (1 بايت) لتمثيل الحروف  وهذه الحروف تسمّى بحروف ASCII
الامر Ord يحول الحروف إلى ارقام و الامر Chr  يحول الارقام إلى حروف . استخدم العلامه # قبل الحرف لتحويلها إلى احرف  


 كود:
program Convert;

var
b: Byte;
c: Char;

begin
c := 'a';
b := Ord(c);
c := Chr(b);
c := #123;
end.إضافات :
الامر Random يعطيك رقم عشوائي من الصفر إلى الرقم  الذي تعطيه اياه و الامر Randomize يستخدم لعمل ارقام اكثر عشوائيه بالإعتماد على  ساعة النظام .


 كود:
program Rand;

var
i: Integer;

begin
Randomize;
i := Random(101);
end.
 __________________


achraf.mouni

  • Hero Member
  • *****
    • مشاركة: 2439
    • مشاهدة الملف الشخصي
    • البريد الالكتروني
رد #14 في: آذار 17, 2009, 10:10:10 مسائاً
if then else :

الجمله الشرطيه if تسمح لك  بإتخاذ القرارات في برنامجك . المثال التالي يسأل المستخدم ان يدخل رقم و يخبر  المستخدم اذا كان الرقم اكبر من 5 .

 كود:
program Decisions;

var
i: Integer;

begin
Writeln('Enter a number');
Readln(i);
if i > 5 then
Writeln('Greater than 5');
end.و القرارات التي يمكنك اتخاذها مع الجمله الشرطيه if :  

> : اكبر من < : اصغر من
>= : اكبر من او يساوي <= : اصغر  من او يساوي
= : يساوي <> : لا يساوي

المثال السابق كان يخبرنا  فقط اذا كان الرقم اكبر من 5 , اذا كنا نريد ان يخبرنا انه ليس اكبر من 5 يجب ان  نستخدم else .

 كود:
program Decisions;

var
i: Integer;

begin
Writeln('Enter a number');
Readln(i);
if i > 5 then
Writeln('Greater than 5')
else
Writeln('Not greater than 5');
end.إذا كانت الحاله صحيحه (True) اختر الجزء الذي بعد then و اذا لم  تكن صحيحه (False) اختر الجزء الذي بعد else . ذلك لان الحاله i > 5 تعتبر من  النوع Boolean


 كود:
program Decisions;

var
i: Integer;
b: Boolean;

begin
Writeln('Enter a number');
Readln(i);
b := i > 5;
end.اذا كنت تريد ان تستخدم اكثر من حاله واحده يجب عليك ربط حاله  بالاخرى . لربط الحالات يمكنك استخدام AND او OR . اذا استخدمت AND يجب ان تكون  الحالتين صحيحتين و اذا استخدمت OR يجب ان تكون حاله واحده او الحالتين صحيحتين .  

 كود:
program Decisions;

var
i: Integer;

begin
Writeln('Enter a number');
Readln(i);
if (i > 1) and (i < 100) then
Writeln('The number is between 1 and 100');
end.
اذا كنت تريد كتابة امرين او اكثر بعد الجمله الشرطيه يجب  استخدام begin و end; .


 كود:
program Decisions;

var
i: Integer;

begin
Writeln('Enter a number');
Readln(i);
if i > 0 then
begin
Writeln('You entered ',i);
Writeln('It is a positive number');
end;
end.
 __________________