السلام عليكم ...
:: مقدمة ::
أخذنا في الدرس الماضي عبارات الشرط و حلقة التكرار for .. اليوم سنأخذ ما تبقى من تلك العبارات و هي كالتالي :
5 – العبارة ( while ) .
6 – العبارة ( do/while ) .
و لكن قبل ذلك سنأخذ بعض الملاحظات .. و سنحل التمارين التي أعطينكم إياها في الدرس الماضي .. و أيضاً سنأخذ النافذة Watch التابعة لنوافذ تصحيح الأخطاء Debug Window .. حيث أن هذه النافذة نستفيد منها في معرفة القيم التي تأخذها المتغيرات مهما كان نوعها .
---------- ---------- ---------- الدرس الثالث ---------- ---------- ----------
اليوم : السبت ... التاريخ : 12 / 2 / 2005
:: تابع تعليمات التحكم ::
قبل إكمال الموضوع .. هناك فكرتين يجب أن أذكرهما :
الأولى :
تتعلق بالمتغيرات المنطقية bool و كيفية استخدامها في عبارة الشرط if :
سنأخذ على الفور مثالاً يوضح الفكرة التي أريدها :
مثال /
بفرض أن x متغير منطقي من النوع bool
كود:
bool x = true;
if( x )
cout << "X = True " << endl;
لاحظوا كيف و ضعنا الشرط .. في الشرط نستطيع وضع المتغيرات من النوع bool بهذا الشكل و سيفهم المترجم أنك تريد إختبار في ما إذا كانت x تساوي true .
و لكن الشرح الصحيح هو أن المترجم سيرى أن قيمة المتغير x تساوي true و بالتالي نتيجة الإختبار أصبحت true و بالتالي سينفذ التعليمات التي بداخل الشرط .. و بالتالي هذه طريقة مباشرة بدلاً من كتابة :
و أيضاً هناك طريقة مشابهة لإختبار القيمة false .. انظر المثال :
كود:
if( !x )
cout << "X = False " << endl;
لاحظ كيف وضعنا معامل النفي ( ! ) قبل المتحول x .. و هي مشابهة تماماً للعبارة التالية :
الثانية :
تتعلق بالحلقة for .. بأننا نستطيع عدم كتابة أحد الأقسام الثلاثة المتعلقة بالقيمة الإبتدائية و النهائية و العملية على متغير التكرار .. و ممكن أيضاً أن نضع الحلقة فارغة هكذا :
و بالتالي ستصبح الحلقة مفتوحة و لن يتم الخروج منها .. و لكننا نستطيع ذلك عن طريق الأمر break كما تعلمنا .
----------------------------------------
:: حل التمارين ::
السؤال الأول :
اكتب برنامجاً يطلب من المستخدم إدخال 3 أعداد صحيحة و من ثم يكتب له العدد الأكبر .
الحل /
كود:
#include <iostream.h>
void main()
{
int a,b,c,max;
cout << "Enter a , b , c : ";
cin >> a >> b >> c;
max = a;
if( b > max )
max = b;
if( c > max )
max = c ;
cout << "Max = " << max << endl;
}
شرح الحل :
1 – قمنا بتعريف أربع متغيرات من النوع int : ثلاثة من أجل الأعداد و الرابع الذي سيحمل قيمة العدد الأكبر .
2 – قمنا بطلب تلك الأعداد من المستخدم .
3 – يجب أن نفترض أن عدد ما هو العدد الأكبر .. ثم نقوم بتعديل تلك القيمة إذا وجدنا أن الأعداد الأخرى هي الأكبر .
حيث افترضنا أن a هو العدد الأكبر .. ثم اختبرنا فيما إذا كان b هو الأكبر فإذا كان كذلك قمنا بتغيير max .. و بعد ذلك اختبرنا فيما إذا كان c هو الأكبر .. و بعد ذلك كتبنا الناتج .
ملاحظة / هناك حلول كثيرة لهذا السؤال .. و حلول الأعضاء صحيحة و لكن أرى أن هذا الحل بسيط و سهل الفهم ..
----------------------------------------
السؤال الثاني :
اكتب برنامجاً يطلب من المستخدم إدخال عددين صحيحين و من ثم يكتب له فيما إذا كان الثاني قاسماً للأول .
الحل /
كود:
#include <iostream.h>
void main()
{
int a,b;
cout << "Enter a , b : ";
cin >> a >> b;
if( a % b == 0 )
cout << "b is dividable " << endl;
else
cout << "b is not dividable " << endl;
}
شرح الحل :
1 – قمنا بتعريف متغيرين صحيحين من أجل العددين الذين سنختبرهما .
2 – طلبنا القيم من المستخدم .
3 – نريد أن نعرف متى يكون العدد الثاني قاسماً للأول ؟ يكون كذلك إذا كان باقي قسمة الأول على الثاني تساوي الصفر .. مثال : العدد 6 و 2 حيث أن 2 هو قاسم للعدد 6 لأن باقي قسمة 6 على 2 تساوي الصفر .. و هكذا .
لذلك قمنا بإختبار تلك العملية بواسطة عبارة الشرط if .. و من ثم كتبنا الإجابة .
----------------------------------------
السؤال الثالث :
اكتب برنامجاً يطلب من المستخدم إدخال عدد صحيح و من ثم يكتب له جميع قواسمه .
الحل /
كود:
#include <iostream.h>
void main()
{
int n;
cout << "Enter a Number : ";
cin >> n;
for( int i=1; i<=n; i++ )
if( n % i == 0 )
cout << i << endl;
}
شرح الحل :
1 – قمنا بتعريف المتغير n الذي سنوجد له قواسمه كلها .
2 – طلبنا القيمة من المستخدم .
3 – هذا السؤال هو نفس السؤال السابق .. و لكننا هنا نريد إيجاد جميع الأعداد التي تعد قاسماً للعدد n .. إذاً نحتاج إلى حلقة for بحيث نضع القيمة الإبتدائية واحد و النهائية هي العدد نفسه n .. حيث أن i ستأخذ في كل دورة أحد الأعداد التي بين 1 و n و بعد ذلك سنختبر نفس الإختبار في السؤال السابق .. و بذلك نكون قد اختبرنا جميع الأعداد التي نريدها .. بحيث نكتب قيمة i إذا كان باقي قسمة n على i تساوي الصفر .
ملاحظة مهمة / انظر إلى حلقة for كيف أنها لم تحتوي على الأقواس ( { } ) .. و ذلك لأنها تحتوي على تعليمة واحدة فقط و هي if .. و العبارة if أيضاً لم تحتوي على أقواس الكتل .. لأنها أيضاً احتوت على تعليمة واحدة فقط .
----------------------------------------