المساعد الشخصي الرقمي

مشاهدة النسخة كاملة : شرح طريقة مفصل ل for loop



loulou ange
11-01-2013, بتوقيت غرينيتش 04:14 PM
http://www.dzbatna.com/images/icons/iconrote.gif ط´ط±ط* ظ…ظپطµظ„ ظ„ for loop (http://www.dzbatna.com/t2040127/)




الجلسة الأولى :
بداية تعتبر الحلقات For Loops من اساسيات لغات البرمجة ولا يمكن الاستغناء عنها نهائيا ...
فأغلب خوارزميات البرمجة غالبا ماتخضع للتكرار ,,,,

عموما سنبدأ بتعريف بنية ال For loop في لغة السي والسي بلس بلس ...
وبالمناسبة صيغة ال For Loop في لغة السي والسي بلس بلس ,,, هي الاكثر مرونة على الاطلاق في جميع لغات البرمجة ... والجافا كذلك ...

وتاتي المرونة من الصيغة التي تعرف بالشكل التالي ,,,

مثال رقم 1 :


C#
اقتباس
رمز برمجي:
for ( int x =0 ; x < 10 ; x++)

{

Console.WriteLine(&quot;hellow&quot;);// Our Out Put
Console.WriteLine(&quot;end&quot;);


}

لاحظ الفواصل في جسم الحلقة الذي باللون الارجواني ... توجد ثلاثة مناطق لادخال قوانين الحلقة ...

الحلقة السابقة بسيطة جدا ,, وتعني الاتي ,,,
ركز في ها الوصف فهو مفتاح حل جميع مشاكل عدم فهم الحلقات ....


&quot; يا كمبيوتر نفذ ما بين القوسين {} مادامت x < 10 ,, والشرط موجود في البرامتر الثاني....
وكل مرة تنفذ فيها الاوامر التي بين القوسين {} اذهب الى أول الحلقة وزد x بمقدار واحد &quot; يحدد مقدار الزيادة اخر بارمتر في الحلقة &quot; ,,
وبدأ أول x أول ماتبدا الحلقة بالقيمة صفر ,,, ويحدد البداية أول بارمتر في جسم الحلقة ,, &quot;
وطبعا سيتم الخروج نهائيا من الحلقة اذا اختل الشرط الذي في الخانة الثانية من جسم الحلقة ...

أي سيتم كل مرة طباعةالعبارة &quot; HELLO &quot; في الشاشة وستتم هذه العملية 10 مرات ... كل واحدة في سطر جديد ...
الان أين المرونه في ذلك ?? ... لاأقصد التعقيد وانما فهم الهيكلية بشكل جيد سيساعدك جدا على الفهم المتناسق ,, سنأتي للمرونة بعد قليل

1) الان بهذه الصيغة يمكنك تنفيذ بعض الاوامر التي تريدها مرات عديدة اما بعدد معين تريده .. مثلا 10 مرات 20 مرة 100 مرة 100000 مرة ...
2) أو تنفيذ الاوامر مرات عديدة اذا تحققت بعض الشروط ....

توجد عدة حالات لعمليات التكرار بعدد معين كما في الحالة رفم &quot; 1&quot; أعلاه...
وسنتستعرضها الان ,,,

قي بعض الانواع عندما نريد التكرار لشيء ثابت لايعتمد على العدد المكرر كما في المثال التوضيحي في الاعلى &quot; طباعة السلسلة HELLO لايعتمد على أي شيء لأنه ثايت&quot; ... دائما يكفي ان تجعل الحلقة على صيغة المثال أعلاه ... وفقط تغيير البارمتر الثاني ليكون اصغر من العدد الذي تريده أن يتكرر ...

نوع اخر يعتمد على المتغير الذي في الحلقة بشكل أو باخر مثلا ... خذ عندك المثال التالي الذي نقوم فيه بطباعة القيم التي في مصفوفة معينة ,, مثلا نريد أن نطبع 15 قيمة من عناصر مصفوفة معينة وبالتررتيب من أول عنصر وحتى العنصر رقم 15 ...

نقرض لدينا مصفوفة int تسمى W حجمها الاقصى 200عنصر وقمنا بوضع بيانات في 90عنصر فيها وبالترتيب ... ونريد أن نطبع أول 15 عنصر على الشاشة ...
في هذه الحالة سنتستفيد من نفس المتغير الذي يعبر عن الشرط في الحلقة ليكون هو رقم العنصر المراد طباعته ... ولا داعي لأنشاء متغير جديد ليقوم بهذه العملية ...

