تقييم الموضوع :
  • 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 بايت / التحميلات : 45)

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

Smile
الرد }}}
تم الشكر بواسطة:
#2
بارك الله فيك على جهودك المبذولة حول اثراء هذه المعلومات المفيدة
وكلمة شكرا لك من اعماق قلبي لانك تستحقها
الرد }}}
تم الشكر بواسطة: AGASHE , rnmr , rnmr
#3
بالاول أود أن أشكرهذا المنتدى الرائع منتدى فجوال بيسك لك العرب والشكر الجزيل لك استاذ الدورة الغاليAGASHE
على ما تقدمه...
أنا جديد في المنتدى وفي كل المواقع ياريت تتحمل ثقلي عليكم
ثانيا الدالهGOTO
لم افهمها خاصة كلمة label
ايش عملها
ياريت لو توضح لي الطريقة بشكل أوسع أنا فهمي بطيئ شوي
بارك الله فيكم وفي علمكم...
الرد }}}
تم الشكر بواسطة:
#4
(13-03-17, 10:30 AM)Khamis abkr كتب : بالاول أود أن أشكرهذا المنتدى الرائع منتدى فجوال بيسك لك العرب والشكر الجزيل لك استاذ الدورة الغاليAGASHE
على ما تقدمه...
أنا جديد في المنتدى وفي كل المواقع ياريت تتحمل ثقلي عليكم
ثانيا الدالهGOTO
لم افهمها خاصة كلمة label
ايش عملها
ياريت لو توضح لي الطريقة بشكل أوسع أنا فهمي بطيئ شوي
بارك الله فيكم وفي علمكم...

أهلا أخي ، بصراحة لم أزر المنتدى منذ فترة مع الأسف ، فأعتذر عن التأخر في الرد
بالنسبة لدالة GoTo  فهي تعني "عد للنقطة label " حيث أن label هو مجرد كلمة
تشير لسطر معين ، طالما أن الشرط مازال محقق يعني مثلا (I < 10) سيعود التنفيذ
إلى تلك النقطة حتى يخرج من الشرط و عندها يتابع البرنامج العمل.

عموما هذه الطريقة تعتبر من أقدم الطرق و  تقريبا هي أصل الحلقات التكرارية و من
الأفضل تجنبها فهي تعبث بسير البرنامج، فقط أن ذكرتها للأمانة العلمية لا غير Exclamation

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

Smile
الرد }}}
تم الشكر بواسطة: Amir_Alzubidy , Amir_Alzubidy , anes



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


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