قسم الميكروكنترولر والروبوت ودوائر الاتصال بالحاسب الالي قسم المتحكمات الـ microcontroller و المعالجات microprocessor و التحكم الرقمي بالكمبيوتر CNC والانظمة الآلية والروبوت Robots

أدوات الموضوع

الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,894
نشاط [ F.Abdelaziz ]
قوة السمعة:332
قديم 06-02-2013, 04:18 PM المشاركة 1   
افتراضي عبارات إتخاذ القرار أو العبارات الشرطية conditional statement Twitter FaceBook Google+



عبارات إتخاذ القرار أو العبارات الشرطية conditional statement
أولا : عبارات إتخاذ القرار باستخدام if
1- عبارة if
تستخدم عبارة if فى تنفيذ "عبارة شرط" . أى أنها عبارة " إتخاذ قرار" decision إستنادا على النتيجة المنطقية ( true=1 أو false=0 ) لاختبار شرط هذه العبارة .
الصيغة العامة



كود:
if (condition) statement;
or
if (condition) { block commands};


فى لغة السى , أى عدد "غير الصفر" يعتبر "حقيقى" أو صواب true . هذا يعنى أن الشرط فى لغة السى يعتبر "غير حقيقى " أو خطأ false فقط عندما تكون نتيجة تقييمه (عائده) بصفر (0) . أى قيمة أخرى , حتى لو كانت سالبة تعتبر "حقيقى" true أو غير صفر .
فى عبارة if , إذا كان الشرط (condition)حقيقى (غير صفرى) true (non-zero)فسوف يتم تنفيذ العبارة statement أو مجموعة (بلوك) الأوامر { block commands}, وأن لم يكن , إى عندما تكون نتيجة تقييم الشرط بصفر false (0 zero) فسوف يتم تجاهل العبارة .

مثال :



يتم تخصيص القيمة 10 عشرى للمتغير "a" بالنوع char (char a = 10) , هذه القيمة تختلف عن الصفر أى أن a=true . بالتالى عند الوصول إلى الأمر if (a) b --; يتم تقييم الشرط (a) فإن كانت النتيجة صواب true , وهو بالفعل صواب , يتم تنفيذ العبارة b – (تناقص المتغير b بواحد ) .


كود:
void main () 
{
char a = 10;
char b = 0;
if (a) b --;
}
كود:





2- عبارة if – else :
يمكنك تنفيذ عبارة آخرى أو مجموعة (بلوك) من العبارات إذا كانت نتيجة تقييم الشرط بصفر false باستخدام عبارة if – else .

الصيغة :

كود:
if (expression) command 1 else Command 2
مثال


كود:
if (x> 5)
z = 10;
else
z = 20;


العبارة if (x> 5) مهمتها "إختبار" : "هل نتيجة تقييم الشرط (x> 5) (وهو عبارة مقارنة ) تكون صواب true أم غير صواب false ؟ " .
إذا كان الجواب (النتيجة) صواب true عندئذ يتم تنفيذ السطر z = 10 .
وإذا كان الجواب (النتيجة) غير صواب false ,أى كانت "x" أقل من أو تساوى 5 ,عندئذ يتم تنفيذ سطر الخيار البديل z = 20 .

يمكن تضمين جميع عوامل operators لغة السى فى شرط الاختبار , تعبيرات لغة السى الصالحة هى التى تولد نتيجة منطقية للشرط . التعبيرات الأتية صالحة ونتيجتها سوف تعتمد على قيمة متغيراتها :


كود:
if (a> b) b = a; /* if the expression a> b is true, the variable "b" assumes the value of "a"*/ if (b <a) b = 10; /* if the expression a <b is true, the variable "b" assumes the value 10*/ if (a != b) b = 55; /* if the expression a != b (differ) is true, the variable "b" assumes the value 55 */ if ((a + b)> (b + d)) b ++; /* if the expression (a + b)> (b + d) is true, the variable "b" is incremented by one.*/
ملاحظات هامة :
  • عامل التخصيص فى لغة السى هو علامة التساوى (=) .
  • بينما عامل "مقارنة التساوى" وهو (==) يختلف عن عامل التخصيص .
لاختبار شرط لمتغير معطى نستخدم عامل مقارنة التساوى (==) كما يلى :
if (a == b) c = 10;
وهذا يختلف عن :
if (a = b) c = 10;
فى عبارة if الأولى : اختبار الشرط (a == b) يقوم بعمل مقارنة بين متغيريين , إذا كان الشرط صواب يتم تنفيذ c=10 .
فى عبارة if الثانية : يوجد تعبير تخصيص بالتساوى (a = b) . عندما يقوم المترجم بترجمة هذا الأمر فأنه فى البداية يخصص للمتغير a القيمة الموجودة بالمتغير b وبعد ذلك يختبر الشرط فإن كانت النتيجة صواب (وهو بالقطع سوف يكون صواب بعد التخصيص ) يتم تنفيذ c = 10 .

لإضافة بلوكات من البرامج فى عبارة if من الضرورى إستخدام قوس الفتح (البداية) ({) وقوس الغلق(النهاية) (}) .
مثال :


كود:
if (PORTB == PORTC)
{          // Command block
a ++;
portb.f0 = 1;
d = c + e;
}
3- عبارات if المتداخلة if, else, if
يمكننا إنشاء عبارات ifمتداخلة Nested If statements من خلال بناء عبارات if, else, if .


يتم إنشاء العبارات ببساطة عن طريق وضع عبارة if متداخلة مع عبارة if أخرى .











الصيغة :

كود:
if (condition1) statement 1; else
    if (condition2) statement 2; else
        if (condition3) statement 3; else
            if (condition4) statement 4;