مثال رقم 2 :
اقتباس
رمز برمجي:
int [] w=new int[200];
for ( int x =0 ; x < 15 ; x++)

{
Console.WriteLine (w [x]);
Console.WriteLine(endl );


}

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

مثال رقم 3 :
اقتباس
رمز برمجي:
int z=0;
for ( int x =0 ; x < 15 ; x++)

{

Console.WriteLine(W [z]);


Console.WriteLine(endl);
; ++z

}

للحلقة أعلاه نفس عمل الحلقة التي قبلها ...

نفرض مثلا أننا نريد طباعة العناصر الفردية فقط من المصفوفة وحتى العنصر رقم 41.... عندها سنغير التالي ...

مثال رقم 4 :
اقتباس
رمز برمجي:
int [] w=new int [200];

for ( int x =1; x < 42; x += 2);

{
Console.WriteLine(w[x]);
Console.WriteLine (&quot;endl&quot;);

}

لاحظ أننا غيرنا البداية الى 1 والشرط الى اصغر من 41 ومقدار الزيادة الى 2 بدل من 1 ,,,
لاحظ دائما أن قيمة المتغير x في كل دورة للمصفوفة تكون قيمته قيمة فردية ...
ستكون الاعداد 1 , 3 , 5 ,7 ,9 ... وهكذا حتى اخر عدد 41 لأن ال 41 أصغر من ال 42 وهو الشرط الذي في البارمتر الثاني ....

قارن هذا المثال بالمثال رقم 2 وستتعرف أكثر على الفكرة ...

الان فلنطور المثال قليلا ولنفرض اننا نريد طباعة العناصر التي تقبل القسمة على 5 وحتى العنصر رقم 80 مثلا ...

ستكون الصيغة كالتالي ...

مثال رقم 5 :
اقتباس
رمز برمجي:
int [] w=new int [200];


for ( int x =0; x < 81; x += 5)

{
Console.WriteLine (W [x]);
Console.WriteLine (endl);

}

سيحل المثال أعلاه المشكلة لأن مقدار الزيادة يساوي 5 وأول عدد هو الصفر فدائما القيمة x تكون من مضاعفات الخمسة وتقبل القسمة على 5 ...
يمكن كتابة المثال أعلاه على نحو اخر كالتالي مع أن الطريقة السابقة أفضل من ناحية الاداء ....
مثال رقم 6 :
اقتباس
رمز برمجي:
int [] w=new int [200];

for ( int x =0 ; x < 81; x++)

{
if ( x % 5 == 0 )

{
Console.WriteLine(W [x]);
Console.WriteLine(endl);
}

}

هذا المثال يدخل شرط اختبار اضافي داخل الحلقة لاداعي له .. ومن الملاحظ أن الحلقة يمكن ان تكتب بأكثر من طريقة ويجب محاولة البحث عن الافضل من ناحية الاداء , وسهولة الفهم .... مثلا المثال السابق مقارنة بالمثال رقم 5 سيأخذ وقتا أطول في التنفيذ لأن الكمبيوتر سيقوم بعملية التكرار والاختبار 81 مرة .... اما في المثال رقم 5 سيقوم بالختبار 17 مرة فقط ...

لاحظ اننا لايمكننا كتابة الشرط if ( x % 5 == 0) في جسم الحلقة في الخانة الثانية المخصصة للشرط ...
على الشكل التالي ...

مثال 7 :
اقتباس
رمز برمجي:
int [] w=new int [200];

for ( int x=0 ; x % 5 == 0 ;x ++ ) // Our Foor loop

{
Console.WriteLine(W [x ]);
Console.WriteLine(endl);

}

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

.................................................. .................

أخيرا يمكنك التلاعب بجسم الحلقة كما تشاء يعني ....

يمكنك الاستغناء عن أحد الاجزاء الثلاثة الرأيسية الخاصة بجسم الحلقة ....
مثلا لجعل الحلقة تستمر بدون أي شرط &quot; ولن تتوقف أبدا &quot; يعني جعل الحلقة لانهائية يكفي أن تحذف خانة الشرط في البارمتر الثاني من جسم الحلقة لتصبح على الشكل التالي ...
اقتباس
رمز برمجي:
for ( int x =0 ; ; x++)

{

Console.WriteLine (&quot;HELLO &quot; );
Console.WriteLine(endl);


}

سيتم هنا طباعة العبارة &quot; HELLO &quot; بشكل لانهائي ولن يتوقف البرنامج عن العمل ...

يمكنك ايضا الاستغناء عن أي طرف من الاطراف ... مثلا اذا كانت القيمة الابتدائية ل x معرفة مسبقا لاداعي لوضعها مرة أخرى في البارمتر الاول ...

رمز برمجي:
for ( ; x < 81; x++) اقتباس

ويمكن الاستغناء عن مقدار الزيادة ووضعه داخل جسم الحلقة على الشكل التالي ...

for ( int x =0 ; x < 10);
{
; ++x
}
وأخيرا يمكنك الاستغناء عن كل البرمترات الثلاثة لتكون الحلقة لانهائية بشكل مباشر &quot; لأنه لايوجد شرط &quot; وتكون على الشكل التالي ...
for ( ; ; ) // Our infinite Loop

الامثلة كثيرة جدا في هذا المساق لكننا سنكتفي بهذه الامثلة الابتدائية التي ستشرح طريقة المطلوب باذن الله لأساسيات الحلقات ...
وسندخل في الجلسة التالية في الحلقات المتداخلة وسنحاول ازالة الغموض الدائر حولها باذن الله .
الجلسة الثانية :

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

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

مثال 1 :
رمز برمجي:
for ( int x = 0 ; x< 10 ; x++) اقتباس
{

for ( int a= 0 ; a< 8; a++)
{
Console.WriteLine( a);
}
Console.WriteLine (endl);
}

عمل الحلقة المتداخلة منطقي تماما ... حيث يتم تنفيذ الحلقة الأم الخارجية 10 مرات وهي الحلقة صاحبة المتغير x .... وكل مرة تنفذ فيها الحلقة الخارجية تنفذ فيها جسم الحلقة .. وفي حسم الحلقة توجد حلقة داخلية a سيتم تنفيذها وحتى الانتهاء منها تماما ... أي سيتم تنفيذها 8 مرات ... ثم بعد ذلك يتم اخروج من جسم الحلقة الداخلية ... ثم تنفذ باقي تعليمات الحلقة الخارجية ... وبما أنه لاتوجد تعليمات للحلقة الخارجية زيادة .. سيتم الخروج من الحلقة الخارجية للمرة الأولى لتستعد لاعادة التنفيذ للمرة الثانية ... حيث يتم زيادة قيمة المتغير x بواحد ...&quot; في المرة الاولى كانت قيمة x بصفر&quot; والان بعد الزيادة ستصبح 1.. ويختبر شرط الدخول x <10 وبما أن 10 > 1 سيتم الدخول في الحلقة للمرة الثانية ... وتنفذ الحلقة الداخلية 8 مرات ثم تخرج وتزيد x بواحد وتختبر الشرط 10 > 2 وتنفذ الحلقة مرة أخرى ... وهكذا 10 مرات ... حتى يختل الشرط 10 > 10 قلا يتم تنفيذ الحلقة ...
من الملاحظ ان الحلقة الداخلية تتكرر 80 مرة..... &quot; حاصل ضرب عدد مرات الحلقة الخارجية * عدد مرات تكرار الداخلية &quot; ...
الخرج من المثال السابف كالتالي ....
plain text
01234567
01234567
01234567
01234567
01234567
01234567
01234567
01234567
01234567
01234567

&quot; لاحظ لاتوجد مسافات بين الارقام &quot; 1 2 3 .....
لاحظ أن الامر ; cout << endl موجود ضمن الحلقة الخارجية وليست الداخلية ... حيث سيتم تنفيذها 10 مرات&quot; وهو السبب في أن كل مجموعة أرقام مكتوب في سطر جديد &quot; ... أما ; cout << a فهي موجودة صمن الحلقة الداخلية وستنفذ 80 مرة ...

الان اذا اردنا طباعة مستطيل من النجوم بعرض 5 نجوم وارتفاع 6 نجوم ... ماذا نفعل ..؟
اليك المثال ...
مثال 2 :
اقتباس
رمز برمجي:
for ( int x = 0 ; x< 6; x++)
{

for ( int a= 0 ; a< 5; a++)
{
console.WRITELINE( &quot; * &quot;) ;// our out put
}

Console.WriteLine();

}لاحظ الفرق بين المثالين 2 و 1 .... بغض النظر عن عدد مرات التكرار سيكون الفرق فقط في أمر الطباعة cout حيث سيتم طباعة نجوم في المثال الثاني ... بنفس منطق المثال الأول ... ولاحاجة للتوضيح ...

الان فالننتقل الى خطوة أكثر جدية ....
اذا أرنا طباعة مثلث بالنجوم * على الشكل التالي ...
plain text

*
**
***
****
*****


كيف يمكن رسم الشكل اعلاه ...

خذ المثال ...
مثال 3:
اقتباس
رمز برمجي:
for ( int x = 0 ; x< 6; x++)
{

for ( int a= 0 ; a< x; a++)
{
CONSOLE.WRITELINE( &quot; * &quot;) ;// our out put
}
CONSOLE.WRITELINE ();

}لاحظ الفرق بين مثال 2 الذي يرسم مستطيل والمثال 3 الذي يرسم المثلث ... أين الفرق ؟؟
الفرق فقط في المتغير x المكتوب باللون الارجواني ... في المثال 2 كان ثابت وقيمته 5 أما في هذا المثال فهو متغير قيمته x ... ومعناه أن الحلقة الداخلية ستتكرر x مرة ...
كم هي قيمة x ?? ... في المرة الاولى التي تنفذ فيها الحلقة الخارجية تكون x تساوي صفر .. والمرة الثانية تساوي واحد ثم 2 ثم 3 وهكذا حتى تصل ال 5 ...&quot; أصغر من 6 &quot; &quot; x < 6 &quot; ومن هنا نرى أن في السطر الاول في المخرجات على الشاشة لاتوجد أي نجمة وفي السطر الثاني توجد نجمة واحدة وفي الثالث توجد 2 وفي الرابع 4 ... وهكذا حتى السطر السادس توجد 5 نجوم .... وعدد مرات طباعة النجمة يحددها المتغير x باللون الارجواني الذي داخل الحلقة الداخلية ...

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

الجلسة الثالثة :

توقفنا اخر مرة في مثال المثلث ,,,, اليكم بمثال اخر أكثر صعوبة ,,,
مثاث لكن على شكل متطابق الضلعين يعني ,,,
plain text
*
***
*****
*******
*********

دقق النظر في المثلث السابق ,,, ماذا تلاحظ ,,
الملاحظ أنه في السطر الاول توجد نجمة واحدة وفي الثاني 3 ثم 5 ثم 7 ثم 9 ... اذن هذه ليست مشكلة ,, نجعل الحلقة الداخلية المهتمة بالطباعة تبدأ بالقيمة 1 وتزيد بمقدار 1 كل مرة و تتكرر كل مرة بقيمة فردية وهذه القيمة الفردية تعتمد على رقم السطر لو كنتم تلاحظون ذلك ,,, أي أن عدد النجوم في سطر معين يساوي(رقم السطر * 2 )+ 1 والمسؤل عن رقم السطر هي الحلقة الخارجية وسنأتي لذكرها بعد قليل ...

الملاحظة الثانية ... هي أنه من بداية السطر من اليسار ,, في أول سطر نجد 4 فراغات ثم طباعة النجمة ,,, في السطر الثاني نجد 3 فراغات ثم طباعة ,,, في السطر الثالث فراغين ثم الرابع فراغ واحد والخامس والاخير بدون أية فراغات ,,,
الفراغات مختلفة ولها صيغة كما هو ملاحظ ,,,, اذن سنكتب حلقة اضافية لأكل الفراغات ,,, وبالطبع ستنفذ قبل تنفيذ حلقة الطباعة لأن الفراغات قبل طباعة النجوم ,,,
وستكون هذه الحلقة عادية تبدأ من 4 وتتناقص بواحد كل مرة &quot;--z &quot;,, حتى تتوقف عند الصفر ,,, لكن لجعل عدد مرات تكرار الحلقة متغير يجب مرة أخرى كما في الحلقة اعلاه أن نجعل شرط عدد مرات تكرار الحلقة متغير ,,, حيث أن عدد الفراغات أيضا يعتمد على رقم السطر ,,,
الملاحظة الاخيرة أن عدد السطور يساوي 5 وستكون هي الحلقة الأم الخارجية وبها الامر الوحيد cout << endl ,,, الكود code كالتالي ,,
مثال 1:
اقتباس
رمز برمجي:
for (int q = 0; q < 5; q++)
{

for (int z = 0; z <= q; z++)
{



Console.Write(&quot; &quot;);
}

for (int x = 0 x < (q * 2) + 1
; x++)
{
Console.Write(&quot;*&quot;);
}

Console.WriteLine();
}

أرجو أن يكون المثال واضحا ,,,
الان يمكنك أن ترسم شكل معين اما باستعمال كود code كالمثال اعلاه ثم يليه مباشرة كود code معكوس للمثال أعلاه حيث يرسم مثلثين متقابلين في القاعدة ,,, وبهذا يكون المعين قد رسم ,,,
ويمكن رسمه دون الحاجة للصق الكود code المعاكس تحت الكود code الاصلي مرة أخرى ببعض التحايل في الحلقة ,,,
أترك لكم هذه المهمة وهي سهلة باذن الله ,,,
الان بقي أن أذكر شيئا واحدا ,, وهو أننا يمكن أن رسم مثال المستطيل في الجلسة السابقة دون الحاجة لتداخل الحلقات !! كيف يعني ؟
خذ المثال .,,
مثال 2:
اقتباس
رمز برمجي:
for (int q = 0 ; q < 30 ; q ++)
}
if ( q % 5 == 0)
}
CONSOLE.WRITELINE();
CONSOLE.WRITELINE( &quot;*&quot;);
}

الشرط باللون الارجواني حل مشكلة أكل السطر &quot;cout << endl &quot; حيث لاحاجة لحلقة خاصة تقوم بهذه العملية ,, وهي في السابق الحلقة الخارجية ,,,
الان لاحظ ايضا أن عدد مرات تكرار الحلقة الوحيدة في المثال أعلاه تساوي 30 أي 6 * 5 وهي عدد النجوم الكلي والعدد 6 قي المثال في الجلسة السابقة كان للحلقة الخارجية و5 للداخلية ....

الان مثال المثلث في الجلسة السابقة ,,, بحلقة واحدة يصبح ,,,

مثال 3:
اقتباس
رمز برمجي:
; int w = 1 , t = 1 , e = 1
for( int q = 1 ; q < 16 ; q++)
}
CONSOLE.WRITELINE( &quot;*&quot; );

if( q % e == 0)
}
CONSOLE.WRITELINE( endl);
++w;
e = w + t
t = e
}
}

الكود code أعقد بالطبع أعقد من نظيره صاحب الحلقتين ,, لكن فقط أريد أن أبرهن على أن الحلقات يمكن برمجتها بطريق كثيرة ,, فاختر الانسب لك من ناحية الاداء وسهولة الفهم ,,,
ولاحظ أيضا انني قمت باستخدام عامل باقي القسمة ,, وهو من الامور التي يجب أن تعتاد عليها جيدا ,, لأنها سبيل الخلاص في بعض الحالات الحرجة ,,,
مثلا معرفة هل العدد فردي أم زوجي ,, معرفة الاعداد الاولية ,,, وباختصار معرفة هل العدد x يقبل القسمة على w ,,,,

حتى هنا أنتهي من هذه الجلسة وفي الجلسة القادمة وهي الاخيرة سأعرض لكم بريمجا صغيرا لتداخل الحلقات نقوم فيه بادخال سلسلة فيقوم البرنامج بايجاد جميع التبديلات الممكنة لهذه الحروف وايجاد جميع الاحتمالات ,, مع التكرار ,,,
HG
HH
GG
GH
هذا في حاة الحرفين ,, أما في حالة الثالثة حروف فلدينا 27 احتمال ,, سيقوم البرنامج بعرضها كلها ,,, لمن يحب النتحديات فاليحاول حتى الجلسة المقبلة ايجاد حل هذا البرنامج ,,, وهو ليس سهلا اطلاقا بل يجب عليك معرفة الفكرة ,,,
وبالمناسبة الكود code لايتجاوز 10 أسطر !!!
والى الجلسة المقبلة ,

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

الجلسة الرابعة :

ماذا سيفعل البرنامج ؟؟ البرنامج سيقوم فقط بطباعة كل التبديلات الممكنة للأحرف في مكان بعضها البعض .. مع التكرار ...
لنفرض مثلا ان المستخدم أدخل خانتين &quot; حرفين &quot; ... سيكون عدد التبديلات الكلي 4 ..
واذا أدخل 3 أحرف سيكون عدد التبديلات الكلي 27 ... واذا أدخل 5 سيكون 3125 احتمال مختلف ...
الان الملاحظ أن عدد التبديلات هو عدد الأحرف أس عدد الخانات ... والملاحظ أن عدد الاحرف هنا هو نفسه عدد الخانات ...

الان كيف يتم التبديل ؟؟؟
لو فكرت في هذا مليا ستجد ان الكمبيوتر سيطبع الخانة الاولى بحيث يغيرها كل مرة ويطبع الخانة الثانية ولايغيرها حتى يتم طباعة كل احتمالات الخانة الاولى .. عندها يزيد الخانة الثانية ليضع فيها الحتمال الثاني ... والخانة الثالثة ستكون أيضا ثابتة ولن تزيد الا اذا تم استعراض جميع احتمالات الخانة الثانية .. وهكذا حتى اخر خانة .. سيتم تطبيق هذا السيناريو لكل احتمال !!!

الان كيف يمكن كتابة كود code كهذا بالحلقات ؟؟ الاجابة البديهية هي الحلقات التداخلة حيث يكل سهولة يمكن ان نضع عدد حلقات LOOP بعدد الخانات .. وكل خانة ستهتم بطباعة الخانة المطلوبة منها ...
خذ المثال التالي لطباعة التبدبلات في 3 خانات ....

مثال 1:
اقتباس
رمز برمجي:
char x[3] = &quot;CAT&quot;

for( int q= 0 ; q <3;q++)
}
for( int w= 0 ; w<3;w++)
{
for( int e= 0 ; e<3;e++)
{
cout << x[e]<<x[w]<<x[q]
{
{
CONSOLE.WRITELINE(endl);
{

الان هذا المثال سيفي بالمطلوب لو كان لدينا سلسلة 3 خانات ...
لكن السؤال لو أردنا أن نجعل عدد الخانات 4 .. سنكتب 4 حلقات .. 5 حلقات ... وهكذا ...
ماذا لو أردنا أن نجعل الكمبيوتر يبدل بين 1000 خانة .. مليون خانة !!!
مستحيل كتابة حلقات متداخلة بهذه الصورة البشعة .. فما الحل ؟؟؟
الحل هو أن نختصر عدد الحلقات كما فعلنا في أمثلة الجلسة السابقة ... دائما ماتوجد عدة طرق لكتابة الحلقات ... ويمكن كما ذكرت سابقا أن نختصر عدد الحلقات بادخال عامل باقي القسمة % بشكل فعال ...
هذا ماسيحدث هنا خذ المثال التالي ...

مثال 2:
اقتباس
رمز برمجي:
char STRING[3] = &quot;CAT&quot;
int POW
for(int q=0;q<pow(3,3); q++)
{

for(int w=0;w<3;w++)
{

POW=pow(3,3)
[cout<<STRING
[ ((q-(q%POW))/POW)%3

}
cout<<endl;
}

الان هذا المثال يعمل تماما كما في المثال ... لكن هنا اذا أردنا في أي لحظة ان نزيد عدد الخانات فيكفي تغيير أي قيمة 3 بالقيمة 4 وسيعمل المثال بشكل جيد !!!
مالذي حدث ليتم ذلك ... اللعبة كلها في المعادلة التي باللون الرمادي ....
هي التي تحسب رقم عنصر الخانة الحالية باستخدام باقي القسمة,,,

ركز قليلا في المعادلة وستفهم مالذي يجري ....

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

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

الموضوع الاصلي
http://www.millionshost.com/vb/showt...hp?p=14#post14 (http://www.millionshost.com/vb/showthread.php?p=14#post14)






ألعاب الأندرويد مجانا و حصريا (http://www.apotox.info/forum)




https://fbcdn-sphotos-d-a.akamaihd.net/hphotos-ak-ash4/482113_236967293114455_1193518507_n.png (http://www.dzbatna.com)
©المشاركات المنشورة تعبر عن وجهة نظر صاحبها فقط، ولا تُعبّر بأي شكل من الأشكال عن وجهة نظر إدارة المنتدى (http://www.dzbatna.com)©

استعمل مربع البحث في الاسفل لمزيد من المواضيع


سريع للبحث عن مواضيع في المنتدى