بسم الله الرحمان الرحيم
السلام عليكم و رحمة
الله تعالى و بركاته درس اليوم هو عن التعامل مع الجمل الشرطية بجميع الطريق من البداية
حتى الاحتراف و نبدأ على بركة الله :
التعامل مع الجملة الشرطية if
…….then……..else..;
|
تسمح لك هذه الجملة
بالسماح بتنفيذ أمر ما في حالة توفرت الشروط كمثال : إذا
آمنت بالله إذاً ستدخل الجنة و إلا ستدخل النار
و الأمر لا يختلف كثيرا في حال البرمجة بلغة الدلفي تابع معي هذا الأمثلة لكي تفهم
الشرح :
المثال 1 : أضف المكونات
التالية : Button1 و Edit1 و Shape1 حيث ستكون أداة Edit1 لكتابة النقطة و أداة Button1 للتحقق من النقطة و أداة Shape1 ستكون لإظهار اللون إما جيد أو عادي
أو سيء .بعد أن تضيف المكونات قم بكتابة الكود التالي في حدث الضغط على الزر button1 :
Begin
if edit1.Text<='10' then
shape1.Brush.Color:=clred;
|
سيقوم هذا بالتالي : إذا كان
النص الموجود في edit1 أقل من أو يساوي 5 إذا لون أداة shape1 هو أحمر و لكن تابع معي :
إذا كانت أقل من 10 فاللون أحمر و إذا كانت النقطة ما بين 11 و 15 فاللون أصفر و
إذا كانت النقطة أكثر من 16 و لا تتجاوز 20 فاللون أخر هل يمكن
للطريقة السابقة أن تحل لنا هذا المشكل سنجرب :
if edit1.Text<='10' then
shape1.Brush.Color:=clred;
if edit1.Text>='11' then
shape1.Brush.Color:=clyellow;
if edit1.Text<='15' then
shape1.Brush.Color:=clyellow;
if edit1.Text>='16' then
shape1.Brush.Color:=cllime;
if edit1.Text<='20' then
shape1.Brush.Color:=cllime;
|
لا تخف الأمر لن يعمل كما تريده جربه و قم بكتابة النقطة 1 فإنك سترى بأن اللون
أصبح أخضر الآن جرب أي عدد و سيصبح اللن أحمر هل تعرف لماذا :
أولا دلفي يقوم بتنفيذ الأوامر حسب الترتيب فإذا كان الأمر الأول بالإغلاق و
الثاني بالتلوين فلن يعمل الأمر الثاني و هذا أمر بديهي
ثانيا : الأعداد 5 أو 15 أو 8 أقل من العدد 20 فالبرنامج يقوم بالأتي مثلا عندما
تقوم بكتابة العدد 3 : يطابقه مع الشرط الأول فيتغير اللون إلى الأحمر و لكنه لن ينتهي
هنا بل يطابقه مع الشرط الثاني و الثالث فيجد أنه يتحقق معهما فيقوم بتغير الألوان
بسرعة من الأحمر إلى الأصفر إلى الأخضر جرب حذف الشرط الأخير و ستجد أن جميع الأعداد
الأقل من 15 تغير اللون للأصفر . أتمنى أن يكون الشرح مفهوما و الآن سنحاول إيجاد طريقة
لحل المشكل :
الحل الأول : يتطلب الأمر أن تقوم بكتابة شرط لكل عدد أي استخدام المساوات فقط
و يعني 20 شرطا
الحل الثاني : استخدام جملة In لتحديد المدى و للقيام بهذه المهمة
يجب أن تكون على معرفة بسيطة بالمتغيرات و التعامل معها و سنشرح عمل هذه الجمة بعد
أن نقوم بحل المشكل السابق :
المثال2 : أحضر نفس المكونات السابقة في المثال الأول و بعدها قم بكتابة الكود
التالي :
Var
I:integer;
Begin
I:=strtoint(edit1.text);
If I in [0..10] then
Shape1.brush.color:=clred;
|
شرح الكود :
في البداية قمنا بتعريف متغير i من نوع رقمي صحيح integer و بعدها بدأ الأمر
حيث قمنا بالإشارة إلى أن قيمة المتغير i تساوي قيمة النص الموجود في edit1 أما strtoint فهي للتحويل من القيمة النصية إلى القيمة الرقمية
لكي يتم حسابها .
ثم قمنا بكتابة الجملة
الشرطية التالية : إذا كانت قيمة المتغير i " الذي
قمنا بمساواته بقيمة النص الموجود في الأداة " واحدة من القيم المحصورة في المدى
التالي " المدى يبدأ من 0 إلى 10
" إذا لون أداة shape1 سيصبح أحمر
الحل الثالث : باستخدام جمل ربط الشرط
و التي يمكن شرحها هكذا :
جملة and
تعني الربط بين الشرطين و تحقق
كلاهما لتنفيذ الأمر
|
جملة Or
تعني تحقق شرط من الشرطين لكي
يتم تنفيذ الأمر
|
جملة xor تعني تنفيذ
الأمر في حال تحقق شرط واحد من الشرطين
|
جملة not
تعني نفي الشرط فإذا كان الشرط
صحيح يصبح خاطئ
|
في حالتنا يمكننا استخدام جملة or في هذا المثال
:
مثال 3 :
قم بإضافة نفس المكونات السابقة و اكتب الأمر التالي في حدث الضغط على الزر
var
i:integer;
begin
i:=strtoint(edit1.text);
if (i=1) or (i=2) or (i=3) then
shape1.Brush.Color:=clred;
|
شرح الكود : نفس الشرح السابق ما عدا أن في جملة الشرط هذه قمنا بتحديد مجموعة
من القيم لمطابقتها و هي 1 و 2 و 3 فإذا كان النص الموجود في الأداة edit1 هو أحد هذه القيم يتحقق الشرط و ينفذ
الأمر و لكن إذا كانت هناك مجموعة كبيرة من الأوامر كيف يمكن للبرنامج تنفيذها في آن
واحد . تابع المثال :
مثال 4 : أضف نفس المكونات السابقة و بعدها أضف الكود التالي في حدث الضغط على الزر
var
i:integer;
begin
i:=strtoint(edit1.text);
if (i=1) or (i=2) or (i=3) then
begin
shape1.Brush.Color:=clred;
showmessage('bad');
end;
end;
end.
|
الشرح : نفسه و لكن قمنا بإضافة begin جديدة و هي لبداية أمر جديد و لكن
يجب إضافة end أخرى لأن كل بداية لكود يجب أن تكون لها نهاية و الكود الذي كتبته كامل
لذلك قم بإضافة end ; واحدة لسابقتها
و الآن سننتقل لمثال آخر يشرح لنا else التي تعمل في حال عدم تحقق الشرط
و أرجوا متابعة المثال التالي :
المثال 5:أضف المكونات التالية edit1/button1/button2 و اجعل خاصية visible لbutton2 تصبح false لكي لا تظهر و بعدها أكتب الأمر
التالي في حدث الضغط على الزر button1
If edit1.text='1234' then
button2.visible:=true else
Showmessage('this is not
true');
|
الشرح : يقوم هذا البرنامج بمطابقة النص المكتوب في أداة edit1 فإذا كان 1234 فستظهر أداة button2 و أذا كان غير ذلك فستظهر له رسالة فيها this is not true و الآن انتهينا
من هذا الجزء
أنتبه : يجب أن لا تكتب ; قبل كلمة else
التعامل مع الجملة الشرطية
case…of
|
يمكن اعتبارها البديل الأنسب لسابقتها لتدخلها في المهمات الصعبة كالموجودة
في المثال التالي:
مثال 6 : في هذا المثال سنقوم بإضافة المكونات التالية : button1 / edit1 و بعدها قم بكتابة الكود التالي في حدث الضغط على الزر button1
Var
X:integer;
Begin
X:=strtoint(edit1.text);
Case x of
1:showmessage('bad');
2:showmessage('bad');
3:showmessage('bad');
4:showmessage('bad');
5:showmessage('bad');
6:showmessage('bad');
7:showmessage('bad');
8:showmessage('bad');
9:showmessage('bad');
10:showmessage('bad');
11:showmessage('good');
|
شرح الكود :
قمنا بتعريف متغير
x من نوع integer و بعدها بدء الكود في بدايته قمنا بجعل قيمة النص الموجود في أداة edit1 تساوي قيمة المتغير x و بعدها كتبنا الجملة الشرطية التي
معناها الإجمالي هو " إذا كان x أحد القيم المطابقة للقيم المذكورة
فسينفذ الأمر الذي يقابل كل قيمة " و بعدها كتبنا قيما مثلا إذا كانت القيمة هي
8 فسيظهر رسالة مكتوب فيها سيء bad و لكن ما ذا عن المدى . نعم يجب
أن نعرف كيف نتعامل مع المدى و الطريقة في الكود التالي :
Var
X:integer;
Begin
X:=strtoint(edit1.text);
Case x of
1..10:showmessage('bad');
11..15:showmessage('good');
16..20:showmessage('very
good');
|
ما عليك إلا كتابة أعلى و أصغر قيمة في المدى و بينهما .. نقطتان و لكن إذا ما كانت هناك مجموعة من الأوامر في حال
تحقق شرط ما .تابع الكود التالي :
Var
X:integer;
Begin
X:=strtoint(edit1.text);
Case x of
1..10:
Begin
form1.caption:='bad';
showmessage('bad');
End;
11..15:
Begin
form1.caption:='good';
showmessage('good');
End;
16..20:
End;
Begin
form1.caption:='very good';
showmessage('very good');
|
الأمر واضح يجب أن تكتب الشرط مثلا " 15..16: " و بعدها تكتب begin ثم تكتب الأوامر و بعدها تكتب end; و لكن في حال لم يتحقق شرط ما يمكن
إضافة else بعد نهاية أوامر تحقق الشرط كما يوضح الكود التالي :هذا الكود جزء فقط
Case x of
1..10:
Begin
form1.caption:='bad';
showmessage('bad');
End;
Else
showmessage('not true');
|
و بهذا ينتهي درس اليوم و ألقاكم في درس آخر و لمن وجد
أخطاء في الأكواد تفضلوا الموضوع في ملف pdf من هنا
ليست هناك تعليقات