مثال :
كود:
void main () { int count = 10; int signal = 5; if (count> signal) signal ++; else if (count <signal) signal--; else if (count == signal) signal = 0; }




يمكننا أيضا تنفيذ بلوكات باستخدام الأقواس ({and}) .

مثال :


كود:
void main () { int count = 10; int signal = 5; if (count> signal) { // Use command blocks in if-else-if signal ++; count = 20; } else if (count <signal) { signal--; count = 15; } else if (count == signal) signal = 0; }

بناء جملة if هو الأفضل لاتخاذ قرارات منطقية , وسوف نستخدمه فى العديد من البرامج لاحقا . عبارات if المتداخلة تتطلب مزيدا من الاهتمام .

اعلانات

الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,894
نشاط [ F.Abdelaziz ]
قوة السمعة:332
قديم 06-02-2013, 04:23 PM المشاركة 2   
افتراضي


ثانيا : عبارة إتخاذ القرار باستخدام عبارة Switch-case
تستخدم عبارة switch-case فى أمرار التحكم إلى فرع محدد من البرنامج بناء على شرط معين .
عبارة Switch "بمعنى التحويل أو التبديل" هى الأوضح والأكثر أناقة لاتخاذ القرار ضمن البرمجة بلغة السى , وخلافا لعبارة if فإن "عبارة switch لا تقبل تعبيرات expression لاتخاذ قرار لكن تقبل فقط الثابت "constant.

الصيغة :


كود:
switch (variable)
{
case constant1:
    Statement 1A;
    Statement 1B;
    Statement 1N;
break;

case constant2:
    Statement 2A;
    Statement 2B;
    Statement 2N;
break;

default;
Statement _default;
}
كود:


فى البداية يتم تقييم المتغير المصاحب لكلمة switch حبث يعتبر نتيجة التقييم هى "شرط تنفيذ الحالة" بعد ذلك تتم المقارنة بين "قيمة المتغير variable الموجود بعبارة "switch مع "جميع قيم الثوابت constant التى تلى كلمة case" .
إذا وجد تطابق بين المتغير وأحد الثوابت , يتم تنفيذ الأوامر الموجودة بعد نقطتى التنصيص والتى تلى كلمة case الموجود بها هذا الثابت .
إذا لم يتواجد أى ثابت بنفس قيمة المتغير , عندئذ سوف يتم تنفيذ الأوامر المحدد بالجملة الافتراضية default .

مثال :


كود:
void main () { int count = 10; int signal = 5; switch (count){ case 2: signal ++; break; case 1: signal = 2; break; case 10: count--; break; default: signal = 0; } }



اعلانات اضافية ( قم بتسجيل الدخول لاخفائها )
  

الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,894
نشاط [ F.Abdelaziz ]
قوة السمعة:332
قديم 06-02-2013, 04:27 PM المشاركة 3   
افتراضي


الموضوع فى ملف word على الرابط :

http://www.eeecb.com/vb/showthread.php?p=3754&posted=1#post3754


اسامه الحكيم
:: مهندس متميز ::
تاريخ التسجيل: Jun 2008
الدولة: مصر - النوباريه الجديده
المشاركات: 349
نشاط [ اسامه الحكيم ]
قوة السمعة:0
قديم 06-02-2013, 04:46 PM المشاركة 4   
Thumbs up


زادك الله من علمه اخى المهندس فتح الله

وجعله الله فى ميزان حسناتك


derkaoui849
:: مهندس ::
تاريخ التسجيل: May 2006
المشاركات: 27
نشاط [ derkaoui849 ]
قوة السمعة:0
قديم 06-02-2013, 05:57 PM المشاركة 5   
افتراضي


شكرا لك أخي وبارك الله فيك وجعله الله فى ميزان حسناتك فى الدنيا والأخرة يارب العلمين


الصورة الرمزية ميكرومان
ميكرومان
:: عضو فضي ::
تاريخ التسجيل: Oct 2012
المشاركات: 373
نشاط [ ميكرومان ]
قوة السمعة:69
قديم 06-02-2013, 06:23 PM المشاركة 6   
افتراضي


زادك الله علما واكثر من امثالك انتم من يحمسنا دائما للعلم والعمل

الحمد لله علي نعمة الاسلام


الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,894
نشاط [ F.Abdelaziz ]
قوة السمعة:332
قديم 06-02-2013, 11:35 PM المشاركة 7   
افتراضي


الأخوة الأفاضل شكرا جزيلا

مع تمنياتى بدوام التوفيق


الصورة الرمزية هيثم العليمي
هيثم العليمي
:: مهندس جيد ::
تاريخ التسجيل: Mar 2012
الدولة: yemen
المشاركات: 236
نشاط [ هيثم العليمي ]
قوة السمعة:0
قديم 07-02-2013, 07:50 PM المشاركة 8   
افتراضي


جزاك الله خير

إضافة رد

العلامات المرجعية

«     الموضوع السابق       الموضوع التالي    »
أدوات الموضوع

الانتقال السريع إلى


الساعة معتمدة بتوقيت جرينتش +3 الساعة الآن: 01:29 PM
موقع القرية الالكترونية غير مسؤول عن أي اتفاق تجاري أو تعاوني بين الأعضاء
فعلى كل شخص تحمل مسئولية نفسه إتجاه مايقوم به من بيع وشراء وإتفاق وأعطاء معلومات موقعه
التعليقات المنشورة لا تعبر عن رأي موقع القرية الالكترونية ولايتحمل الموقع أي مسؤولية قانونية حيال ذلك (ويتحمل كاتبها مسؤولية النشر)

Powered by vBulletin® Version 3.8.6, Copyright ©2000 - 2025