عرض مشاركة واحدة
قديم 31-05-2012, 09:39 PM   المشاركة رقم: 25
الكاتب
مازن المشهداني
عضو فعال
الصورة الرمزية مازن المشهداني

البيانات
تاريخ التسجيل: Apr 2011
رقم العضوية: 3568
المشاركات: 641
بمعدل : 0.13 يوميا

الإتصالات
الحالة:
مازن المشهداني غير متواجد حالياً
وسائل الإتصال:

كاتب الموضوع : مازن المشهداني المنتدى : منتدى تعليم الفوركس
افتراضي الدرس الخامس .. الحلقات والقرارات (جزء 2)

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

مرحبا بكم في الدرس الخامس ... الحلقات والقرارات (جزء 2)

تحدثنا في الدرس السابق عن الحلقات

وكما ذكرنا من قبل , فالحلقات هي احدى طريقتين تقومان على تغيير التسلسل الطبيعي لتنفيذ اوامر البرنامج من القمة للقاع ( راجع الدرس السابق ).

حسنا , الطريقة الأخرى هي القرارات decisions .

القرارات decision هي جملة برمجية تقوم بعمل انتقال امر برمجي لمرة واحدة لجزء أخر من البرنامج معتمدا على قيمة المتغير.

(هذا الدرس اسهل من الدرس السابق وستروا بأنفسكم )

هناك عدة انواع من القرارات في لغة MQL4 :

1- الجملة الشرطية ( إذا ) .. ( if ) :

( إذا أخطأ علي فاضربوه ) .. حسنا ماذا لو لم يخطئ علي ؟ فلن يتم تنفيذ البرنامج (هذا مثال سريع قبل الدخول في التفاصيل )

الجملة ( if ) هي اسهل انواع الجمل الشرطية ( القرارات ).

دعونا نأخذ مثالا :

كود PHP:

if( x < 100 )

Print("hi");


