إشترك

احترف التعامل مع الجمل الشرطية




بسم الله الرحمان الرحيم
السلام عليكم و رحمة الله تعالى و بركاته درس اليوم هو عن التعامل مع الجمل الشرطية بجميع الطريق من البداية حتى الاحتراف و نبدأ على بركة الله :
التعامل مع الجملة الشرطية 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  من هنا
و السلام عليكم و رحمة الله تعالى و بركاته
جميع الحقوق محفوظة لــ تعلم دلفي بالعربية 2015 ©