عبارات الشرط في الدلفي :
الكلمات الأساسية If----Then------Else
هناك بعض مظاهر البرمجة المشتركة في كل لغات البرمجة ومنها عبارة الشرط if
تستخدم هذه العبارة لفحص شرط معين وثم تنفذ شيفرة معينة إذا تحقق الشرط True وعدم تنفيذه في حالة عدم تحقق الشرط
:var
x:integer;
begin
x:=StrToInt(Edit1.Text)
if x>10 then
Label1.Caption:='عليك أن تدخل عدد من 1 -10';
end;
في المثال السابق يقوم البرنامج بطلب إدخال من المستخدم ويقارن المدخل بشرط بحيث إذا كان الشرط x>10 متحققا وكان العدد المدخل أكبر من عشرة ينفذ البرنامج الجملة بعد الشرط ويطلب بإدخال عدد أصغر من 10
تنفيذ عدة عبارات داخل الشرط
لنفترض أن لديك عدة سطور من البرمجة يجب أن تنفذ عندما يكون الشرط محققاً عندها سوف تحتاج إلى begin..end لتجعل هذه السطور تشكل كتلة واحدة يكون داخلها تنفيذ الشرط إذا كان متحقق
لنفترض أن لديك عدة سطور من البرمجة يجب أن تنفذ عندما يكون الشرط محققاً عندها سوف تحتاج إلى begin..end لتجعل هذه السطور تشكل كتلة واحدة يكون داخلها تنفيذ الشرط إذا كان متحقق
if x>10 then
begin
Label1.Caption:='عليك أن تدخل عدد من 1 -10';
Edit1.text:= '10';
end;
Else
أحياناً تحتاج لعمل تنفيذ ما إذا كان الشرط محققاً ولكن تريد البرنامج بأن يؤدي عملاً آخر إذا كان الشرط غير محقق مثل
أحياناً تحتاج لعمل تنفيذ ما إذا كان الشرط محققاً ولكن تريد البرنامج بأن يؤدي عملاً آخر إذا كان الشرط غير محقق مثل
if x=0 then
y:=0
else
y:=sin(x);
حلقات التكرار
تستخدم الحلقات لأداء عمل معين بشكل متكرر حتى يتحقق شرط معين.
ويتم إستخدامها في البرامج بشكل واسع
الحلقة التكرارية For
وهي تعد أكثر أنواع الحلقات التكرارية شيوعا
تتطلب هذه الحلقة محددتين القيمةالبدائية والقيمة النهائية إذا كانت الحلقة تصاعدية تستخدم To وإذا كانت تنازلية نستخدم كلمة DownTo .
الصيغة العامة لجملة for التصاعدية هي :
في المثال السابق حلقة تكرر الشيفرة الممثلة بعبارة statement حتى تصل إلى القيمة النهائية end_value . لا داعي لاستخدام begin , end إذا كان جسم التكرار يتكون من عبارة واحدة. ولكن عندما نريد إضافة العديد من السطور فنحتاج لإستخدام Begin – End
في المثال السابق كتلة الشيفرة يجب أن تكون initial_value أكبر من end_value وتتناقص قيمة العداد المتغير var واحداً في كل تكرار للحلقة
مثال عملي :
أنشئ مشروعاً جديداً
وأضف له زراً Button1 ومكون المفكرة Memo1 غير الخاصة Caption للزر واجعله " ابدأ " أنشئ الحدث OnClick له ، واكتب معالج الحدث كالتالي
الآن يمكنك تشغيل البرنامج ، إضغط الزر ابدأ وشاهد عمل الحلقة …
الحلقتين التكراريتين While - Repeat
والآن بعد أن رأيت كيف تعمل حلقة for لن يكون صعباً جداً عليك أن تطبق ذات المعنى على حلقتي while , repeat
لنلقي الآن نظرة عليهما الآن.
حلقة while
تختلف حلقة while عن الحلقة For في كونها تحتوي على شرط يفحص عند بداية كل تكرار للحلقة . طالما أن الشرط محقق تستمر الحلقة في التنفيذ ويتوقف التنفيذ للحلقة عندما يكون الشرط غير محقق .
إليك الشكل العام للحلقة while
حيث يفحص البرنامج الشرط cond_expr وعند تحقق الشرط فإن البرنامج ينفذ الأوامر بين الأمرين End – Begin ويعود لقراءة الشرط مرة أخرى وهكذا يستمر في تنفيذ التكرار إلى أن يصبح الشرط غير متحقق فيخرج من التكرار
وإذا كان جسم الحلقة مؤلف من عبارة واحدة فليس هناك داعي لإستخدام Begin – End
حلقة Repeat
مثل حلقة while ولكن الحلقة While تقوم بفحص الشرط في بداية الحلقة ولكن في حالة الحلقة Repeat فإن الشرط يفحص في نهاية الحلقة
إليك هذا البرنامج الذي يبين عمل الحلقة Repeat وهو نفس مثال البرنامج للحلقة For مع تعديل سطور البرنامج
ويمكن ملاحظة ان الحلقة repeat تتنفذ على الأقل مرة واحدة ولكن الحلقة While يمكن أن لا تنفذ ولا مرة
الإجرائين Break , Continue
قبل أن ننهي الحديث عن الحلقات يجب أن نتعرف على إجرائين يساعدان على التحكم بتنفيذ البرنامج ضمن الحلقة .
- استخدم الأمر Continue لتجبر البرنامج على الانتقال إلى نهاية الحلقة متجاوزاً كل العبارات التي تليه .
- استخدم الأمر Break لتوقف عمل الحلقة مباشرة ولاتستحدم خارج الحلقات.
عبارة case
يمكن اعتبار تركيب case كتركيب if موسعة ، إنها تمكنك من تنفيذ عبارة واحدة من عدة كتل برمجة معتمدة على نتيجة تعبير معين
التعبير ممكن يكون متغير ، أو نتيجة استدعاء تابع أو أية شفرة من باسكال كلها تعطي تعبيرا
للتعرف على الصيغة العامة لتركيب case نشاهد المثال
عندما يبدأ البرنامج في تنفيذ تركيب case سيمر على قيمة val_1 ويقارن بين الثابت val_1 والمتغير Var إذا وجدهما متساويين سيقوم البرنامج بتنفيذ جميع الأوامر التي تليها حتى يصل إلى نهاية الكتلة ( تحدد الكتلة بالعبارات بين Begin , end في حالة استخدام أكثر من عبارة واحدة كما سبق شرحه ) أما إذا لم يجدهما متساويين فإنة سيتخطاها بجميع العبارات الواردة بعدها وينتقل إلى الثابت الآخر ويكرر المحاولة وهكذا يمر البرنامج عليها كلها فإذا لم يجد الثابت المطلوب منها فإنه سيتخطاها إلى كلمة else وينفذ العبارات الواردة بعدها حتى نهاية التركيب .
ملاحظة هامة :
يجب أن يعطى التعبير ضمن الدالة case قيمة تنتمي إلى نمط مرتب من الأنواع ( Integer,Byte,Word )
بحيث لايمكنك كتابة مايلي مثلاً
يمكن جعل البرنامج ينفذ كتلة أوامر عند أكثر من قيمة
كما أن إستخدام الدالة else في الإجراء Case يعتبر اختياري ومثال على ذلك
و في الكتاب تعلم عبارات الشرط و التكرارتستخدم الحلقات لأداء عمل معين بشكل متكرر حتى يتحقق شرط معين.
ويتم إستخدامها في البرامج بشكل واسع
الحلقة التكرارية For
وهي تعد أكثر أنواع الحلقات التكرارية شيوعا
تتطلب هذه الحلقة محددتين القيمةالبدائية والقيمة النهائية إذا كانت الحلقة تصاعدية تستخدم To وإذا كانت تنازلية نستخدم كلمة DownTo .
الصيغة العامة لجملة for التصاعدية هي :
for var := initial_value to end_value do
begin
statment;
end;
في المثال السابق حلقة تكرر الشيفرة الممثلة بعبارة statement حتى تصل إلى القيمة النهائية end_value . لا داعي لاستخدام begin , end إذا كان جسم التكرار يتكون من عبارة واحدة. ولكن عندما نريد إضافة العديد من السطور فنحتاج لإستخدام Begin – End
الصيغة العامة لجملة for التنازلية:
for var := initial_value DownTo end_value do
begin
statment;
end;
في المثال السابق كتلة الشيفرة يجب أن تكون initial_value أكبر من end_value وتتناقص قيمة العداد المتغير var واحداً في كل تكرار للحلقة
مثال عملي :
أنشئ مشروعاً جديداً
وأضف له زراً Button1 ومكون المفكرة Memo1 غير الخاصة Caption للزر واجعله " ابدأ " أنشئ الحدث OnClick له ، واكتب معالج الحدث كالتالي
var
I:Integer;
begin
Memo1.Clear;
for I := 0 to 9 do
Memo1.Lines.Add('هذا السطر رقم '+IntToStr(I));
end;
الآن يمكنك تشغيل البرنامج ، إضغط الزر ابدأ وشاهد عمل الحلقة …
الحلقتين التكراريتين While - Repeat
والآن بعد أن رأيت كيف تعمل حلقة for لن يكون صعباً جداً عليك أن تطبق ذات المعنى على حلقتي while , repeat
لنلقي الآن نظرة عليهما الآن.
حلقة while
تختلف حلقة while عن الحلقة For في كونها تحتوي على شرط يفحص عند بداية كل تكرار للحلقة . طالما أن الشرط محقق تستمر الحلقة في التنفيذ ويتوقف التنفيذ للحلقة عندما يكون الشرط غير محقق .
إليك الشكل العام للحلقة while
While cond_expr do
Begin
Statements;
End;
حيث يفحص البرنامج الشرط cond_expr وعند تحقق الشرط فإن البرنامج ينفذ الأوامر بين الأمرين End – Begin ويعود لقراءة الشرط مرة أخرى وهكذا يستمر في تنفيذ التكرار إلى أن يصبح الشرط غير متحقق فيخرج من التكرار
وإذا كان جسم الحلقة مؤلف من عبارة واحدة فليس هناك داعي لإستخدام Begin – End
حلقة Repeat
مثل حلقة while ولكن الحلقة While تقوم بفحص الشرط في بداية الحلقة ولكن في حالة الحلقة Repeat فإن الشرط يفحص في نهاية الحلقة
إليك هذا البرنامج الذي يبين عمل الحلقة Repeat وهو نفس مثال البرنامج للحلقة For مع تعديل سطور البرنامج
ويمكن ملاحظة ان الحلقة repeat تتنفذ على الأقل مرة واحدة ولكن الحلقة While يمكن أن لا تنفذ ولا مرة
Var
I:Integer;
begin
I:=5;
Memo1.Clear;
Repeat
Memo1.Lines.Add('هذا السطر رقم '+IntToStr(I));
Dec(I);
Until I=-1;
end;
الإجرائين Break , Continue
قبل أن ننهي الحديث عن الحلقات يجب أن نتعرف على إجرائين يساعدان على التحكم بتنفيذ البرنامج ضمن الحلقة .
- استخدم الأمر Continue لتجبر البرنامج على الانتقال إلى نهاية الحلقة متجاوزاً كل العبارات التي تليه .
- استخدم الأمر Break لتوقف عمل الحلقة مباشرة ولاتستحدم خارج الحلقات.
عبارة case
يمكن اعتبار تركيب case كتركيب if موسعة ، إنها تمكنك من تنفيذ عبارة واحدة من عدة كتل برمجة معتمدة على نتيجة تعبير معين
التعبير ممكن يكون متغير ، أو نتيجة استدعاء تابع أو أية شفرة من باسكال كلها تعطي تعبيرا
للتعرف على الصيغة العامة لتركيب case نشاهد المثال
case var of
val_1 : statement_1;
val_2 : statement_2;
val_3 : statement_3;
;
;
else
statement_else;
end;
عندما يبدأ البرنامج في تنفيذ تركيب case سيمر على قيمة val_1 ويقارن بين الثابت val_1 والمتغير Var إذا وجدهما متساويين سيقوم البرنامج بتنفيذ جميع الأوامر التي تليها حتى يصل إلى نهاية الكتلة ( تحدد الكتلة بالعبارات بين Begin , end في حالة استخدام أكثر من عبارة واحدة كما سبق شرحه ) أما إذا لم يجدهما متساويين فإنة سيتخطاها بجميع العبارات الواردة بعدها وينتقل إلى الثابت الآخر ويكرر المحاولة وهكذا يمر البرنامج عليها كلها فإذا لم يجد الثابت المطلوب منها فإنه سيتخطاها إلى كلمة else وينفذ العبارات الواردة بعدها حتى نهاية التركيب .
ملاحظة هامة :
يجب أن يعطى التعبير ضمن الدالة case قيمة تنتمي إلى نمط مرتب من الأنواع ( Integer,Byte,Word )
بحيث لايمكنك كتابة مايلي مثلاً
case str of
'Own' : {code};
'Two' : {code};
end;
يمكن جعل البرنامج ينفذ كتلة أوامر عند أكثر من قيمة
كما أن إستخدام الدالة else في الإجراء Case يعتبر اختياري ومثال على ذلك
case x of
1: y:=sin(x);
2,3 : y:=cos(x);
4,5,6: y:=x;
end
كتاب رائع جدا فيه كل الجوانب الخاصة بعبارات الشرط و التكرار
نترككم مع التحميل
قد يعجبك ايضا