الخميس، 26 مارس 2015

الجملـة goto :

الجملـة goto :
لا أحد يستخـدم هذه الجملـة إلا إن كان فاشلاً أو هاويـاً للبرمجــة وأنـا أعــني
الذي يستخدمها بكثرة ولـيس فـي حـالات الضـرورة القصـوى جـداً ، أمـا عــن
سبب وضعـي فقرة لهـذه الجملــة فالسـبب يعــود إلـى أنهـا ارتبطـت تاريخيـاً
بالتكرار مع العـلم أنها ليست حلقة تكراريـة بـل هــي جملــة قفـز تتنقـل بـين
الأكـواد ، أيضـاً مـن أحـد الأسـباب أنهـا تعتبـر مقدمــة جيـدة للغايــة لموضـوع
حلقات التكرار ، سنقوم الآن بكتابة كـود أيضاً للطلاب لكنـه هذه المـرة يطلـب
من المستخدم إدخال درجات خــمس مــواد ثـم يقـوم بحسـاب متوسـط هـذه
المـواد ، قد تعتقد أننا سنستخدم خمس متغيرات لكل مـادة متغيـر ، لكـن مـع
التكرار فلن نستخدم إلا ثلاثـة متغيرات وسنختصر أكثـر مـن 10 أسـطر ، انظـر
إلى هذا الكـود:
CODE
1- #include <iostream>
2- using namespace std;
3-
4- int main()
5- {
6- float degree=0;
7- float total=0;
8- int i=0;
9-
10- ss:
11- cout << "Enter the degree of course number " << i+1
12- << endl;
13- cin >> degree;
14- total=total+degree;
15- i++;
16- if (i<5)
17- goto ss;
18-
19- cout << "The Avreg is:\t"
20- << total/5 << endl;
21- return 0;
22- }
انظـر إلـى السـطور 6-8 تجـد أنهـا ثـلاث متغيـرات ، المتغيـر الأول هــو درجــة
المادة والمتغير الثاني هـو مجمـوع المــواد والمتغيـر الثالـث هــو الـذي يقـوم
بحساب عـدد المـواد التي قمت أنت بإدخالها وسيزيد هذا المتغير مرة واحـدة
مع كل إدخال للمادة حتى يصل إلى الرقم أربعـة ثم يتوقف (يصل إلـى الـرقم
4 لأنـه يبدأ حساب عـدد الإدخالات من الرقم 0 وليس من الرقم 1 ).
دعــنا الآن نلقـي نظـرة فاحصــة علـى السـير الطبيعـي للبرنــامج ابتـداءً مـن
السطر العاشر:
· انظر إلى السـطر 10 تجـد أنــنا كتبنـا (:ss) يعتبـر هـذا الأمـر أشـبه مـا
يكون بنقطـة قفز ستفهـم ما تعنيـه بعـد قليل .
· يسـتمر السـير الطبيعـي للبرنـامج حتـى يصـل إلـى السـطر 13 حيـث
يطلب من المستخدم إدخال درجـة المادة الأولى .
· عـندما يصل البرنامج إلـى السـطر 15 فـإن المتغيـر i يزيـد مـرة واحـدة
لأننا كما قلنا سابقاً أنـه مع كل إدخال يزيد العـدد i مرة واحدة .
· يدخل البرنامج في حلقـة if وسـينجح اختبـار الشـرط وبالتـالي ينتقـل
التنفيذ إلى السطر 17 .
· يطلـب الكـــود مـن البرنــامج الانتقـال إلــى مـا أســماه ss عبـر الكلمـــة
المفتاحيـة goto يعـود البرنامج إلى السطر 10 ثم يعيد تكرار الأمر أكثر
من أربع مرات.
· في المـرة الخامســة سـيكون المتغيـر i وصـل إلـى الـرقم 4 وبالتـالي
فحينما يصل إلى السطر 15 سيزيد حتى يصل إلى الرقم 5 .
· لن ينجح إختبار الجملة if في المرة الخامسـة وبالتالي فلن يـتم تنفيـذ
العبارة goto وسيستمر السير الطبيعي للبرنـامج.
· حينمـا يصــل البرنــامج إلــى الســطر 20 فإنــه يقــوم بقسمـــة مجمـــوع
المـواد على عـدد المـواد وبالتالي نحصل على المتوسط الحسابي
الجمع التراكمي:
قد تستغرب مـن كتابـة السـطر 14 هــكذا وهـذا مـا يعـرف بـالجمع التراكمـي
فلنفــرض أن البرنــامج لــم يــزال فــي المــرة الأولــى كمــا تعلــم فــإن قيمتــي
المتغيرين grade و total صفر ، حينما يقوم المستخدم بإدخال قيمـة الـمتغير
grade وينتقل التحكم إلى السطر 14 كما يلي:
total=total+degree;
فإن البرنامج يقوم بجمع قيمـة المتغير grade مع قيمــة المتغيـر total والتـي
هي حالياً صـفر ثـم يأخـذ مجمــوع المتغيـرين ويضيفهــما إلـى نفـس المتغيـر
total وهذا ما يعرف بالجمع التراكمي ، إذا ما أدخل المسـتخدم الدرجــة 100
إلى المتغير grade فإن قيمـة المتغير total تصبح 100 ، في المرة الثانيـة إذا
قام المستخدم بإدخـال القيمــة 20 إلـى المتغيـر grade فـإن البرنـامج حينمـا
يصل إلى السطر 14 فإنـه يأخذ قيمـة المتغير grade التي أدخلها المسـتخدم
ويضــيفها مــع المتغيــر total والــذي هـــو حاليــاً 100 (حســب دورة التكــرار
السابقة) إلى نفس المتغير total لتتغير من 100 إلى 120. ونفس ما يحـدث
سيحدث في الـدورات التكراريـة القادمــة، وهــكذا فـإن المتغيـر grade يتغيـر
دائماً وسيستخدم المتغير total لمراكمـة إدخالات المتغير grade من هنا أتى
مسمى الجمع التراكمي ، أما إذا ما أردت القيام بتخـزين درجات جميع المـواد
فالتقنيــة الوحيـدة هــي المصـفوفات أو القـوائم المترابطــة أو مـا ستتعلمــه
لاحقاً.
محاذير بالنسبة للجملة goto :
كما ترى فإن البرنامج يقوم بتجاوز النقطـة ss عـند بداية تنفيذه ، تخيل لو كان
لديك أكثر من نقطـة وأكثر من جملة goto وستتداخل جمل goto فـي بعضـها
حتى يصبح من المستحيل متابعــة البرنـامج وقـد تظهـر أخــطاء منطقيــة قـد
يكون من العسير كشفها إن لم يكـن شـبه مسـتحيل ، لـذلك قـام المبـرمجين
بتشبيه البرامج التي تحتـوي علـى الكثيـر مـن جمـل goto ببـرامج معـكرونــة
الأسباجيتي . سنتعرف الآن على أول حلقة تكرارية وهـي while/do .

ليست هناك تعليقات:

إرسال تعليق