بسم الله الرحمن الرحيم
اهلا بيكم اخواني من جديد
و سامحوني علي طول التاخير فقد كنت مشغول شويه في امتحاناتي
و الان ساكمل معكم الطريق الي الاحتراف
متمنيا ان تكونوا استفدتم من دروس المستوي الاول
و حتي لا اطيل عليكم
هيا بنا نبدا
بسم الله الرحمن الرحيم
اهلا بيكم اخواني من جديد
و سامحوني علي طول التاخير فقد كنت مشغول شويه في امتحاناتي
و الان ساكمل معكم الطريق الي الاحتراف
متمنيا ان تكونوا استفدتم من دروس المستوي الاول
و حتي لا اطيل عليكم
هيا بنا نبدا
• المستوي الثاني:
التكرارات و القرارات
ليس العديد من البرامج تنفذ كل بياناتها بدقة شديدة من البداية حتى النهاية.
أكثر البرامج ( مثل العديد من البشر ) تقرر ما العمل ردا علي تغيير الظروف.
تدفق السيطرة ينتقل من احد أجزاء البرنامج إلي آخر معتمدا علي الحسابات الجارية في البرنامج.
بيانات البرنامج التي تسبب مثل هذه الانتقالات تسمي بيانات السيطرة .
وهناك نوعان رئيسيان: التكرارات ( الحلقات ) و القرارات.
كم مرة التكرار تم تنفيذه أو إذا كان القرار أدي إلي إعدام جزء من الكود
معتمدا علي إذا كان بعض التعبيرات صحيحة أم خاطئة .
هذه التعبيرات بالضبط تتضمن نوع من المشغلات التي تسمي المشغلات العلائقيه و التي تقارن بين قيمتين .
منذ أن كانت عملية التكرارات والقرارات ترتبط بهذه المشغلات ارتباط مباشر نحن سنفحصهم أولا.
تم تعديل هذه المشاركة بواسطة البارودي في 7 فبراير 2005 في 00:29
• المشغلات العلائقيه
أي مشغل علائقي يقارن بين قيمتين. القيم يمكن أن تكون بأي صيغه-وذلك بالنسبة لأنواع البيانات في أل C++ كذلك مثل Char و Int و Float أو- كما سنري بعد ذلك – إنها ستستخدم في تعريف الفصائل( Classes ).
المقارنات تتضمن كذلك العلاقات مثل يساوي و اقل من و اكبر من.
نتيجة المقارنة تكون إما صح أو خطأ.
علي سبيل المثال: إما قيمتين تساوي ( صح True ) أو إنها لا تساوي
( خطأ false ).
برنامجنا الأول Relat يعرض المشغلات العلائقيه في المقارنة بين المتغيرات والثوابت للعدد الصحيح .
#include<iostream.h>
int main()
{
int numb;
cout<<"Enter a number:";
cin>>numb;
cout<<"numb<10 is "<<(numb<10)<<endl;
cout<<"numb>10 is "<<(numb>10)<<endl;
cout<<"numb==10 is "<<(numb==10)<<endl;
return 0;
}تم تعديل هذه المشاركة بواسطة البارودي في 7 فبراير 2005 في 00:49
يؤدي هذا البرنامج ثلاثة أنواع من المقارنة بين الرقم 10 و الرقم المدخل بواسطة المستخدم.
ها هي المخرجات عندما المستخدم يدخل الرقم 20:
تم تعديل هذه المشاركة بواسطة البارودي في 7 فبراير 2005 في 00:51
وها هي نسخة من البرنامج:
يتحقق التعبير الأول إذا كانت قيمة Numb اقل من 10.
يتحقق التعبير الثاني إذا كانت قيمة Numb اكبر من 10.
يتحقق التعبير الثالث إذا كانت قيمة Numb تساوي 10.
كما تري من النتائج:
معالج أل C++ يعتبر أن التعبير True تمثلها القيمة 1 أما التعبير False فتمثلها القيمة صفر.
كما ذكرنا في الفصل السابق ( المستوي الأول ) أن أل C++ القياسية تتضمن النوع Bool الذي يمكن أن يحمل احد القيمتين الثابتتين True أو False.
أنت قد تعتقد بان نتائج التعبيرات العلائقية مثل :
Numb<10
تكون من النوع Bool و أن البرنامج سيطبع False بدلا من صفر و سيطبع True بدلا من 1.
في الحقيقة أل C++ مريض بالفصام(schizophrenic) بالأخص في هذه النقطة . عرض نتائج العمليات العلائقية أو حتى قيم متغيرات النوع Bool مع أل
Cout<<
ينتج لنا صفر أو 1 و ليس True أو False .
من الناحية التاريخية هذا لان أل C++ بدأت بدون النوع Bool. قبل وصول أل C++ القياسية كانت الطريقة الوحيدة للتعبير عن True أو False كانت ب صفر و 1. الآن False يمكن أن تمثل إما ب False المنطقية أو بالقيمة الصحيحة صفر. و True يمكن أن تمثل إما ب True المنطقية أو بالقيمة الصحيحة 1.
في أكثر الحالات البسيطة الاختلاف ليس ظاهر لأننا لسنا بحاجة لكي نعرض القيمة True أو False نحن نستخدمهم في التكرارات و القرارات للتأثير علي ماذا سيفعل البرنامج في المرحلة القادمة.
ها هي قائمة كاملة للمشغلات العلائقية بال C++ :
تم تعديل هذه المشاركة بواسطة البارودي في 7 فبراير 2005 في 01:11
الآن دعنا ننظر إلي بعض التعبيرات التي تستخدم المشغلات العلائقيه و أيضا ننظر إلي قيمة كل تعبير .
إن أول خطين بيهم بيانات مهمة و التي وضعت قيم المتغيرات Harry و Jane .
أنت قد تريد إخفاء التعليقات ببطاقة بيسبول Jose Canseco القديمة و تري هل يمكنك أن تتوقع أي تعابير ستأخذ القيمة True وأيهما ستأخذ القيمة False .
لاحظ ذلك المشغل يساوي (==) يستخدم علامتين يساوي. الخطأ الرئيسي هو استخدام إشارة يساوي واحده – مشغل المهمة – مثل المشغل العلائقي.
هذا سئ منذ أن كان المعالج لا يلاحظ أي شئ خاطئ .
علي أي حال برنامجك لن يعمل ما تريد ( ما لم تكن محظوظ جدا ).
بالرغم من أن أل C++ تضع 1 للإشارة إلي True يفترض أن أي قيمه غير إل صفر ( كذلك مثل -7 أو 44 ) تكون True و صفر فقط هي التي False .
هكذا التعبير الأخير في القائمة يساوي True .
الآن دعنا نري كيف هذه المشغلات تستخدم في الحالات المثالية . نحن سنتكلم عن التكرارات أولا ثم سنتكلم عن القرارات .
بعد إذن المشرفين تم تثبيت الموضوع
Technical Lead Developer
اللهم قنى شر الجهل و الجهلاء
( اقْتَرَبَ لِلنَّاسِ حِسَابُهُمْ وَهُمْ فِي غَفْلَةٍ مَّعْرِضُونَ ) {الأنبياء:1}
شكرا لك اخي طارق ابراهيم
• التكرارات
التكرارات تسبب أن جزء من برنامج سيتكرر عدد معين من المرات.
التكرار يستمر عندما يتحقق الشرط ( True ). عندما الشرط يأخذ القيمة (False ) التكرار ينتهي والتحكم ينتقل إلي البيانات التي تلي التكرار.
هناك ثلاثة أنواع من التكرارات في أل C++:
(For loop و While loop و Do loop ).
• حلقة التكرار For
حلقة التكرار For (لكثير من الناس علي أي حال) هي أسهل حلقة تكرار في لغة إلC++ يمكن أن تفهم.
كل عناصر سيطرة حلقتها متجمعة في مكان واحد. بينما في إنشاءات الحلقات الاخري فتكون متفرقة حول البرنامج. و التي تجعل من الصعوبة اكتشاف كيف تعمل هذه الحلقات.
حلقة التكرار For تنفذ جزء من الكود عدد معين من الأرقام الثابتة.
هو عادتا (بالرغم من انم ليس دائما ) يستخدم عندما أنت تعلم قبل دخول حلقة التكرار كم عدد المرات التي تريد أن ينفذ فيها الكود .
ها هو مثال Fordemo و الذي يعرض مربعات الأعداد من صفر حتى 14 :
#include<iostream.h>
int main()
{
int j;
for(j=0;j<15;j++)
cout<<j*j<<" ";
cout<<endl;
return 0;
}تم تعديل هذه المشاركة بواسطة البارودي في 7 فبراير 2005 في 11:09
وها هو ملف مرفق بالبرنامج:
كيف يحدث ذلك؟ التعبير For يتحكم في التكرار. إنها تتكون من الكلمة المحجوزة For تتبعها قوسين الحصر التي تحتوي علي ثلاث تعبيرات يفصلهم عن بعضهم البعض بفاصلة منقوطة:
For (j=0; j<15; j++)
التعبيرات الثلاثة هي: تعبير التهيئة و تعبير الاختبار و تعبير الزيادة كما هو موضح في الشكل رقم (1) التالي:
تم تعديل هذه المشاركة بواسطة البارودي في 7 فبراير 2005 في 11:17
هذه التعبيرات الثلاثة عادة ( لكن ليس دائما) تتضمن نفس المتغير والتي نسميها متغير حلقة التكرار. في مثال Fordemo متغير حلقة التكرار هو "j" . لقد تم تعريفها قبل أن تكون التعبيرات مضمنه في جسم حلقة التكرار بادئة التنفيذ.
جسم حلقة التكرار عبارة عن اكواد يتم تنفيذها كل مرة يتم فيها عملية التكرار. تكرار هذا الكود هو السبب لعملية التكرار .
في هذا المثال جسم الدالة يحتوي علي سطر بيان واحد:
Cout<< j * j << " ";
يطبع هذا البيان مربع قيمة المتغير J. متبعه بمساحتين فارغة .
المربع يتم إيجاده بضرب قيمة المتغير J في نفسه .
بينما حلقة التكرار تنفذ قيمة المتغير J
تمر بالسلسلة (0 - 1 - 2 - 3 –وهكذا بحدود 14 رقم) لذلك فمربعات هذه الأعداد ستعرض (0-1-4-9 وهكذا بحدود 196 رقم)
لاحظ ذلك جملة For لا تتبع بفاصلة منقوطة. لان جملة For و جسم حلقة التكرار يعتبران سويا مكونين لبيانات البرنامج.
هذا توضيح مهم . إذا وضعت فاصلة منقوطة بعد جملة For فان المعالج سيعتقد أن ليس هناك جسم حلقة تكرار و البرنامج سيفعل أشياء أنت ربما لن تتوقعها.
دعنا نري كيف التعبيرات الثلاثة في جملة For تتحكم في حلقة التكرار.
تم تعديل هذه المشاركة بواسطة البارودي في 7 فبراير 2005 في 11:23
• تعبير التهيئة
إن تعبير التهيئة ينفذ مرة واحده فقط عندما تبدأ حلقة التكرار أولا. يعطي متغير حلقة التكرار قيمة أوليه. في مثال أل Fordemo تضع قيمة أل J بصفر.
• تعبير الاختبار
يتضمن تعبير الاختبار عادتا علي مشغل علائقي. يتم تقييمه في كل وقت خلال عملية التكرار مباشرة قبل تنفيذ جسم حلقة التكرار.
حيث يقرر سواء الحلقة ستنفذ مرة أخري . إذا كان شرط تعبير الاختبار True الحلقة ستنفذ أكثر من مرة واحدة.
إذا كان False سينتهي تنفيذها. و يعبر سيطرة البرنامج إلي البيانات بعد حلقة التكرار. في مثال إل Fordemo البيان:
Cout << endl;
ينفذ بعد تكملة حلقة التكرار.
• تعبير الزيادة
يغير تعبير الزيادة قيمة متغير حلقة التكرار في اغلب الأحيان بزيادة قيمتها. هو ينفذ دائما في نهاية حلقة التكرار بعد تنفيذ محتوي جسم حلقة التكرار.
هنا مشغل الزيادة ++ يضيف 1 إلي J في كل وقت خلال حلقة التكرار.
الشكل التالي يعرض خريطة تدفق Flowchart لعملية حلقة التكرار for.
• كم عدد المرات؟
حلقة التكرار في مثال إل Fordemo يتم تنفيذها بالضبط 15 مرة.
المرة الأولي قيمة المتغير J تساوي صفر و هذا مضمون في تعبير التهيئة.
آخر مرة خلال حلقة التكرار قيمة المتغير J تساوي 14 و هذا محدد بتعبير الاختبار j<15.
عندما قيمة المتغير j تصبح 15 تنتهي حلقة التكرار و جسم حلقة التكرار لا ينفذ عندما قيمة أل j تأخذ هذه القيمة.
الترتيب المعروض عموما يستعمل لفعل بعض الأشياء عدد معين من المرات: بداية من صفر مستخدما تعبير الاختبار مع المشغل اقل من "<" مع قيمة مناظرة للعدد المطلوب للتكرار وزيادة متغير حلقة التكرار بعد كل تكرار.
هنا مثال آخر لحلقة التكرار:
for(count=0; count<100; count++) //loop body
تم تعديل هذه المشاركة بواسطة البارودي في 8 فبراير 2005 في 10:16
كم عدد المرات جسم حلقة التكرار سيتكرر؟
بالضبط 100 مرة وذلك بالإحصاء يذهب من صفر حتى 99 .
• البيانات المتعددة في جسم حلقة التكرار
بالطبع أنت قد تريد تنفيذ أكثر من بيان واحد في جسم حلقة التكرار.
البيانات المتعددة تكون محدده بهذه الأقواس "{ }" فقط كما في الدالة.
لاحظ لا توجد فاصلة منقوطة بعد القوس النهائي لجسم حلقة التكرار.
بالرغم أن هناك فواصل منقوطة بعد البيانات الفردية الموجودة في جسم حلقة التكرار.
المثال القادم Cubelist يستعمل ثلاث بيانات في جسم الحلقة.
يطبع مكعبات الأعداد من 1 حتى 10 . باستخدام صيغة العمودين.
#include<iostream.h>
#include<iomanip.h>
int main()
{
int numb;
for(numb=1;numb<=10;numb++)
{
cout<<setw(4)<<numb;
int cube=numb*numb*numb;
cout<<setw(6)<<cube<<endl;
}
return 0;
}تم تعديل هذه المشاركة بواسطة البارودي في 8 فبراير 2005 في 10:27
ها هو ملف مرفق بالبرنامج:
سنصنع تغييرا آخر في البرنامج لكي نري أن ليس هناك شئ ثابت حول تنسيق شكل البرنامج المستخدم في المثال السابق.
متغير حلقة التكرار يهيئ نفسه للقيمة 1 و ليس صفر و ينتهي في 10 وليس 9 استنادا إلي " <= " اقل من أو يساوي المشغل.
التأثير هو أن جسم حلقة التكرار يتم تنفيذه 10 مرات و ذلك بتنفيذ متغير حلقة التكرار من 1 إلي 10 ( وليس من 0 الي9 ).
هذا الموضوع مغلق.