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

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

الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,894
نشاط [ F.Abdelaziz ]
قوة السمعة:328
قديم 06-02-2013, 12:00 AM المشاركة 1   
افتراضي الحلقات فى لغة السى loops : Twitter FaceBook Google+



الحلقات فى لغة السى loops :
فى لغة السى يوجد ثلاثة أنواع من الحلقات . وظيفة الحلقة هى تكرار تنفيذ مجموعة من التعليمات داخل تلك الحلقة حتى يتحقق شرط ما , أو قد يتم التنفيذ إلى ما لانهاية .
الحلقات هى :
while
do..while
for


سوف تقوم الحلقة بتنفيذ التعليمات بصفة دائمة طالما أن "التعبير" expression صواب (صحيح) true . فى لغة السى "صواب" true تعنى أى قيمة غير صفرية .
حلقة while :
الاستخدام :


كود:
while (expression){ statement }
مثال :
كود:
PORTB=0b10101010; while(1) { PORTB = ~ PORTB; Delay_ms(500); }







فى الكود أعلاه , سوف لا تنتهى الحلقة أبدا . يتم تنفيذ التعليمات الموجودة بين القوسين "{….}" إلى ما لا نهاية . عادة تستخدم هذه الحلقة من أجل الحلقات الرئيسية main للبرامج التى لا ينتهى .

مثال :

كود:
while(PORTB.F1 == 0) { . . }






هذه الحلقة سوف تتكرر حتى تتغير حالة الطرف PORTB.F1 , أى عندما يكون PORTB.F1=1 يتم الخروج من الحلقة .
ملاحظة هامة :
يتم تقييم التعبير expression قبل تنفيذ التعليمات الموجودة بين الأقواس "{…}" . فإذا كان التعبير غير صحيح false عندئذ يتم تخطى التعليمات الموجودة بين القوسين "{..}" . إذا كنت ترغب فى تنفيذ التعليمات لمرة واحدة على الأقل , عنئذ تكون بحاجة لاستخدام حلقة "do…while".

اعلانات

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


حلقة do…while :
الاستخدام :

كود:
do { statement } while (expression);

كما ذكرنا أعلاه , حلقة do….while تقوم بتنفيذ التعليمات الموجودة بين القوسين "{…}" مرة واحدة على الأقل قبل أن يتقرر استمرار الحلقة أو عدم استمرارها .
مثال :
كود:
do { CountUp++; CountDn--; . . . } while(PORTB.F4==1) ;






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

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


حلقة for( ) :
الاستخدام :

كود:
for ([init-expression]; [condition-expression]; [increment-expression]) statement

ملاحظة :
الأقواس المربعة "[ ]" تشير إلى "اختيارى" .
يمكن استخدام حلقة for مثل حلقة while أو حلقة do…while , لكن يجب توخى الحذر .
مثال :
كود:
for( ; ;) {
CountUp++
CountDd—
.
.
}



هذا الكود يمثل حلقة لا نهاية لها . لا يوجد سوى طريقتين للخروج من هذه الحلقة ( أو أى حلقة لا نهائية) , وهما استخدام عبارة "break" أو التفرع إلى خارج الحلقة باستخدام الأمر "goto" ويوصى بعدم استخدام "goto" . لنعود إلى حلقة for :
"تعبير – البداية" init-expression : هو القيمة الابتدائية لمتغير عداد الحلقة التى ترغب البدء بها .
"تعبير – الشرط " condition-expression : يجب أن تحقق الحلقة هذا الشرط للخروج .
"تعبير – التزايد " increment-expression : هنا تقوم بتزايد أو بتناقص متغير عداد الحلقة .
مثال :

كود:
signed int CountUp =0, CountDn=0; for(count=1; count <=3; count++) { ++CountUp; --CountDn; }
قبل البدء فى الحلقة يتم تحديد متغير عداد الحلقة بواحد ( كما هو مذكور فى تعبير الحالة الابتدائية) .
بعد ذلك يتم التحقق من أن متغير عداد الحلقة يساوى "3" ( كما هو مذكور فى تعبير الشرط) .
يتم تزايد متغير عداد الحلقة بواحد .
وحيث أن متغير عداد الحلقة لا يساوى "3" ( نتيجة تققيم الشرط تكون صواب ) فإنه يتم تنفيذ التعليمات الموجودة بين القوسين "{}" , والتى تؤدى إلى تزايد المتغير CountUp وتناقص المتغير CountDn .
عندما يساوى متغير عداد الحلقة "4" يتم الخروج من الحلقة (نتيجة تقييم الشرط تكون غير صواب ) .






الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,894
نشاط [ F.Abdelaziz ]
قوة السمعة:328
قديم 06-02-2013, 12:10 AM المشاركة 4   
افتراضي


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



الصورة الرمزية ميكرومان
ميكرومان
:: عضو فضي ::
تاريخ التسجيل: Oct 2012
المشاركات: 373
نشاط [ ميكرومان ]
قوة السمعة:65
قديم 06-02-2013, 12:19 AM المشاركة 5   
افتراضي


تعجز كلمات الشكر ان ترد اليكم جميلكم في تعليمنا ومساعدتنا

جعله الله لك علما نافعا ينتفع به


abdellahbo
:: مهندس ::
تاريخ التسجيل: Jan 2013
المشاركات: 3
نشاط [ abdellahbo ]
قوة السمعة:0
قديم 06-02-2013, 01:26 AM المشاركة 6   
افتراضي


هناك أخي الكريم الحلقة loop goto loop أليس كدلك.


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


تعجز كلمات الشكر ان ترد اليكم جميلكم في تعليمنا ومساعدتنا

جعله الله لك علما نافعا ينتفع به
أخى الكريم شكرا جزيلا لك

بارك الله فيك

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


الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,894
نشاط [ F.Abdelaziz ]
قوة السمعة:328
قديم 06-02-2013, 08:47 AM المشاركة 8   
افتراضي


هناك أخي الكريم الحلقة loop goto loop أليس كدلك.
أخى الكريم شكرا جزيلا لك :

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

نحن نعمل بالمترجم ميكروسى برو وإليك ما جاء فى ملف المساعدة الخاص بذلك :


The use of goto statement is generally discouraged as practically every algorithm can be realized without it, resulting in legible structured programs. One possible application of the goto statement is breaking out from deeply nested control structures


وترجمتها :

عموما لا يشجع على استخدام عبارة goto حيث أنه يمكن أن تتحقق كل خوارزمية بدونها ,مما يؤدى إلى برامج بهيكل صحيح . أحد التطبيقات الممكنة لعبارة goto هو "كسر" breaking out بمعنى الخروج من الهياكل المتداخلة بدرجة كبيرة كما فى المثال التالى :
كود:
for (...) { for (...) { ... if (disaster) goto Error; ... } } . . . Error: /* error handling code */
وفى النهاية الأمر متروك للمبرمج .

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

إضافة رد

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

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

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


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

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