تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
دورة في اساسيات c++ - الدرس الرابع
#1
الدرس الرابع

* حلقات  التكرار :

عرفنا في الدرس السابق ان هناك نوعين من عبارات التحكم في البرامج  الأولى هي الشرط و الثانية و هي التكرار  و التي سوف نتعلمها اليوم بإذن الله .

 - معنى التكرار : يقصد بالتكرار هو إمكانية تنفيذ كود  لعدة مرات  بغرض توفير الوقت .
مثلا لو طلب منك حصر  درجات 1000 طالب ، المنطقي هو ان تمر على كل طالب و تأخذ درجته  ،  لكن الف طالب Huh  لا تستعجب  في الماضي حتى لو كانوا  100000  كانوا  يفعلوها  ،  لكن اليوم  نحن لدينا الحاسوب الذي يستطيع تكرير الكود  و استخراج درجات جميع الطلاب  حتى لو كانوا 100000000  ،  اذا التكرار له فوائد لا حصر لها   و تظهر تلك الفوائد  في المصفوفات  كما سنرى  في الدرس القادم .

- مكونات أي تكرار : أي تكرار  في أي لغة برمجة  حتى لو كانت  0 و 1   يتكون من ثلاث أمور  
1 - بداية التكرار  :  أي نقطة الانطلاق  التي سيبدأ منها العد  و هي غالبا  0 أو 1  (لا يشترط فقد تبدأ  من 2775  مثلا )
2 - نهاية التكرار :  و هي تلك النقطة التي يتوقف عندها التكرار و هي في الغالب  تكون عبارة شرط  كما سنرى .
3 - العداد : و هو مقدار الزيادة او النقص  .

- التكرار  قد يكون من 0 الى 10  و  العداد موجب  ، لكن لو اردنا العد من 10 الى 0  فتاكد من ان العداد بالسالب Exclamation 

--------------------------------------------------
عبارات التكرار

1 - دالة for :  و هي تعتبر الأكثر شمولية و شيوعا  و بساطة 

كود :
for(start ; stop ; counter){
//some code
}
 
- في البداية نعرف متغير يفضل ان يكون  int .
- لا تنسى ان تفصل بين كل عبارة و الأخرى  بالفاصلة المنقوطة ";"  .
- العداد - counter  غالبا يكون  على صيغة  ++  او - -  (راجع الدرس الثاني ) .
- النهاية - stop   ستراها  على هيئة  >10   ,  =<5
- البداية - start   دائما  =  n  .

ناخذ مثال  لطباعة الأرقام من 1 الى 10 :

كود :
int main(){
int I;
for(I = 1 ; I <= 10 ; I++){
cout<<I<<endl;
}
return 0;
}

كل ما قلناه موجود 

1- عرفنا متغير i  .
2 - البداية من  1 .
3- النهاية عند الشرط  فاذا وصلت i  الى 11  عندها ستتوقف الحلقة التكرارية .
4- كما تلاحظ ++i   معناه زيادة بمقدرا واحد في كل دورة  .

- يعني ان كل دورة يتم اختبار الشرط  فاذا تحقق ينفذ الكود و يزداد العداد  الى ان يصل الى نقطة لا يتحقق فيها الشرط فتتوقف الحلقة  .

- بالنسبة لموضوع الزيادة :

كود :
I = I + 1
I += 1
I++

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

------------------------------------------

نأخذ مثال آخر يطبع الاعداد الزوجية من 0 الى 10 .

كود :
int main(){
int I;
for(I = 0 ; I <= 10 ;I += 2){
cout<<I<<endl;
}

    return 0;
}

------------------------------------
طباعة الاعداد الفردية من 11 الى 0 :

كود :
int main(){
int I;
for(I = 11 ; I >= 0 ; I -= 2){
cout<<I<<endl;
}
    return 0;
}