هنا الكلمة المحجوزة ( if ) جاء بعدها القوسان ( ) وبداخلهم جاء تعبير الأختبار ( هل تتذكروه ) على هذه الصورة ( X<100 ) , متى جاءت النتيجة بين القوسين صحيحة true سيقوم جسد الجملة بتنفيذ الأمر (Print("hi")نقره لعرض الصورة في صفحة مستقلة ,, وكمتى جاءت خاطئة false فسينتقل التسلسل التنفيذي للأوامر الى جزء أخر من البرنامج .

* الجمل المتعددة في جسد الجملة ( if ) (الأوامر ) :

مثل ما رأينا في الحلقات , فالجملة ( if ) يمكن ان تتكون من اكثر من جملة تنفيذية ويحاطون بالقوسين { }.

( لاحظ انه لو وجدت جملة واحدة لن نحتاج الى هذه الأقواس { } )

مثال :

كود PHP:
if(current_price==stop_lose)

{

Print("you have to close the order");

PlaySound("warning.wav");

}


ملاحظة : العلامة == الموجودة في تعبير الأختبار , هي احد عمليات المقارنة وليست = عملية مساواة (راجع درس العمليات والتعبيرات) ... هذه مصدر العديد من أخطاء الكتابة البرمجية نظرا للتشابه بينهم .

* التداخل Nesting :

يمكن للحلقات والقرارات ان يتداخلوا في بعضهم البعض , بمعنى انه يمكنك كتابة حلقة ( for ) داخل جملة شرطية ( if ) والعكس بالعكس ... تسمى هذه العملية بالتداخل Nesting .

مثال :

كود PHP:
for(int i=2 ; i<10 ; i++)

if(i%2==0)

{

Print("It's not a prime nomber");

PlaySound("warning.wav");

}




في هذا المثال تم وضع الجملة الشرطية (القرار) ( if ) بداخل الحلقة ( for ) .

2- الجملة الشرطية ( إذا .. وإلا ) .. ( if .. else ) :

( اذا أخطأ علي فاضربوه والا فأكرموه ) هنا البرنامج سينفذ ايا من الأمرين , ان أخطأ علي true سيتم ضربه , وان لم يخطئ false سيتم تنفيذ الأمر الثاني وهو الأكرام . نقره لعرض الصورة في صفحة مستقلة .

هذه الجملة تختلف عن سابقتها ان لها نتيجيتين واحدة في حالة true والأخرى false ( في الجملة if كانت هناك نتيجة واحدة فقط في حالة صحة تعبير الأختبار true اما الحالة false فينتقل البرنامج الى جزء أخر منه )

تتكون هذه الجملة من الكلمة المحجوزة if متبوعة بجملة تنفيذ او اكثر , وكلمة محجوزة أخرى هي else متبوعة بجملة تنفيذ او اكثر .

مثال :

كود PHP:
if(current_price>stop_lose)

Print("It’s too late to stop, please stop!");

else

Print("you playing well today!");



ترجمة هذا المثال على النحو التالي :

إذا (السعر الحالي > وقف الخسارة )

اطبع جملة ("انت متأخر جدا , ارجوك اغلق العقد")

والا

اطبع جملة ("انت تضارب جيدا اليوم")

اعتقد الترجمة هذه تشرح الموضوع كاملا نقره لعرض الصورة في صفحة مستقلة

* التداخل Nesting في جملة ( if .. else ) :

لايمكن لجملة ( if .. else ) ان تتداخل مع جملة ( if ) , ولكن يمكن ان نجعل جملة ( if .. else ) تتداخل مع جملة ( if .. else ) أخرى ... وهكذا .

في هذا المثال :

كود PHP:
if(current_price>stop_lose)

Print("It’s too late to stop, please stop!");

if(current_price==stop_lose)

Print("It’s time to stop!");

else

Print("you playing well today!");




توجد مشكلة برمجية هنا , حيث الجملتين الشرطيتين هنا متعارضتين وسيواجه الكومبيوتر مشكلة ايهما ينفذ ؟

ان جاء السعر اعلى من وقف الخسارة هناك امران احداهما "انتا متاخر جدا , ارجوك اغلق العقد " في الجملة الأولى ,, والأخرى "انت تضارب جيدا اليوم" ( نتيجة انه false ان لم يحدث == في الجملة الثالثة .

وهذا خطا برمجي ان يكون هناك اكثر من امر شبيه عند تحقق شروط متشابهة ( فأيهما ينفذ ؟)

هناك حل لهذا الأمر :

* ان نحيط الجملة ( if.. else ) بكاملها بالقوسين { }

مثال :

كود PHP:
if(current_price>stop_lose)

{

Print("It’s too late to stop, please stop!");

if(current_price==stop_lose)

Print("It’s time to stop!");

else

Print("you playing well today!");

}




ومن الأفضل تجنب التداخل مع جملة ( if .. else )

3- الجملة الشرطية ( التوزيع ) .. ( switch ) :

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

دعونا نرى مثالا :

كود PHP:
switch(x)

{

case 'A':

Print("CASE A");

break;

case 'B':

case 'C':

Print("CASE B or C");

break;

default:

Print("NOT A, B or C");

break;

}




كيف يعمل هذا الكود (الجملة البرمجية في المثال) ؟

تبدا الجملة بالكلمة المحجوزة switch لتوزع اوامر التنفيذ لقيم النتغير x المختلفة .

وتاتي الأوامر بين القوسين { } .

الجملة switch تربط المتغير x بجميع القيم الداخلة للبرنامج وتتعامل معها على هذا النحو :

في حالة x==A سيخرج الكومبيوتر الناتج ( case A ) والا سينفذ الأمر Break (راجع هذا الأمر في الدرس السابق)

في حالة x==B او x==C سيخرج الكومبيوتر الناتج ( case B or case C ) وذلك لعدم وجود الأمر Brea.

في حالة !==x اي ان x لا تتطابق مع اي من القيم السابقة سيخرج الكومبيوتر النتيجة الأفتراضية ( Not caseA,caseB or case C )



في الدرس القادم بأذن الله سنتكلم عن الوظائف في لغة MQL4



التوقيع

عرض البوم صور مازن المشهداني  
رد مع اقتباس
  #25  
قديم 31-05-2012, 09:39 PM
مازن المشهداني مازن المشهداني غير متواجد حالياً
عضو فعال
افتراضي الدرس الخامس .. الحلقات والقرارات (جزء 2)

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

مرحبا بكم في الدرس الخامس ... الحلقات والقرارات (جزء 2)

تحدثنا في الدرس السابق عن الحلقات

وكما ذكرنا من قبل , فالحلقات هي احدى طريقتين تقومان على تغيير التسلسل الطبيعي لتنفيذ اوامر البرنامج من القمة للقاع ( راجع الدرس السابق ).

حسنا , الطريقة الأخرى هي القرارات decisions .

القرارات decision هي جملة برمجية تقوم بعمل انتقال امر برمجي لمرة واحدة لجزء أخر من البرنامج معتمدا على قيمة المتغير.

(هذا الدرس اسهل من الدرس السابق وستروا بأنفسكم )

هناك عدة انواع من القرارات في لغة MQL4 :

1- الجملة الشرطية ( إذا ) .. ( if ) :

( إذا أخطأ علي فاضربوه ) .. حسنا ماذا لو لم يخطئ علي ؟ فلن يتم تنفيذ البرنامج (هذا مثال سريع قبل الدخول في التفاصيل )

الجملة ( if ) هي اسهل انواع الجمل الشرطية ( القرارات ).

دعونا نأخذ مثالا :

كود PHP:
if( x < 100 )

Print("hi");


هنا الكلمة المحجوزة ( if ) جاء بعدها القوسان ( ) وبداخلهم جاء تعبير الأختبار ( هل تتذكروه ) على هذه الصورة ( X<100 ) , متى جاءت النتيجة بين القوسين صحيحة true سيقوم جسد الجملة بتنفيذ الأمر (Print("hi")نقره لعرض الصورة في صفحة مستقلة ,, وكمتى جاءت خاطئة false فسينتقل التسلسل التنفيذي للأوامر الى جزء أخر من البرنامج .

* الجمل المتعددة في جسد الجملة ( if ) (الأوامر ) :

مثل ما رأينا في الحلقات , فالجملة ( if ) يمكن ان تتكون من اكثر من جملة تنفيذية ويحاطون بالقوسين { }.

( لاحظ انه لو وجدت جملة واحدة لن نحتاج الى هذه الأقواس { } )

مثال :

كود PHP:
if(current_price==stop_lose)

{

Print("you have to close the order");

PlaySound("warning.wav");

}


ملاحظة : العلامة == الموجودة في تعبير الأختبار , هي احد عمليات المقارنة وليست = عملية مساواة (راجع درس العمليات والتعبيرات) ... هذه مصدر العديد من أخطاء الكتابة البرمجية نظرا للتشابه بينهم .

* التداخل Nesting :

يمكن للحلقات والقرارات ان يتداخلوا في بعضهم البعض , بمعنى انه يمكنك كتابة حلقة ( for ) داخل جملة شرطية ( if ) والعكس بالعكس ... تسمى هذه العملية بالتداخل Nesting .

مثال :

كود PHP:
for(int i=2 ; i<10 ; i++)

if(i%2==0)

{

Print("It's not a prime nomber");

PlaySound("warning.wav");

}




في هذا المثال تم وضع الجملة الشرطية (القرار) ( if ) بداخل الحلقة ( for ) .

2- الجملة الشرطية ( إذا .. وإلا ) .. ( if .. else ) :

( اذا أخطأ علي فاضربوه والا فأكرموه ) هنا البرنامج سينفذ ايا من الأمرين , ان أخطأ علي true سيتم ضربه , وان لم يخطئ false سيتم تنفيذ الأمر الثاني وهو الأكرام . نقره لعرض الصورة في صفحة مستقلة .

هذه الجملة تختلف عن سابقتها ان لها نتيجيتين واحدة في حالة true والأخرى false ( في الجملة if كانت هناك نتيجة واحدة فقط في حالة صحة تعبير الأختبار true اما الحالة false فينتقل البرنامج الى جزء أخر منه )

تتكون هذه الجملة من الكلمة المحجوزة if متبوعة بجملة تنفيذ او اكثر , وكلمة محجوزة أخرى هي else متبوعة بجملة تنفيذ او اكثر .

مثال :

كود PHP:
if(current_price>stop_lose)

Print("It’s too late to stop, please stop!");

else

Print("you playing well today!");



ترجمة هذا المثال على النحو التالي :

إذا (السعر الحالي > وقف الخسارة )

اطبع جملة ("انت متأخر جدا , ارجوك اغلق العقد")

والا

اطبع جملة ("انت تضارب جيدا اليوم")

اعتقد الترجمة هذه تشرح الموضوع كاملا نقره لعرض الصورة في صفحة مستقلة

* التداخل Nesting في جملة ( if .. else ) :

لايمكن لجملة ( if .. else ) ان تتداخل مع جملة ( if ) , ولكن يمكن ان نجعل جملة ( if .. else ) تتداخل مع جملة ( if .. else ) أخرى ... وهكذا .

في هذا المثال :

كود PHP:
if(current_price>stop_lose)

Print("It’s too late to stop, please stop!");

if(current_price==stop_lose)

Print("It’s time to stop!");

else

Print("you playing well today!");




توجد مشكلة برمجية هنا , حيث الجملتين الشرطيتين هنا متعارضتين وسيواجه الكومبيوتر مشكلة ايهما ينفذ ؟

ان جاء السعر اعلى من وقف الخسارة هناك امران احداهما "انتا متاخر جدا , ارجوك اغلق العقد " في الجملة الأولى ,, والأخرى "انت تضارب جيدا اليوم" ( نتيجة انه false ان لم يحدث == في الجملة الثالثة .

وهذا خطا برمجي ان يكون هناك اكثر من امر شبيه عند تحقق شروط متشابهة ( فأيهما ينفذ ؟)

هناك حل لهذا الأمر :

* ان نحيط الجملة ( if.. else ) بكاملها بالقوسين { }

مثال :

كود PHP:
if(current_price>stop_lose)

{

Print("It’s too late to stop, please stop!");

if(current_price==stop_lose)

Print("It’s time to stop!");

else

Print("you playing well today!");

}




ومن الأفضل تجنب التداخل مع جملة ( if .. else )

3- الجملة الشرطية ( التوزيع ) .. ( switch ) :

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

دعونا نرى مثالا :

كود PHP:
switch(x)

{

case 'A':

Print("CASE A");

break;

case 'B':

case 'C':

Print("CASE B or C");

break;

default:

Print("NOT A, B or C");

break;

}




كيف يعمل هذا الكود (الجملة البرمجية في المثال) ؟

تبدا الجملة بالكلمة المحجوزة switch لتوزع اوامر التنفيذ لقيم النتغير x المختلفة .

وتاتي الأوامر بين القوسين { } .

الجملة switch تربط المتغير x بجميع القيم الداخلة للبرنامج وتتعامل معها على هذا النحو :

في حالة x==A سيخرج الكومبيوتر الناتج ( case A ) والا سينفذ الأمر Break (راجع هذا الأمر في الدرس السابق)

في حالة x==B او x==C سيخرج الكومبيوتر الناتج ( case B or case C ) وذلك لعدم وجود الأمر Brea.

في حالة !==x اي ان x لا تتطابق مع اي من القيم السابقة سيخرج الكومبيوتر النتيجة الأفتراضية ( Not caseA,caseB or case C )



في الدرس القادم بأذن الله سنتكلم عن الوظائف في لغة MQL4




رد مع اقتباس