منتديات افترافيكت

عزيزي الزائر / عزيزتي الزائرة يرجي التكرم بتسجبل الدخول اذا كنت عضو معنا
او التسجيل ان لم تكن عضو وترغب في الانضمام الي اسرة المنتدي
سنتشرف بتسجيلك
شكرا
ادارة المنتدي



 
الرئيسيةس .و .جالتسجيلدخولتسجيل دخول الاعضاء

شاطر | 
 

 الدرس الثاني للمبتدئين في لغه c++

اذهب الى الأسفل 
كاتب الموضوعرسالة
amralizxz
المدير العام
المدير العام
avatar

رقم العضوية : 1
الدولة : اليمن
الدولة :

sms sms : مرحبا بالاعضاء والزوار الكرام

الجنس الجنس : ذكر عدد المساهمات : 548
نقاط : 2788
تاريخ التسجيل : 22/09/2009
العمر : 28

مُساهمةموضوع: الدرس الثاني للمبتدئين في لغه c++   الثلاثاء يناير 05, 2010 1:43 am

---- الدرس الثاني ---- ---------- ----------


:: تعليمات التحكم ::

هناك خمسة أنواع لتعليمات التحكم .. و سنأخذها كلها و هي كالتالي :
1 – العبارة ( if ) .
2 – العبارة ( if/else ) .
3 – العبارة ( switch ) .
4 – العبارة ( for ) .
5 – العبارة ( while ) .
6 – العبارة ( do/while ) .

الأول و الثاني و الثالث هم عبارات شرط .. و الرابع و الخامس و السادس للتكرار التعدادي و المشروط .. و سنأخذ في هذا الدرس أول أربعة و البقية في الدرس القادم إن شاء الله .

1 – العبارة ( if ) :

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

قاعدة /

كود:

كود:
if ( condition )
statement;حيث أن condition هو الشـرط و يكون النـاتج من سطر if إمـا true فينفـذ التعليمـات أو false فيتجاهلها و ينتقل للسطر التالي .. و statement هي التعليمة أو التعليمات التي ستنفذ إذا ما تحقق الشرط فقط .


مثال 1 / لشرط ينفذ تعليمة واحدة :
كود:

كود:
if ( x==0 )
cout << "Error\n";ملاحظة 1 / من أجل ( == ) راجع العمليات المنطقية في الدرس الأول .. لأنها تختلف عن عملية الإسناد التي تسند قيمة لمتغير .. فهنا لا يتم إسناد الصفر إلى x بل يتم إختبار قيمته هل هي الصفر أم لا .
ملاحظة 2 / إذا كانت قيمة x تساوي الصفر أصبح الناتج true و بالتالي ينفذ تعليمة cout .. أما لو كانت x لا تساوي الصفر أصبح ناتج الإختبار false و بالتالي لن يتم تنفيذ تعليمة الإخراج .
ملاحظة 3 / سطر if لا يحتوي على فاصلة منقوطة .


مثال 2 / لشرط ينفذ عدة تعليمات :
بفرض أن a هو البسط .. و b المقام

كود:

كود:
if ( b!=0 )
{
cout << "We can devide …\n";
cout << a/b << endl;
}ملاحظة 1 / إذا أردنا تنفيذ أكثر من تعليمة إذا ما تحقق الشرط فيجب وضع أقواس الكتل ( { } ) .. و هذه الأقواس سنستخدمها كثيراً في مواضيع أخرى .. مثل المصفوفات و التوابع و السجلات و الكائنات .. إلخ .
ملاحظة 2 / في حالة القسمة على صفر .. تعرفون في الرياضيات أن القسمة على الصفر لا تجوز .. و بالتالي يجب معالجة هذا الأمر بواسطة عملية إختبار .. و إلا إن حدث و قسمت على صفر فسيحدث خطأ في برنامج و سيقفل .. حاول أن تقسم على الصفر و لاحظ النتيجة .

قاعدة / في البرمجة يجب عليك معالجة جميع الحالات الاستثنائية لتجنب الأخطاء و لتجنب حدوث مشاكل في برنامجك .. فهناك من يشبه برمجة التطبيقات كتعليم الولد الصغير القراءة و الكتابة و غير ذلك .. فيجب عليك إخبار برنامجك بكل الإحتمالات و الأخطاء المتوقعة و ماذا يفعل أثناء حدوثها .. أما إذا حدث خطأ أو مشكلة و لم تكن واضعاً التعليمات المناسبة لذلك فسيكون مصير برنامج الإغلاق .

2 – العبارة ( if/else ) :

يتم إختبار شرط فإذا تحقق ( أي كان ناتج الإختبار true ) يتم تنفيذ مجموعة من التعليمات .. أما إذا لم يتحقق ( أي إذا كان ناتج الإختبار false ) فيتم تنفيذ مجموعة أخرى من التعليمات .

قاعدة /

كود:

كود:
if ( condition )
{
Statement;
}
else
{
Statement;
}ملاحظة 1 / وضعنا الأقواس ( { } ) لأنه سيتم تنفيذ أكثر من تعليمة في كل من if و else .. أما لو كنا نريد تنفيذ تعليمة واحدة فقط فلا نستخدم الأقواس ( { } ) .
ملاحظة 2 / condition هو الشرط .. و statement التعليمات .
ملاحظة 3 / لا حظ أنه لا توجد أيضاً فاصلة منقوطة بعد else .


مثال /
كود:

كود:
if ( x==0 && b>=0 )
cout << "We can divide\n";
else
cout << "We can not divide\n";ملاحظة 1 /إذا كان ناتج الإختبار true فيتم تنفيذ تعليمات if .. أما إذا كان ناتج الإختبار false فيتم تنفيذ تعليمات else .
ملاحظة 2 / من أجل ( && ) راجع العمليات المنطقية في الدرس الأول .. و من أجل ناتج عملية الإختبار تعامل هذه العلامة و العلامة ( || ) تماماً كما في الرياضيات ( التقاطع و الإتحاد ) :
1 – ( && ) وتعني and : إذا كان الطرف الأول و الثاني true فناتج الإختبار true فيتم تنفيذ التعليمات التي تحت if .. أما لو كان أحد طريفيها false أو كلاهما فسيكون ناتج الإختبار false و بالتالي سينتقل إلى تعليمات else .
2 – ( || ) و تعني or : إذا كان أحد الطرفين true فناتج الإختبار true فيتم تنفيذ تعليمات if .. أما لو كان كلا الطرفين false فناتج الإختبار false و بالتالي سيتم تنفيذ تعليمات else .

ملاحظة 3 / إذا كنت تريد استخدام شرط يحتوي على أكثر من عملية منطقية ( && أو || ) فحاول استخدام الأقواس من أجل التمييز و لأجل معرفة ناتج الإختبار ( هناك طريقة أخرى و هي أولوية العمليات ) .


مثال /
بفرض أن x تساوي 5 و b تساوي 10
كود:

كود:
if ( ( x>=0 && x<=10 ) || b<0 )عندها يكون ناتج الإختبار true لأن :
1 – x تقع ضمن المجال 0 و 10 .. و بالتالي ناتج الطرف الأيسر لـ ( || ) يساوي true .
2 – b أكبر من الصفر و بالتالي الطرف الأيمن لـ ( || ) يساوي false .
3 – أحد الطرفين يساوي true و بالتالي ناتج الإختبار true .

للإستزادة :
أما لو أردنا معرفة أولويات العمليات المنطقية && و || .. فتعامل مع && مثل الضرب و || مثل الجمع .. و بالتالي سيتم اختبار المعاملات && أولاً مهما كان عددها ثم سيتم تنفيذ المعاملات || .


مثال /
بفرض أن x تساوي 5 و y تساوي 10 و z تساوي 100
كود:

كود:
if ( x>=0 && x<=10 || y<0 && z>100 )عندها يكون ناتج الإختبار true لأن :
1 – x تقع ضمن المجال 0 و 10 .. و بالتالي ناتج الطرف الأيسر لـ ( || ) يساوي true .
2 – y أكبر من الصفر و z ليست أكبر من 100 بل تساوي 100 لأن هناك فرق .. و بالتالي ناتج الطرف الأيمن لـ ( || ) يساوي false .
3 – أحد الطرفين يساوي true و بالتالي ناتج الإختبار true .

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

قاعدة / من الممكن أن نضع أكثر من عبارة if داخل عبارة واحدة لـ if .. مثال :

كود:

كود:
if ( x==0 )
cout << "X = 0 \n";
else if ( x==1 )
cout << "X = 1 \n";
else if ( x>1 )
cout << "X > 1 \n";و بصفة عامة نستطيع وضع عدة عبارات مداخلة مع بعضها البعض .. فمثلاً نستطيع وضع عبارة if ضمن عبارة for و هكذا ..

3 – العبارة ( switch ) :

يتم فيها التحقق من القيم التي يحتويها متغير ( متحول ) ما .. فإذا كانت إحدى القيم التي يحتويها ذلك المتحول موجودة ضمن القيم التي افترضناها يتم تنفيذ تعليمات معينة .. أما إذا لم توجد قيمة ذلك المتحول ضمن تلك القيم فيتم الإنتقال إلى العبارة default و ستنفذ تعليماتها .. أما إذا وجدت قيمته ضمن أحد القيم فلن يتم تنفيذ العبارة default .

قاعدة /

كود:

كود:
switch( Variable )
{
case Value1 : Statements;
case Value2 : Statements;
case Value3 : Statements;
default : statements;
}1 – Variable : متحول ما مهما كان نوعه ( صحيح أو حقيقي أو منطقي ... ) و يوضع بين قوسين بعد العبارة switch .
2 – Value : قيمة ما نريد معرفة إذا كان المتغير يحتويها .. و توضع بعد العبارة case ( انتبه للقيم الحرفية بحيث يجب أن تضع الحاصرات إما المزدوجة أو الفردية .. راجع الدرس الأول ) .
3 – Statements : ممكن أن تكون تعليمة واحدة أو عدة تعليمات .
4 – default : يتم تنفيذها فقط عند عدم وجود أي قيمة من تلك القيم في المتحول .
5 – يجب وضع : الأقواس ( { } ) إذا أردنا التحقق من أكثر من قيمة .. أما لو كنا نريد التحقق من قيمة واحدة فممكن أن لا نضع تلك الأقواس ( مثل العبارة if ) .. و لكن إن تحققنا من قيمة واحدة و وضعنا أيضاً العبارة default فعندها أصبحت switch تحتوي على أكثر من تعليمة و بالتالي يجب وضع الأقواس ( { } ) .

ملاحظة هامة / إذا تحققت إحدى القيم فسيتم تنفيذ جميع التعليمات الموجودة ضمن تلك القيمة و القيم التي تلي تلك القيمة بالترتيب .. و إذا أردنا إلغاء تلك العملية فيجب علينا إضافة الأمر break .


مثال هام /
بفرض أننا جعلنا المستخدم يدخل قيمة لعدد صحيح ضمن المتحول n لتحديد أيام الأسبوع بحيث أن العدد 1 ليوم السبت و 2 للأحد ... إلخ :
كود:

كود:
switch( n )
{
case 1 : cout << "Sat\n"; break;
case 2 : cout << "Sun\n"; break;
case 3 : cout << "Mon\n"; break;
case 4 : cout << "Tue\n"; break;
case 5 : cout << "Wed\n"; break;
case 6 : cout << "Thu\n"; break;
case 7 : cout << "Fri\n"; break;

default : cout << "Error…\n";
}ملاحظة / من أجل توضيح عمل break .. بفرض أن المستخدم أدخل الرقم 4 و بفرض أننا لم نكتب الأمر break عندها سيتم كتابة أيام Tue و Wed و Thu و Fri على الشاشة كما قلنا .. هنا تكمن أهمية هذا الأمر فهو يجعل المترجم يتجاهل باقي القيم التي تلي القيمة التي نريدها و يخرج إلى خارج كتلة ( عبارة ) switch و سيتم تنفيذ التعليمة التي تلي تلك البنية أو الكتلة.. وبالتالي ستظهر Tue فقط على الشاشة .

قاعدة / يستخدم الأمر break للخروج من الكتلة التي يوجد فيها فقط .. و يمكن أن يستخدم في أي من الأوامر و العبارات التي هي موضوع درسنا ما عدا البنية if .

هناك أمر آخر يقوم بعكس وظيفة break .. و هو الأمر continue :
يقوم هذا الأمر بالإنتقال إلى بداية الكتلة التي يوجد بها متجاهلاً باقي التعليمات التي توجد بعد هذا الأمر في تلك الكتلة ( البنية ) .. و يستخدم في العبارات : for و while و do/while فقط ( يعني في التكرار فقط ) .. سنأخذها في حلقة for في هذا الدرس .

4 – العبارة ( for ) :

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

قاعدة /

كود:

كود:
for( i=1; i<=10; i++)
{
Statements;
}1 – يتم تقسيم ما بين القوسين التابعين لـ for إلى ثلاثة أقسام :

أ ) القسم الأول : يمثل القيمة الإبتدائية لبداية التكرار بحيث تمثل i أي متحول صحيح .. و ممكن أن تكون أي قيمة و يفضل أن نبدأ بالقيمة واحد .. بشرط أن يكون شكل هذا القسم كالتالي :

كود:

كود:
Variable = ValueVariable : متحول التكرار .. وممكن أن نعرفه في بداية البرنامج .. أو من الأفضل أن نقوم بالتالي :

كود:

كود:
for( int i=1; i<10; i++)وبهذا الشكل كأنك عرفته في بداية برنامجك .

Value : القيمة الإبتدائية التي سيبدأ التكرار بالعد منها .. و ممكن أن تكون قيمة عددية أو متغير يحمل قيمة عددية .. حيث أن ( = ) هي عملية إسناد سيتم فيها إعطاء المتغير ( Variable ) قيمة ابتدائية .


مثال /
بفرض أن h متغير صحيح معرف من قبل و يحمل القيمة واحد
كود:

كود:
for( int i=h; i<10; i++ )لاحظ أن بين كل قسم هناك فاصلة منقوطة .

ب ) القسم الثاني : يمثل شرط متابعة التكرار ( انتبه المتابعة و ليس التوقف ) .. بحيث فإذا تحقق يستمر التكرار مرة أخرى أما إذا لم يتحقق فيتوقف التكرار و يتم الخروج من حلقة for .. و يتم تنفيذ السطر الذي يلي تلك البنية .. و بالنسبة لكيفية كتابة هذا القسم فهو يشابه تماماً طريقة كتابة الشرط في عبارة if .

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

2 - Statements و هي التعليمات التي سيتم تكرارها عدد من المرات .


شرح آخر مثال :

سيتم هنا تكرار مجموعة من التعليمات 9 مرات لأن القيمة الإبتدائية 1 و شرط الاستمرار ( أو القيمة النهائية ) 9 لأن i<10 و ليس i<=10 .. و أيضاً لأننا سنزيد هذا التكرار في كل مرة بمقدار واحد .. عند الإنتهاء من تنفيذ تعليمات for في المرة الأولى يتم زيادة المتغير i واحد و من ثم يختبر الشرط هل هو محقق أم لا ؟ فإذا تحقق يعود المترجم لتنفيذ أول تعليمة ضمن هذه الحلقة .. فتنفذ التعليمات مرة ثانية و عند الانتهاء من آخر تعليمة ضمن حلقة for يتم زيادة المتغير i واحد و يختبر الشرط مرة أخرى .. فإذا تحقق يعود المترجم إلى تنفيذ أول تعليمة ضمن هذه الحلقة ... و هكذا .. إلى أن ينتفي الشرط و تصبح قيمته false .
و من الممكن أن نطلق على كل عملية تكرار اسم دورة .. فهنا سيتم تنفيذ 9 دورات في حلقة for .

ملاحظة 1 / إذا كنت تريد تكرار تعليمة واحدة فلا تضع أقواس الكتل ( { } ) .. كما ذكرنا في في العبارات السابقة تماماً
ملاحظة 2 / ممكن أن تضع أكثر من متغير للتكرار و أكثر من شرط و أكثر من عملية على متغيرات التكرار.. بحيث تضيف فاصلة فقط ( , ) في كل قسم لكي تضيف متحول آخر أو عملية أخرى .. بينما في القسم الثاني تضيف ( && أو || ) .


مثال /
كود:

كود:
for( int i=1, j=5; i!=j || j >=0; i++, j-- )هنا سيتم زيادة المتغير I واحد و سيتم إنقاص المتغير j واحد في كل دورة .. بالإضافة إلى أن لدينا متغيرين بقيمتين ابتدائيتين مختلفتين .
ملاحظة 1 / انظر إلى القسم الأول في آخر مثال .. فهو يشابه تماماً طريقة تعريف المتغيرات بقيم ابتدائية ( راجع الدرس الأول ) .. بحيث لا نضيف int قبل المتغير j فالأولى تكفي .
ملاحظة 2 / تسمى حلقة for بالتكرار المعدود .. أي التكرار الذي ينتهي بعد عدد محدد من المرات .. على عكس حلقات التكرار while و do/while و تسمى هذه الحلقات بالتكرار المشروط .. بحيث تنتهي تلك الحلقات بانتفاء الشرط و لا نعرف عدد المرات التي تم فيها التكرار .. و لكننا نستطيع معرفة عدد مرات التكرار بطريقة معينة سنأخذها في الدرس القادم إن شاء الله حين ندرس التكرار المشروط .

الأمر continue :قلنا بأن الأمر break يقوم بكسر الكتلة ( البنية ) الموجود فيها و الخروج منها .. أما الأمر continue ( الذي يستخدم في التكرار فقط ) يقوم بتجاهل التعليمات الموجودة الباقية و الإنتقال إلى التكرار ( الدورة ) التالية .. سأشرح طريقة عمله بواسطة هذا المثال :

كود:

كود:
for( int i=1; i<=5; i++ )
{
if( i==3 ) continue;
cout << "Montada\n";
}هنا سيتم كتابة الكلمة Montada أربع مرات فقط بدلاً من خمسة .. لأننا وضعنا شرط يقول بأنه إذا وصل قيمة التكرار إلى 3 فانتقل إلى الدورة ( التكرار ) التالي أي التكرار رقم 4 .. و لن يتم كتابة تلك الكلمة في المرة الثالثة بسبب الأمر continue الذي تجاهل باقي أوامر الكتلة for في المرة الثالثة فقط .

ملاحظة / انظر إلى المثال السابق كيف وضعنا عبارة if داخل حلقة for .. فهذا ممكن كما قلنا
الرجوع الى أعلى الصفحة اذهب الى الأسفل
http://effects.yoo7.com
 
الدرس الثاني للمبتدئين في لغه c++
الرجوع الى أعلى الصفحة 
صفحة 1 من اصل 1

صلاحيات هذا المنتدى:لاتستطيع الرد على المواضيع في هذا المنتدى
منتديات افترافيكت :: منتديات الكمبيوتر والانترنت :: ساحه تعليم لغات الكمبيوتر-
انتقل الى: