الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

Continue

مغلق
بدأه ♥ حُوريّة ♥ في 22 أغسطس 2008 · 29 رد · 7,766 مشاهدة · في المواضيع والدروس
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع
post-140583-1219425325.txt

بسم الله الرحمن الرحيم

كيف تعمل الكلمة(الأمر)

continue

,.,.,.,.,.,.,.

قبل البدء:

1. مستوى الدرس إبتدائي و متوسط

2. رقم السطر المستخدم(للإشارة) به إلى رقم سطر الشيفرة الموجود في صندوق الشيفرة و ليس إلى الأرقام الموجودة بالرسوم التوضيحيّة.

3. متوقعة الإلمام الإبتدائي المسبق بلغة ++C أو C لدى الدارس|الدارسة.

,.,.,.,.,.,.,.,.,.,,.

الكلمة continue:

الكلمة continue هي كلمة اساسية محجوزة في لغتي C و ++C. الكلمة continue في اللغة الطبيعية(الإنجليزية) تعني الفعل(إستمر)... ولكن ميكانيكية (آلية) هذه الكلمة في لغة ++C بالتحديد هي العوْدة أو القفز إلى الشرط الأساسي لحلقة التكرار مباشرة..

  • for…

  • while…

  • do…while

تكون آلية هذه الكلمة عوْدة (رجوع) إلى الشرط الرئيسي لحلقة التكرار إذا أُستعملتْ مع الحلقة التكرارية for و الحلقة التكرارية while...أمّا بخصوص الحلقة التكرارية do…while فهي قفز(تخطّي) إلى الشرط الرئيسي...(لش نحكي كتير؟ :happy: ) نطبّق المثال التالي:

الشيفرة التالية تصف لنا آلية الكلمة continue على أنها عودة(رجوع) إلى الشرط.

  1.  
  2. //ArabTeam2000 forum
  3. //By Raghad a.a 2008
  4.  
  5. #include <iostream>
  6. using std::cin;
  7. using std::cout;
  8. using std::endl;
  9.  
  10. int main()
  11. {
  12. int x = 0;
  13.  
  14. while( x < 10) //The condition...
  15. {
  16. x++;
  17. continue; //return to the condition
  18. cout << "This will never be printed..." << endl;
  19. }
  20. return 0;
  21.  
  22. }
  23.  

بكل بساطة السطر (18) الذي يلي الكلمة continue لن يُطبع على الشاشة ابداً كما هو موضّح ضمنياً بالنص...لأن الكلمة ستعمل آلياً على الرجوع مرة اخرى للتحقق من الشرط الرئيسي بالأعلى نزولاً مرة أخرى داخل جسد الحلقة إلى أن تصطدم الشيفرة(البرنامج) مرة أخرى بالكلمة من جديد وهكذا إلى أن ينتهي تحقق الشرط و من ثَم الخروج من الحلقة كليّاً دون المرور على أي سطر(سطور) بعد الكلمة continue. راقبوا هذه الدوامة(الحلقة التكرارية) على الرسم التالي موضحةً بالسهوم:

post-140583-1219425878_thumb.png

ملاحظة1: كذلك هو الحال مع الحلقة التكرارية for….

طيب الآن نعمل تطبيق و نقوم بمراقبة آلية الكلمة continue مع الحلقة التكرارية do…while لنتعرّف على آلية القفز التخطّي...من الشيفرة التالية:

  1.  
  2. //ArabTeam2000 forum
  3. //By Raghad a.a 2008
  4.  
  5. #include <iostream>
  6. using std::cin;
  7. using std::cout;
  8. using std::endl;
  9.  
  10. int main()
  11. {
  12. int x = 0;
  13. do
  14. {
  15.  
  16. x++;
  17. continue;
  18. cout << "This will never be printed..." << endl;
  19.  
  20. }while ( x < 10);
  21.  
  22. return 0;
  23.  
  24. }
  25.  

من الشيفرة السابقة من السطر(13) حيثُ تبدأ الحلقة التكرارية do…while نزولاً لزيادة المتغير x بقيمة واحد..يصادف البرنامج كلمة continue ليقفز و يتخطّى إلى الشرط الموجود ببند while سطر (20) مباشرة بدون تنفيذ وطباعة السطر رقم (18) عند cout. نراقب معاً الرسمة التوضيحية التالية

post-140583-1219426147_thumb.png

ملاحظة2: العودة أو القفز بواسطة الأمر continue ليست فقط لسطر واحد بل لأي عدد من السطور..فهي إمّا عودة مباشرة أو قفزة مباشرة إلى بند الشرط The Condition مباشرة.

ملاحظة3: طبعاً الإستعمالات السابقة لـ continue كانت مجرد تمهيدية للوصول إلى معرفة آليتها و ليست طُرق نموذجية برمجية فعّالة ابداً...

,.,.,.,.,.,..,.,

مثال: طباعة الإعداد الفردية..

مثال تطبيقي نموذجي و نافع باستخدام الأمر أو الكلمة continue:

نموذجياً فإن الإستعمال لكلمة continue يكونُ من داخل العبارة الشرطية if statement داخل الحلقة التكرارية. عادةً يتم التحقق من شرط ما داخل الحلقة التكرارية فإن كان الشرط صائب true فسيكون من الضروري العودة أو القفز مباشرة إلى الشرط الرئيسي الخاص بالحلقة التكرارية ككل, تجاوزاً لكل سطر و أمر موجود بالحلقة التكرارية بعد الكلمة continue مباشرة او بعد الجملة الشرطية if statement المتضمنة للكلمة continue...الأمر بسيط..بعد دراسة الشيفرة التالية التي تعمل على طباعة مجموعة الأعداد الفرديّة المحصورة من 0 و 20...

  1.  
  2. //ArabTeam2000 forum
  3. //By Raghad a.a 2008
  4.  
  5. #include <iostream>
  6. using std::cin;
  7. using std::cout;
  8. using std::endl;
  9.  
  10. int main()
  11. {
  12. int x = 0;
  13. while( x < 20)
  14. {
  15.  
  16. x++;
  17. if( (x%2) == 0 )//Is it an even number?
  18. continue; /*Yes: so go back directly to the while condition
  19.   and check it again*/
  20.  
  21. cout << x << endl;/*The odd number will be printed,
  22.   if the previous condition is false*/
  23. }
  24. return 0;
  25.  
  26. }
  27.  

لمحة على الشيفرة السابقة:

من المعروف حسابياً(رياضياً) أن قسمة أي عدد زوجي على 2 دائماً يكون الباقي منه 0, و قسمة أي عدد فردي على 2 الباقي منه دائماً 1(أكيد تتذكروا طريقة تحويل الأعداد من عشري إلى ثنائية بالقسمة إلى 2) !!

هذا هو الحال في بند الشرط if حيثُ يتم التحقق من ذلك...فإذا كان جواب الشرط صائب true (أي أن العدد بالفعل زوجي) فإن الكلمة continue ستقوم بدورها ناقلةً دورة البرنامج إلى رأس (او الشرط الرئيسي) الحلقة التكرارية while نزولاً على اوامر جسد الحلقة مرة أخرى... و هكذا حتى يكون جواب الشرط خاطيء false فبهذا يكون العدد فردي فيتم طباعته على الشاشة.

,.,.,.,.,.,.,.,.,.

المهم من الدرس هو معرفة آلية الكلمة continue, فأرجو من الله أن يكون الموضوع و الدرس واضح...لكم منّي اجمل الأمنيَات

post-140583-1219425325.txt

اعداد و تقديم: اختكم المخلصة رغــد

[وسط]

♥ Countess ♥

57899411.gif

♥

[/وسط]

#2

بسم الله ماشاء الله

اسلوب راقى ومميز فى ايصال المعلومة بشكل واضح ومبسط

بارك الله فى هذا العمل وجعله فى ميزان حسناتك ان شاء الله

والله الموفق

#3

بارك الله فيكى اختنا العزيزة رغد ..... منتظرين بقية مواضيعك

ما شاء الله استخدام الالوان و الكواد المرتبة المنسقة الواضحة و الصور .... بارك الله فيكى ..

منتظرين شرح break -_-

:thumb_up: :clapping:

#4
اقتباس
بكل بساطة السطر (18) الذي يلي الكلمة continue لن يُطبع على الشاشة ابداً كما هو موضّح ضمنياً بالنص...لأن الكلمة ستعمل آلياً على الرجوع مرة اخرى للتحقق من الشرط الرئيسي بالأعلى نزولاً مرة أخرى داخل جسد الحلقة إلى أن تصطدم الشيفرة(البرنامج) مرة أخرى بالكلمة من جديد وهكذا إلى أن ينتهي تحقق الشرط و من ثَم الخروج من الحلقة كليّاً دون المرور على أي سطر(سطور) بعد الكلمة continue. راقبوا هذه الدوامة(الحلقة التكرارية) على الرسم التالي موضحةً بالسهوم:

17 و ليس 18 لأن الوسم GCODE يقوم تلقائيا بإضافة سطر عند إضافة لأي شفرة .

''‏اللهم إني أسالك إيمانا دائما وأسألك قلبا خاشعا وأسألك علما ‏نافعا وأسألك يقينا صادقا وأسألك دينا قيما وأسألك العافية من كل ‏بلية''

'‏اللهم أغفر للمؤمنين و المؤمنات و المسلمين و المسلمات الأحياء ‏منهم و الأموات'

www.it-scoop.com

#5

يا اخي ابداع والله من جد من افضل الشروحات ، توني عرفت شيء ان مستحيل الواحد يتعلم من كتاب واحد ،

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

وجزاك الله كل خير اختي الفاضلة على الدروس .. وواصلي بارك الله فيك ..

لا إله إلا الله محمد رسول الله عليه الصلاة والسلام

سبحانك اللهم وبحمدك اشهد ان لا إله إلا انت استغفرك واتوب اليك

سأتقن الـ ++C و
PHP إن شاء الله تعالى ...

جاري العمل على
Microsoft Sql Server و MySQL ...

 

#6

بارك الله بيكم جميعاً...شاكرة تشجيعكم الكريم..

,.,.,.,.,.,.,.,.,.

ليست هناك اي اخطاء بخصوص الترقيم في الشرح...شاكرة اهتمامك

[وسط]

♥ Countess ♥

57899411.gif

♥

[/وسط]

#7

يعطيك العافية اختي بس احس استخدمها نادر جدا

يعني فية كثير من الطرق الي تغني عنها ..

جزاك الله خير

#8

استخدامها منتشر جدا ...

اقتباس
يعني فية كثير من الطرق الي تغني عنها

مثل ؟؟

mov eax, dword ptr ds:[0xffdf0308]

jmp dword ptr [eax+0xfc]

#9

^^^

يعني ما هي اوامر محجوزة!

لكن بدون استخدام هذي الطريقة .......

#10

يمكن أن نستخدم Goto Lable بدل Continue في المثال ، ونضع الـ Label قبل عمليه الشرط ... وبالتالي سوف يكون عملها مشابه لcontinue ... :

myLbl :

while ( condition ) 
{

if ( any Condition ) 
goto myLbl;

// here any Statement
}

لكن بشكل عام جمله Goto لا يفضل أستخدامها في اللغه ...

درس مبسط وموضح بشكل جيد أخت رغد ، عمل جيد :) .

بالتوفيق ،

http://informatic-ar.com منصة تعليمية عربية في علوم الحاسب والبرمجة

https://moalfat.com  للكتب الالكترونية والكورسات التعليمية

Everything we see now is just an engineering solution based on old science

#11
GamingMasteR كتب:
استخدامها منتشر جدا ...
Wajdy Essam كتب:

لكن بشكل عام جمله Goto لا يفضل أستخدامها في اللغه ...

درس مبسط وموضح بشكل جيد أخت رغد ، عمل جيد :) .

بالتوفيق ،

بالضبط استخدامها منتشر جداً كما أشار (فقيد الإشراف) اخي GM

:happy:

وكما تفضل اخي وجدي ممكن نعملها بواسطة جُملة Goto ولكن ليست طريقة نموذجية وبتعمل من الشيفرة مكرونة (إسبكتي)

سعيدة بمرورك و برأيك اخي وجدي و أخي المستشار كمان

:happy:

تم تعديل هذه المشاركة بواسطة اللؤْلؤة رغَـــد في 24 أغسطس 2008 في 18:27 — السبب: إسبتكتي = اسبكتي باليباني

[وسط]

♥ Countess ♥

57899411.gif

♥

[/وسط]

#12

ليه بنحاول ايجاد بدائل مع ان الله مسهلاها علينا

لماذا goto فى هذا الظرف بالذات مع ان continue مناسبة انت لا تعرفون قمة المعاناه الموجودة فى بعض اللغات :D

موقع البرنامج

مبارك لشعب تونس photo-thumb-42837.png

#13

مشكورة

يعطيج العافية

#14

مع أن الموضوع قديم نوعا ما ...

هل يتفضل أحدكم مشكورا توضيح لماذا لا يستحسن استعمال Goto؟؟

ولماذا يتم تفضيل ال Continue عليها!

It's hard to stay in such ridiculous situation

#16

مشكور يا عمر ...

الموضوع أعرفه وكود From Spaghetti to Bolognese أعرفه جيدا ...

أريد تفسير Algorithmy ...

سؤالي عن التفسير هو فقط من باب اثراء الموضوع ... لدي تفسير لكنه Low Level جدا.

أنتظر خالد على أحر من الجمر :D

It's hard to stay in such ridiculous situation

#17

السلام عليكم ...

اقتباس
هل يتفضل أحدكم مشكورا توضيح لماذا لا يستحسن استعمال Goto؟؟

ولماذا يتم تفضيل ال Continue عليها!

في الستينات كانت الأروقة الأكاديمية محتدمة بالنقاش حول أساليب البرمجة, و بالتحديد الأسلوب الإجرائي. ظهرت بعض الأقول التي تنادي بـ goto و البعض الآخر الذي ينادي بإزالتها.

حتى أتى مقال الشهير Dijkstra لكي يفصل بين الآراء و تعتبر بعدها goto "مضرة".

continue و break ماهي إلا goto و لكن المبرمج لا يتحكم في مكان القفز. ببساطة, فإن goto تمكنك من القفز إلى أي مكان في الكود, بينما continue و break بمجرد النظر إليهما ستعرف مكان القفزة, و هو بداية الـ loop.

لذلك سيصبح البرنامج أكثر ترتيباً و بالأخص أسهل للقراءة.

تقول البحوث أن العقل البشري حين قرائته للكود فإنه يفضل أن يكون الكود متتالياً, و لكن استخدام goto يؤدي إلى قفزات عشوائية فوق الكود دون تسلسل معين!

و لذلك تم استحداث ما يسمى restricted goto, و هما break و continue :)

الآن كل ما تكلمنا عنه هو هل يفضل البرمجة باستخدام البرمجة الإجرائية أم باستخدام goto ؟

بالطبع, البرمجة الإجرائية تتفوق كما في حالة اللغات الإجرائية عمومأً, و لو جربت استخدام goto "فقط" كما في حالة مبرمجي الأسمبلي, فهي عملية تحتاج إلى تركيز و الكود الناتج ليس سهل القراءة كما هو الحال في الـ for loop و الـ while loop في اللغات العالية المستوى.

و لكن هناك سؤال آخر, هل يجب تضمين goto من الأساس في أي لغة ؟

++C/C و #C و الكثير غيرهم قاموا بتضمينها, و لكن Java لم تفعل :) و برأيي الشخصي أنه يجب تضمينها, فهي أداة كغيرها قد يحتاجها المبرمج و لا يجب حجب الأداة عن المبتدئين و إضرار المحترفين على حسابهم, و أعتقد أن مبرمجي الـ embedded systems أكثر الناس حاجة لها.

مثال على حالة لابد فيها من استخدام goto هي تصور أنك تريد الخروج من داخل حلقتين متداخلتين إلى خارجهما, كيف ستفعل ذلك بدون goto بغض النظر عن فائدة المثال نفسه :)

while(true)
{
	while(true)
	{
		// Execution is here <----
		// I want to jump to 'THERE'!
	}
}
THERE: // 'THERE' label

تحياتي ...

#18

Data Structure و Algorithm Methods

وين الشباب :D

It's hard to stay in such ridiculous situation

#19

طيب هل من الممكن أن يخبرني أحد ما هي ال Complexity لبرنامج رغد باستخدام continue مرة وباستخدام goto مرة أخرى!

It's hard to stay in such ridiculous situation

#20
اقتباس
حالة لابد فيها من استخدام goto

يمكن استخدام break مرتين مع شرط. :P

اقتباس
هل من الممكن أن يخبرني أحد ما هي ال Complexity

تقصد تعقيد الوقت ام الذاكره ؟

لست متأكد ولكن اعتقد ان ال goto حتكلف ذاكرة اكثر.

الحمد لله الذي هدانا لهذا وماكنا لنهتدي لولا ان هدانا الله

#21
while(true)
{
bool x =0;
	while(true)
	{
		// Execution is here <----
if(double-break condition(maybe you include another for single-break))
{
x =1;
break;
	}
}
if(x)
break;
}

هل تظن ان التفاف مثل ذلك افضل من استخدام goto

تم تعديل هذه المشاركة بواسطة apex في 14 يوليو 2009 في 01:31

name : mohamedyosry

#22

السلام عليكم ...

اقتباس
طيب هل من الممكن أن يخبرني أحد ما هي ال Complexity لبرنامج رغد باستخدام continue مرة وباستخدام goto مرة أخرى!

لا يوجد فرق على الإطلاق بين goto و بين continue و break :)

اللهم إلا أن الـ goto أنت تحدد عنوان التعليمة التالية التي ستقفز إليها, بينما في break و continue ليس لك تحكم و الـ label يقوم المترجم بتحديده و هو بداية الحلقة.

كما قلت في البداية هاتان التعليمتان عبارة عن restricted goto لا أكثر.

بالمناسبة أي خوارزمية تريدها دون استثناء يمكنك كتابتها باستخدام goto و if-else فقط دون أي حاجة لأي construct آخر كـ loops و غيرها. هذه الـ constructs أوجدت فقط لتسهيل كتابة البرامج و لذلك تسمى الطريقة بالـ structured programming.

اقتباس
يمكن استخدام break مرتين مع شرط.

صحيح يمكنك القيام بنفس الفعل, و لكنك في هذه الحالة لم تخرج من الحلقة الداخلية إلى خارج الحلقتين, و إنما خرجت من الداخلية إلى الخارجية ثم من الخارجية إلى الى باقي الكود :)

عموماً goto هي بالضبط كالمؤشرات :)

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

هل من الأفضل استخدام goto أم الـ loops ؟

في 99.99% من الحالات فإن الـ structured programming تؤدي الغرض, هناك 0.01% goto تؤدي العمل بشكل أفضل من جميع النواحي, ليس فقط الأداء, و لكن الكود يصبح أكثر وضوحاً باستخدامها.

هل تريدون أمثلة :D

تم تعديل هذه المشاركة بواسطة Khaled.Alshaya في 14 يوليو 2009 في 00:37

#23

السلام عليكم...

goto بتعمل قفز غير مشروط مباشرة و بهيك هيه اسرع و لكن continue مخصصة برمجياً للإنتقال إلى الشرط مباشرة مش للعنوان الإسمي label.

هاد بخصوص low level

شكراً لكل الأخوان المشاركين بالموضوع

سبب التعديل: حُرة

تم تعديل هذه المشاركة بواسطة ♥رغـد♥ في 15 يوليو 2009 في 05:40

[وسط]

♥ Countess ♥

57899411.gif

♥

[/وسط]

#24

اسف على الخطاء المطبعى

كنت اجيب على سوال الاخ خالد

اقتباس
مثال على حالة لابد فيها من استخدام goto هي تصور أنك تريد الخروج من داخل حلقتين متداخلتين إلى خارجهما, كيف ستفعل ذلك بدون goto بغض النظر عن فائدة المثال نفسه regular_smile.gif

كود

while(true)

{

while(true)

{

// Execution is here <----

// I want to jump to 'THERE'!

}

}

THERE: // 'THERE' label

تحياتي ...

ولكن نسيت حذف الاستفهام من ردة , حاليا قمت بتعديل الرد

اتذكر انى قرات فى الفصول الاولى فى كتاب ماء (الفصول التى تتحدث عن التاريخ) ان معظم البرامج كانت تعتمد على الgoto والاسباجتى لحين ظهور مشاكل الاسباجتى

واخترع احد العلماء(ربما عدة علماء ,لا اتذكر) مفهوم structured programming المنظم والذى ازال معظم مساوى الgoto وكان النظام معرف بثلاث مبادى

-selection

-repetition

-sequence

وبداء المبرمجون يتنافسون لتحويل اكواد goto الى structured وربما هذا ما يحدث حتى الان . اذا كان الحل موجود بgoto فيبحثون عن حلول structured

عن نفسى ارى ان استخدام goto مثل حق الفيتو ,اذا لم تصل بحل بالنقاش استخدم الفيتو

ولكن علينا فعل الكثير من الجهد قبل ان نستسلم للgoto

وكما قال الاخ خالد

اقتباس
في 99.99% من الحالات فإن الـ structured programming تؤدي الغرض, هناك 0.01% goto تؤدي العمل بشكل أفضل من جميع النواحي, ليس فقط الأداء, و لكن الكود يصبح أكثر وضوحاً باستخدامها.

تم تعديل هذه المشاركة بواسطة apex في 14 يوليو 2009 في 02:03

name : mohamedyosry

#25

مشكورين

هذا الموضوع مغلق.

مواضيع مشابهة