1 - بدأنا من 11  كي نطبع الاعداد الفردية .
2 - لاحظ ان التوقف كان عند  ( I >= 0 )  فلو عكستها  لن يتوقف البرنامج و سيظل يعد حتى  سالب مالانهاية Exclamation  لكنها لا تحدث في الواقع  فالبرنامج لن ينفذ .

-------------------------------------------------
هذه  امثلة بسيطة و يوجد الكثير من الأفكار  مثل إيجاد مجموع الاعداد من 1 الى 100  و  .... الخ  ، أمور أتمنى ان تجربها بنفسك اما  المثال التالي فهو  من اشهر الأمثلة عن التكرار  و  هو   "  برنامج المضروب "   ،  يقوم هذا البرنامج بحساب المضروب لرقم ما يدخله المستخدم  .

كود :
int main(){
int I, x , z;
cout<<"please enter number :\n";
cin>>x;
z = 1;
for(I = 1 ; I <= x ; I++){
z = z * I;
}
cout<<"the factorial of the number is : \n"<<z;

 return 0;
}

لمن لا يعرف المضروب فهو حاصل ضرب الاعداد الأصغر الى 1   يعني   مضروب 5  يساوي   5 * 4 * 3 *2 *1 = 120 .


1 -   عرفنا ثلاث  متغيرات I  و هو  عداد التكرار  ،  x  و هي القيمة التي نريد لها المضروب ، z  و هو المتغير الذي سيحمل المضروب .

2 - طلبنا من المستخدم ان يدخل رقم و نحمل القيمة للمتغير  x  .

3-  وضعنا القيمة المبدئية  لل z  بواحد  لا تنساها و لازم يكون  1  لانه المعامل المحايد الضربي يعني لا يؤثر في الضرب و أيضا لكي لا تواجهك مشاكل  التنفيذ  .

4 - بدائنا الحلقة من 1  لنفس السبب .

5 - اوقفنا  الحلقة عند العدد الذي ادخله المستخدم  و لاحظ ان مقدار الزيادة هو 1  في كل مرة .

6 -  في كل دورة نجدد قيمة z  بضربها في قيمة i  الجديدة .

7 -  بعد انتهاء الحلقة نطبع قيمة z  للمستخدم  و شكرا .

-------------------------------------------
2 -  دالة while  :  و هي أيضا مهمة و شائعة .

كود :
start;
while(condition){
counter;
}

تماما  كما درسنا for  لكن   الفرق   في  الشكل فهنا شرط التوقف  هو فقط من يكون داخل الاقواس  اما البداية فتعرف خارج الدالة و العداد يكون داخل الدالة .

يعني شوف اول مثال اخذناه لكن  مع while :

كود :
int main(){
int I;
I = 1;
while( I <= 10 ){
cout<<I<<endl;
I++;
}
return 0;
}

فط اختلاف في الشكل  لكن  أحيانا تكون  while  اكثر فائدة من for  لكن  ليس دائما .

----------------------------------------------------

- مثال المضروب  ب while  :

كود :
int main(){
int I, x , z;
cout<<"please enter number :\n";
cin>>x;
z = 1;
I = 1 ;
while( I <= x ){
z = z * I;
I++;
}
cout<<"the factorial of the number is : \n"<<z;
return 0;
}

----------------------------------------------------------
3 - دالة  do while :  الأقل شيوعا

كود :
start;
do{
counter;
}
while(condition);

تختلف هذه عن اخواتها في ان السابقين يختبرون  الشرط أولا ثم ينفذون الكود  ام هنا  فالامر مختلف فالتنفيذ أولا ثم  اختبار  الشرط  .

شوف مثالنا البسيط :

كود :
int main(){
int I;
I = 1;
do{
cout<<I<<endl;
I++;
}while( I <= 10 );

return 0;
}


و هذا مثال المضروب :

كود :
int main(){
int I, x , z;
cout<<"please enter number :\n";
cin>>x;
z = 1;
I = 1;
do{
z = z * I;
I++;
}while( I <= x ) ;
cout<<"the factorial of the number is : \n"<<z;

return 0;
}
لا جديد .... Dodgy 
-------------------------------------------------------
4 -دالة goto  :  هذه الطريقة غير مضمونة لكنها تعتبر حركة تكتيكية مهارية يستعملها  المحترفون  و يضيع بها المبتدئون  Tongue
تعتمد عموما على (الملصقات - labels )  و هي شكل مختصر من الدوال لكنها ليست دالة Exclamation  ركز  هي مجرد تعبير يتضمن مجموعة من الأوامر  كالآتي :
كود :
start;
label:
counter;
//some code
if(condition){
goto label;
}
كما تلاحظ  في كل مرة يختبر الشرط تحقق فنعود الى label  لم يتحقق يتوقف البرنامج .
انظر الى مثالنا الشهير :
كود :
int main(){
int I;
I = 1;
count:
cout<<I<<endl;
I++;
if(I <= 10){
goto count;
}

return 0;
}
و أيضا مثال المضروب :
كود :
int main(){
int I, x , z;
cout<<"please enter number :\n";
cin>>x;
z = 1;
I = 1;
fact:
z = z * I;
I++;
if(I <= x){
goto fact;
}
cout<<"the factorial of the number is : \n"<<z;

return 0;
}



=====================================
رجاء اكرره في كل مرة ليس شرط ان تجرب كل الطرق
لكني أتمنى ان تجرب اكثر من برنامج من صنعك
يمكن ان تضيف if داخل الحلقات يمكن ان تعقد
العداد و تجعله يزداد بناء على قيم عمليات
جمع و طرح هناك الكثير من الأفكار
المهم هو التجريب و أي مشكلة
أي شيء لم تفهمه
او غير واضح
فلا تتردد
 في السؤال

 المفروض "في السؤال " تكون اصغر من "فلا تتردد" عشان يكتمل هرم   Dodgy 

و الى اللقاء في المحاضرة القادمة


الملفات المرفقة
.rar   lec4 - examples.rar (الحجم : 259 بايت / التحميلات : 6)

العاب من برمجتي  

Smile
الرد }}}}
تم الشكر بواسطة:
#2
بارك الله فيك على جهودك المبذولة حول اثراء هذه المعلومات المفيدة
وكلمة شكرا لك من اعماق قلبي لانك تستحقها
سأعود قريباً ان شاء الله

الرد }}}}
تم الشكر بواسطة: AGASHE


المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  دورة في اساسيات c++ - الدرس التاسع و الاخير AGASHE 1 681 02-08-15, 02:24 PM
آخر رد: amir9
  دورة في اساسيات c++ - مقدمة AGASHE 5 1,132 02-02-15, 03:20 AM
آخر رد: ابو ابراهيم
  دورة في اساسيات c++ - الدرس الثامن 2 AGASHE 0 321 01-02-15, 06:24 PM
آخر رد: AGASHE
  دورة في اساسيات c++ - الدرس الثامن1 AGASHE 0 332 01-02-15, 01:03 PM
آخر رد: AGASHE
  دورة في اساسيات c++ - الدرس السابع AGASHE 2 611 01-02-15, 11:04 AM
آخر رد: AGASHE
  دورة في اساسيات c++ - الدرس الخامس AGASHE 1 598 31-01-15, 11:40 PM
آخر رد: Amir_alzubidy
  دورة في اساسيات c++ - الدرس السادس AGASHE 1 589 31-01-15, 11:38 PM
آخر رد: Amir_alzubidy
  دورة في اساسيات c++ - الدرس الثالث AGASHE 1 577 27-01-15, 03:01 PM
آخر رد: Amir_alzubidy
  دورة في اساسيات c++ - الدرس الثاني AGASHE 1 580 26-01-15, 12:34 PM
آخر رد: abulayth
  دورة في اساسيات c++ - الدرس الاول AGASHE 0 702 25-01-15, 12:12 PM
آخر رد: AGASHE

التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم