الدرس التاسع – الحلقات-2

سلسلة من الدروس في لغة البرمجة ++C

الدرس التاسع – الحلقات-2

ملاحظات حول حلقات for

1-    لا يوجد فرق عندما يكون تزايد العداد بمقدار واحد بأن نكتب i++ or ++i :

#include<iostream>

using namespace std;

int main()

{

int i;

for( i = 0 ; i<6 ; ++i)

   cout<<i<<endl;

cout<<i<<endl;

for( i = 0 ; i<6 ; i++)

   cout<<i<<endl;

cout<<i<<endl;

return 0;

}

2-    يمكن التحكم بحلقة for  باستخدام أكثر من متحول:

لدينا تابع خطي يمثل مستوٍ من الفراغ و له المعادلة:

Z = 2X+3Y

أوجد نقاط المستوي

P0(0,1),P1(1,3),P2(2,5),P3(3,7),P4(4,9)

#include<iostream>

using namespace std;

int main()

{

int X; //X`X axis

int Y; //Y`Y axis

int Z; //Z`Z axis

for( X = 0, Y=1 ; X<5 && Y<11; X++,Y+=2)

{

   Z = 2*X + 3*Y;

   cout<<“P”<<X<<“(“<<X<<“,”<<Y<<“,”<<Z<<“)”<<endl;

}

return 0;

}

3-    يمكن حذف الجزء الخاص بتزايد أو تناقص العداد بشرط أن يوجد تعليمة داخل جسم حلقة for :

#include<iostream>

using namespace std;

int main()

{

int X; //X`X axis

int Y; //Y`Y axis

int Z; //Z`Z axis

for( X = 0, Y=1 ; X<5 && Y<11; )

{

   Z = 2*X + 3*Y;

   cout<<“P”<<X<<“(“<<X<<“,”<<Y<<“,”<<Z<<“)”<<endl;

   X++;

   Y+=2;

}

return 0;

}

4-    عند وجود فاصلة منقوطة بعد الحلقة فذلك سيؤثر على زمن التنفيذ و على قيمة المتحول عداد الحلقة(قارن المثال بوضع العداد 6000000):

#include<iostream>

using namespace std;

int main()

{

int i;

for( i = 0 ; i<600000000; ++i);

cout<<i;

return 0;

}

حلقات التكرار While

و هي حلقة تكرار منتهي مقيد بشرط ، عدد مرات التنفيذ غير محددة.

الشكل العام:

while(condition)

{

            //code

}

مثال: في مثال الآلة الحاسبة البسيطة نريد استمرار عملها طالما أننا لم ندخل الحرف ‘F’:

//very simple calculater

#include<iostream>

using namespace std;

int main()

{

     /*Variables declaration*/

char operation ;

float number1,number2,result;

     /*prompt*/

cout<<“Choose the operation you need”<<endl;

cin>>operation;

/*processing*/

while(operation !=’F’ && operation !=’f’)

{

switch (operation)

{

     case ‘+’://Add

           cout<<“Enter the numbers,please”<<endl;

           cin>>number1>>number2;

           result = number1 + number2;

           cout<<“result = “<<result<<endl;

           break;

     case ‘-‘://Sub

           cout<<“Enter the numbers,please”<<endl;

           cin>>number1>>number2;

           result = number1 – number2;

           cout<<“result = “<<result<<endl;

           break;

     case ‘*’://Multiple

           cout<<“Enter the numbers,please”<<endl;

           cin>>number1>>number2;

           result = number1 * number2;

           cout<<“result = “<<result<<endl;

           break;

     case ‘/’://Division

           cout<<“Enter the numbers,please”<<endl;

           cin>>number1>>number2;

           result = number1 / number2;

           cout<<“result = “<<result<<endl;

           break;

     default:

           cout<<“This operation is n’t supported”<<endl;

}//end switch

cout<<“Choose the operation you need”<<endl;

cin>>operation;

}//end while

return 0;

}

ملاحظة: يجب أن يحتوي جسم الحلقة على تعليمة تؤثر على شرط استمرار الحلقة، و إلا نحصل على حلقة لانهائية.

مثال: القاسم المشترك الأكبر وفق خوارزمية إقليدس.

بفرض لدينا العددين 32 و 28 تكون خطوات إيجاد الناتج كالتالي:

32      24

8        24

8        16

8        8

#include<iostream>

using namespace std;

int main()

{

            int X,Y;

            cout<<“enter two integers to find the GCD “<<endl;

            cin>>X>>Y;

            if(X==0 || Y==0)

                        cout<<“Bad Value ..”<<endl;

            else

            {

                        while(X!=Y)

                        {

                                    if(X>Y)

                                                X-=Y;

                                    else

                                                Y-=X;

                        }

                        cout<<“GCD= “<<X<<endl;

            }

return 0;

}

الحلقة اللانهائية

–         الحلقة الصحيحة

و يكون لها الشكل :

while(true)

{

            //code

}

–         الحلقة الخاطئة

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

#include<iostream>

using namespace std;

int main()

{

            int road,step;

            cout<<“enter the road length and your step “<<endl;

            cin>>road>>step;

            while(road > 0)

            {

                        cout<<“You are in the road\nthers is”<<road/step<<“steps”<<endl;

                        road -= step; عند حذف هذا السطر تصبح الحلقة لانهائية//

            }

cout<<“you have arraived”<<endl;

return 0;

}

ملاحظة: تستخدم حلقة for عندما نعلم بشكل مسبق عدد مرات تكرار الحلقة، بينما تستخدم حلقة while عندما لا نعلم مسبقاً عدد مرات التكرار و يمكن صياغة حلقة for باستخدام حلقةwhile  و العكس صحيح.

حلقة do – while

لها الشكل العام:

do

{

//code

}while(condition);

تنفذ هذه الحلقة مرة واحدة على الأقل حتى لو كان الشرط غير محقق.

مثال: إدخال كلمة مرور حيث سيطلب منك البرنامج كلمة المرور مرة واحدة على الأقل، في حين كانت صحيحة ينتهي البرنامج و إلا سيعطيك 4 فرص أخرى لإدخالها.

#include<iostream>

using namespace std;

int main()

{

            int repeat=1;

            int key;

            do{

                        cout<<“Enter your key”<<endl;

                        cin>>key;

                        if(key == 2465)

                        {

                                    cout<<“Welcome”<<endl;

                                    return 0;

                        }

                        else

                        {

                                    cout<<“you have lost “<<repeat<<” chances”<<endl;

                                    repeat++;

                        }

            }while(repeat<=5);

            cout<<“Bay..!”;

return 0;

}

About زين العابدين

مهندس حواسيب - معهد IDA - جامعة Braunshweig التقنية.
هذا المنشور نشر في دروس في البرمجة, دروس تعليمية. حفظ الرابط الثابت.

أضف تعليقاً

إملأ الحقول أدناه بالمعلومات المناسبة أو إضغط على إحدى الأيقونات لتسجيل الدخول:

WordPress.com Logo

أنت تعلق بإستخدام حساب WordPress.com. تسجيل خروج   / تغيير )

صورة تويتر

أنت تعلق بإستخدام حساب Twitter. تسجيل خروج   / تغيير )

Facebook photo

أنت تعلق بإستخدام حساب Facebook. تسجيل خروج   / تغيير )

Google+ photo

أنت تعلق بإستخدام حساب Google+. تسجيل خروج   / تغيير )

Connecting to %s