المساعد الشخصي الرقمي

مشاهدة النسخة كاملة : الدرس الرابع في دورة ++C - الجملة الشرطية if



المظفر بالله
16-06-2008, 02:10 AM
بسم الله الرحمن الرحيم
السلام عليكم ورحمة الله وبركاته
الحمدلله والصلاة والسلام على رسول الله وعلى آله وصحبه أجمعين


تعلمنا في الدرس السابق اهم الاساسيات التي يجب ان تكون راسخة في ذهننا طوال برمجتنا , اساسيات من المفترض ان تراعى بكتابة البرامج دوما , وتعرفنا على انواع الجمل وقلنا ان النوع الرابع هي مجموعة اخرى من الجمل وظيفتها القيام بشيء ما تحدده فيما بعد , وذكرت اننا سوف نتعلم ما هي في الدروس التالية , وهنا نحن الآن بصددها , إن شاء الله سيكون في هذا الدرس شرح عن الجمل الشرطية والدورانات

جمل التحكم وبنيتها Control Statements & Structure :
وهي نوعين :

ما يسمى جمل متتالية Sequential Control :

الجمل التي تنفذ مباشرة خلال البرنامج .



ما يسمى بالجمل الانتقالية Transfer Controls :


وهي ما سنتطرق اليه في درسنا اليوم , وتنقسم بدورها ايضا الى نوعين :


الجمل التحديدية او الشرطية Selection Statements :
مثل If و Switch ...
الجمل التكرارية Repetition Statements :
وهي الدورانات مثل دورانات Whileو do while و for ...


وطبعا قبل ان ندخل في النوع الثاني من الجمل يجب ان نعلم اشارات المقارنة الخاصة بلغة C++ Comparison Operator المكونة للشرط Condition وهي كالتالي:

المعنىمثال الاشارة العمليةx اكبر من yx > y>اكبر منx اصغر من yx < y<اصغر منx اكبر من او يساوي yx >= y>=اكبر من او يساويx اصغر من او يساوي yx <= y<=اصغر من او يساويx يساوي yx == y==يساويx لا يساوي yx != y !=لا يساوي

1. لاحظ ان الاشارة مقيدة بالشكل الذي تراه ولا يسمح بوجود مسافة بين الرموز المكونة لكل اشارة , مثلا == لا يسمح بكتابتها بالشكل = = سوف يعترض عليه المترجم ولن يتابع البرنامج...

2. في حال انك اخطأت في كتابة الجملة الشرطية باستخدام المساواة فكتبت = بدلا من == , لن يتعرض البرنامج حقيقة على ذلك , انما خلال التفيذ ستلاحظ ان هنالك خطأ منطقي اي في الحسابات وذلك بسبب تغير قيمة المتغير المقارن به مثلا x=5 فسيخزن الرقم 5 في x وسيعتبر الشرط صحيح في جميع الاحوال الا اذا كانت x=0 وذلك بسبب ان تحقق الشرط هو ان يكون ناتجه لا يساوي صفر اما اذا كان صفر فهذا يعني ان الجملة خطأ اي false اتمنى ان تكون واضحة..



وقبل ان بدأ ...
قد نحتاج للجمع بين اكثر من شرط اي قد نقول اذا كان x اكبر من 0 واقل من 100 , او قد نقول اذا كان x اقل من 0 واكبر من 100 فإننا نستخدم الاشارة التالية :

لصيغة "أو OR" نقوم بالجمع بين الشريطن او اكثر بإشارة || بدون مسافة لاحظ .

لصيغة "و AND" نقوم باستخدام && بدون مسافات وبهذا الشكل

سينتج خطأ منطقي اذا استخدمتم & بدلا من && و | بدلا من || .. ارجو الانتباه ...


مثال : x > 100 || x < 0


مثال : x < 100 && x > 0



ملاحظة مهمة : يمكنك تخزين قيمة الناتج من عملية المقارنة في متغير من نوع bool حيث ان جملة المقارنة فعيلا ترجع قيمة اما true او false ... مثال :


bool result = x > y;

بحيث يمكن استخدام المتغير متى احتجنا ذلك بدلا من الجملة الشرطية كاملة ....





اولا : الجمل الشرطية (بمعنى آخر التحديدية) وانواعها Selection Statements :



يقصد بالجمل الشرطية ببساطة هي الجمل التي قد تنفذ او لا , حسب قاعدة نحن نكتبها او الاصح شرط نحن نكتبه , وسميت تحديدية Selection لانها نحدد ما الذي ينفذ من الجمل :




الجملة الشرطية IF


الجملة if هكذا تكتب ولا تكتب IF او iF او If كما تعلمنا ان لغة السي بلس بلس حساسة لحاله الاحرف فكن حذر , هي جملة في ابسط اشكالها تختبر شرط ما اذا كان الشرط صحيح فإنه ينفذ الجملة التابعة لجملة if واذا كانت خاطئة فيتجاوز ما يتبع جملة if ويتابع عمله ...







والصيغة العامة تكون كالتالي:



if (condition )
{
statement1;
statement2;
statement3;
.
.
.
}
في هذه الصيغة نلاحظ ان هنالك اشارتي { و } وهاتين كما تعملنا في الدروس السابقة هي بداية البلوك ونهاية البلوك , وما داخلة هو مكونات البلوك , اذن في حال تنفيذ الجملة فاذا تحقق الشرط فإنه يتابع لينفذ الجملة او البلوك التابع لجملة if واذا لم يتحقق فإنه يتجاوز مباشرة عن هذه الجملة .... لاحظو الشكل التالي :


http://www.geek4arab.com/vb/imgcache/8414.imgcache (http://www.geek4arab.com)


وهذه جملة الـ if في ابسط حالاتها , ونلاحظ انها لم تنتهي بالفاصلة المنقوطة , واذا وضعت الفاصلة المنقوطة فإن هذا يعتبر انهاء لجملة if وتعتبر بنية كاملة , اعتقد بالامثلة تصل الفكرة التي قد لا تصل حقيقة الا بالامثلة ....


void main()
{
int age;
cout<<"Please input your age: ";
cin>> age;
if ( age < 100 ) {
cout<<"You are pretty young!\n";
}
}
أنظر للبرنامج هو يقوم بقراءة رقم نحن ادخلناه خلال تنفيذ البرنامج , يقرأ البرنامج قيمة المتغير age بعد الادخال ومن ثم يرى هل هو اكبر من القيمة 100 فإذا كان ذلك, يطبق الجملة التي داخل البلوك التابع له فإذا كان العمر المدخل اقل من 100 يطبع You are pretty young! اما اذا يساوي 100 او اكبر من 100 فإنه لا يطبع شيء ...


void main()
{
int age;
cout<<"Please input your age: ";
cin>> age;
if ( age < 100 ); {
cout<<"You are pretty young!\n";
}
}
هذا المثال نفس المثال اعلاه لكن الفرق بسيط جدا , هذا المثال ببساطة دائما يطبع You are pretty young! لكن لماذا؟


السبب ببساطة يوجد فاصلة منقوطة!!!!!
هنا if ( age < 100 ); , لذلك فهو سواء حقق الشرط او لا بالنسبة له انتهت الجملة if ولا تتبع لها شيء , لذلك جملة الطباعة التي تليها تعتبر خارج if وليس داخلها , ايضا نقطة اخرى احب ان انو لها


ما الفرق بين




void main()
{
int age;
cout<<"Please input your age: ";
cin>> age;
if ( age < 100 )
cout<<"You are pretty young!\n";
cout<<"Thank you!\n";
}


و




void main()
{
int age;
cout<<"Please input your age: ";
cin>> age;
if ( age < 100 ) {
cout<<"You are pretty young!\n";
cout<<"Thank you!\n";
}
}
الفرق انه في الحالة الاولى الذي يتبع جملة if اذا تحققت هو فقط

cout<<"You are pretty young!\n";



ولذلك لو تحقق الشرط سيكون الناتج هو



You are pretty young!
Thank you!
اما اذا لم يتحقق فسيطبع

Thank you!



في الكود الثاني اذا تحقق الشرط سيطبع فقط


You are pretty young!
Thank you!

اما اذا لم يتحقق لن يطبع شيء , والسبب هو انه اذا لم تكن موجودة اشاة البلوك فسيعتبر الجملة التالية فقط هي التي تتبع لجملة if يعني بعبارة اوضح يتوقف تأثير if عند اول فاصلة منقوطة (مبدئيا نقول هذا), في حال وجود اشارات البلوك { و } وتتبع لجملة if فكل ما داخل البلوك يعتبر تابع لجملة if وهكذا نعرف فائدة البلوك بشكل اكثر ... وهو شيء مهم وضروري معرفته خصوصا على من تعود على لغة الفيجوال بيسك او البيسك اذا ان هذه اللغات تعتمد على ان كل ما يتبع جملة if هو تابع لها الا اذا وجد end if , هنا الذي يحدد هو البلوك , او اول فاصلة منقوطة بعد جملة if .....

لنقل بعبارة اخرى لو كنا نريد فقط تنفيذ جملة واحدة بعد if فيكننا الاستغناء عن البلوك ولا نحتاج لـ { و } لذلك , اما اذا اكثر من جملة وجب عليك ذلك ويجب تضمين العبارات المراد تطبيقها في بلوك ....

............

الى هنا نكون قد انتهينا من شرح اساسيات جملة if لكن هنالك عدة طرق لكتابتها , ونحن هنا كتبناها بابسط صورة , طرق كتابة جملة if كالتالي:




جملة if مفردة : كالتي تعلمناها وضيغته العامة مرة آخرى هي :

ملاحظة النقاط التي اضعها في الصيغة العامة كتوضيح هي بمعنى (وهكذا او الخ )



if (condition )
{
statement1;
statement2;
statement3;
.
.
.
}


جملة if / else :

هذه الجملة تختلف عن السابقة بإختلاف بسيط وهي انه اذا لم يتحقق شرط فهنالك بديل أي اذا لم يتحقق الشرط فقم بعكسه , يعني لاحظنا في المثال السابق اننا ندخل العمر فإذا تحقق الشرط يطبع له انك ما زلت شابا اذا لم يتحقق لا يفعل شيء , حسنا نريد ان نضيف شيئا وهو ببساطة اذا لم يتحقق الشرط يطبع له انه كبير في السن , فهذا يتحقق عن طريق else التي تتبع if والصيغة العامة لـ if /else :



if (condition )
{
statement1;
statement2;
statement3;
.
.
.
}
else
{

other statement1;
other statement2;
other statement3;
.
.
.
}


مثال على ذلك :



void main()
{
int age;
cout<<"Please input your age: ";
cin>> age;
if ( age < 100 ) {
cout<<"You are pretty young!\n";
}
else {
cout<<"You are old\n";
}

}


لكي نعرف ماذا تعني else لاحظوا كيف يمكن كتابة المثال السابق بدون استخدام else كما يلي :




void main()
{
int age;
cout<<"Please input your age: ";
cin>> age;
if ( age < 100 ) {
cout<<"You are pretty young!\n";
}
if ( age >= 100 ) {
cout<<"You are old\n";
}

}لكن بهذا الشكل بدون استخدام else سيكون عبئ اضافي على الجهاز في عملية المعالجة , المثال بإستخدام else فإنه اذا تحقق الشرط من البداية لا ينفذ عمليات المقارنة الا في البداية واذا لم يتحقق الشرط مباشرة ينتقل لجملة else اما في المثال آخر فانه يقوم بالمقارنة مرتين بدلا من مرة , بلغتنا , تخيل لو طلب منك شخص ان تعد عدد التفاحات الموجودة في صندوق , فبعد ان يقول لك التعليمات ستذهب لتعد التفاحات , لكن لو فرضنا ان التعليمات كانت , لو وجدت 50 تفاحة او اقل فإن سعر الصندوق يساوي 10 , غير هذا سيكون 15 ,,, هذا يمثل جملة else /if ... حسنا لو قال لك اذا كان عدد التفاحات بالصندوق اقل من او يساوي 50 سيكون السعر 10 , ثم انتهيت فسترجع له وتقول مثلا ان عدد الامر صحيح ان عدد التفاحات اقل او يساوي 50 , ومن ثم يرسلك لنفس الصنودق ويقول لك اذا كان عدد التفاحات اكبر من 50 سيكون السعر 15 , بذلك سوف تضطر لعد التفاحات مرة اخرى ,,,,, اذن استخدام "غير ذلك" او بالانجليزي else يسهل علينا الامر .....

لو اردنا ترجمة هذا المثال بصيغة if / else وفرضنا ان عدد التفاحات هو i و السعر غير معروف وسيخزن بالمتغير price سيكون بالشكل التالي :



void main()
{
int i = 50;
int price;
if ( i <= 50 ) {
price = 10;
}
else{
price = 10;
}

}
اذن بالشكل هذا لن يذهب البرنامج للذاكرة الا مرة واحدة لقراءة قيمة i وليس مرتين للمقارنة كما في حال عدم استخدام else .....

جملة if /else if :

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



if (condition1 )
{
statement1;
statement2;
statement3;
.
.
.
}

else if (condition2 )
{
other statement1;
other statement2;
other statement3;
.
.
.
}
else if (condition3 )
{
other statement1;
other statement2;
other statement3;
.
.
.
}
.
.
.
else
{
other statement n;
other statement n;
other statement n;
.
.
.
}

حسب هذه الصيغة بإمكاننا تطبيق اي نوع من انواع if او if/else بكل وحدة , لفهم هذا في المثال التالي:




void main()
{
int mark;
cin>>mark;

if ( mark < 50 )
cout<<"FAIL"<<endl;

else if ( mark < 60 )
cout<<"BAD"<<endl;

else if ( mark < 70 )
cout<<"NOT BAD"<<endl;

else if ( mark < 80 )
cout<<"GOOD"<<endl;

else if ( mark < 90 )
cout<<"VERY GOOD"<<endl;

else {
cout<<"EXCELLENT"<<endl;
cout<<"YOU WIN TOO"<<endl;
}
cout<<"thank you"<<endl;
}





ذكرنا انه اذا كنا نريد تطبيق جملة واحدة فقط عند تحقق الشرط فإننا نستطيع الاستغناء عن { و } هنا نفس الشيء بالنسبة لـ else , كما تلاحظون في هذا المثال ....


* سؤال : لو ادخلنا في المرة الاولى الرقم 40 المرة الثانية 50 المرة الثالثة 80 المرة الرابعة 100 , فماذا سيطبع في كل حالة ......



جملة if المتداخلة Nested if statement :

هي صيغة اخرى من جمل if التي تتبع بعضها لكن لا تطبق الجملة الثانية الا اذا تحقق الشرط الاول , هذه الصيغة لحد كبير متشابهة للطريقة اعلاه , لكن هنالك اختلاف بالطبع وهو بإمكاننا الاستغماء عن else وهي عبارة عن تكرار للصيغة المبسطة الاولة لكن كما قلنا انه لا يتحقق الشرط الثاني الا اذا تحقق الذي قبله وفي حال عدم تحقق الشرط الاول لا ينفذ الشرط التالي,,,,الصيغة العامة :


if (condition1 )
{
statement1;
statement2;
statement3;
.
.
.


if (condition2 )
{
other statement1;
other statement2;
other statement3;
.
.
.
}
.
.
.
.

}




مثال , لو اردنا ان نعد التفاحات في صندوق ما , ثم نقارن , اذا كان عدد التفاحات اكبر من 50 نعود ونقسم التفاحات على 2 ومن ثم نقارن اذا كان الناتج اكبر من 40 فالسعر سيكون 20 غير ذلك سيكون 15 , اما اذا اقل من 50 فالسعر يساوي 10 ,, لنترجم هذا المثال لكود سي بلس بلس سويا :

يفضل محاولة كتابة الكود قبل رؤية الحل ادناه





int i ;
cin>> i ;
int price;

if (i > 50 )
{
int temp = i / 2;
if (temp > 40 )
price = 20;
else
price = 15;
}
else
price = 10;


هل كان المثال مفهوم , اذا لم يكن انا مستعد للإجابة ان شاء الله ...




تعلم مهارة : في مثالنا هذا قمنا بتعريف المتغير temp لنخزن فيه قيمة ناتج قسمة i على 2 وقد استخدمنا المتغير لمرة واحدة و بإمكاننا الاستغناء عن هذا المتغير نهائيا , وكتابة معادلة في جملة الشرط كما في المثال التالي بعد التعديل على السابق :



int i ;
cin>> i ;
int price;

if (i > 50 )
{
if ((i / 2)> 40 )
price = 20;
else
price = 15;
}
else
price = 10;



فسوف يقوم هنا بحل المعادلة ثم مقارنة نتيجتها بالرقم الذي امامه ....
والفائدة هنا اننا نتخلص من متغير يقوم بحجز مساحة على الذاكرة , وهذه المساحة صحيح انها في هذا المثال 4 بايت فقط لكن اذا كان البرنامج كبير وكان بإمكاننا بهذه الطريقة اختصار تعريف 10000 متغير فإنننا نوفر بذلك حوالي 40000 بايت اي 40 كيلوبايت , ولو كان الرقم اكبر لكان ذلك اكبر ,

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

نصائح لزيادة فعالية برامجكم ومن اجل اداء افضل ....




الجملة switch :


ثانيا : الجمل التكرارية (الدورانات) وانواعها Repetition Statements :

تعمدت عدم اكمال ادرس نظرا لزخمه , لذلك سنتابع في الدرس القادم


تطبيق اليوم :
1. ارجو اولا الاجابة عن السؤال المذكور اعلاه

2. اكتب برنامج يقوم بقراءة علامة طالب , اذا كانت علامة الطالب اكبر من 100 او اقل من 0 يظهر له رسالة خطأ "اي يطبع له انه ادخل رقم خطأ" , غير ذلك ,:
أ. اذا كانت العلامة اقل من 60 فهو راسب .
ب. اذا كانت علامته من 60 - 70 يطبع له انت ناجح
ج. اذا كانت بين 70 و 80 يطبع له ابليت حسنا , انت ناجح
د. اذا كان بين 80 و 90 يطبع له جيد جدا , انت ناجح
هـ . اذا كانت اكبر من 90 يطبع له , ممتاز , انت ناجح بتفوق

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

أ. "Sorry, You Fail"
ب. "You Pass"
ج. "Good , You pass"
د. "Very Good , you pass"
هـ. "Perfect , you superiority pass"

3. ما ناتج الكود التالي , جرب رجاءا بدون استخدام البرنامج , رجاء حار ...


int x = 6;
if (x < 5)
if (x > 5)
cout<<"True"<<endl;
else cout<<"False"<<endl;

if (x * 2 > 10);
cout<<"True"<<endl;
if (x * 2 < 10);
cout<<"False"<<endl;



وأتمنى لكم التوفيق
:M22:

اخوكم المحب لكم في الله
المظفر بالله


رابط الدرس السابق (الثالث) بدء العمل على البرنامج : http://www.geek4arab.com/vb/showthread.php?t=2981

samerhalaby
17-06-2008, 08:06 AM
جزاك الله كل خير ووفقك الله :good:

taha moh
17-06-2008, 11:41 AM
مشكور حبيبي وجزاك الله الف خير

achill2005
17-06-2008, 11:40 PM
السلام عليكم ورحمة الله وبركاته
شكرا أستاذي على الدرس السهل إلى حد الآن :
void main()
{
int mark;
cin>>mark;

if ( mark < 50 )
cout<<"FAIL"<<endl;

else if ( mark < 60 )
cout<<"BAD"<<endl;

else if ( mark < 70 )
cout<<"NOT BAD"<<endl;

else if ( mark < 80 )
cout<<"GOOD"<<endl;

else if ( mark < 90 )
cout<<"VERY GOOD"<<endl;

else {
cout<<"EXCELLENT"<<endl;
cout<<"YOU WIN TOO"<<endl;
}
cout<<"thank you"<<endl;
}



ذكرنا انه اذا كنا نريد تطبيق جملة واحدة فقط عند تحقق الشرط فإننا نستطيع الاستغناء عن { و } هنا نفس الشيء بالنسبة لـ else , كما تلاحظون في هذا المثال ....


* سؤال : لو ادخلنا في المرة الاولى الرقم 40 المرة الثانية 50 المرة الثالثة 80 المرة الرابعة 100 , فماذا سيطبع في كل حالة ......

إجابة :
الرقم40 سيطبع FAIL thank you
الرقم 50 سيطبع thank you BAD
الرقم 80 سيطبع Very good thank you
الرقم 100 سيطبع excellent you win too thank you
طيب لي سؤال , لماذا وضعت مرةتين endl
لماذا لم تكتب مثلا cout<<"Excellent"; f
cout<<"you win too"<<endl;

achill2005
18-06-2008, 12:05 AM
تطبيق اليوم :
1. ارجو اولا الاجابة عن السؤال المذكور اعلاه

2. اكتب برنامج يقوم بقراءة علامة طالب , اذا كانت علامة الطالب اكبر من 100 او اقل من 0 يظهر له رسالة خطأ "اي يطبع له انه ادخل رقم خطأ" , غير ذلك ,:
أ. اذا كانت العلامة اقل من 60 فهو راسب .
ب. اذا كانت علامته من 60 - 70 يطبع له انت ناجح
ج. اذا كانت بين 70 و 80 يطبع له ابليت حسنا , انت ناجح
د. اذا كان بين 80 و 90 يطبع له جيد جدا , انت ناجح
هـ . اذا كانت اكبر من 90 يطبع له , ممتاز , انت ناجح بتفوق

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

أ. "Sorry, You Fail"
ب. "You Pass"
ج. "Good , You pass"
د. "Very Good , you pass"
هـ. "Perfect , you superiority pass"

الإجابة سأكتبها مباشرة في الرد بدون برنامج التزاما بطلبك و لك أن تصحح لي أخطائي:


#include<iostream>;
void main()
{
byte note;
cout<<"veuillez inserez votre note\r"<<endl;
cin>>note;// إدخال المتغير note
if (note>100 || note<0)//condition pour accepter la note
{
if(note<60)
cout<<"Sorry, You Fail"<<endl;//si la note inferieur a 60 l'etudiante n'est pas admis
else if(note <70)
cout<<"You Pass"<<endl;//si le note est superieure a 60 et inferieure a 70 il passe
else if(note<80)
cout<<"Good , You pass"<<endl;/*si la note est superieure a 70 et
inferieure a80 il affiche
la phrase good you pass*/
else if(note<90)
cout<<"Very Good , you pass"<<endl;
else if(note>90)
cout<<"Perfect , you superiority pass"<<endl;//la fin du bloc if
}
else cout<<"vous avez inserez une note non valide"<<endl;//afficher une phrase d'erreur
}
هذا كان التمرين الثاني

achill2005
18-06-2008, 12:12 AM
. ما ناتج الكود التالي , جرب رجاءا بدون استخدام البرنامج , رجاء حار ...

الكود سيطبع

True
True
اي يطبعها مرتين

كود:
int x = 6;
if (x < 5)
if (x > 5)
cout<<"True"<<endl;
else cout<<"False"<<endl;

if (x * 2 > 10);
cout<<"True"<<endl;
if (x * 2 < 10);
cout<<"False"<<endl;

achill2005
18-06-2008, 12:16 AM
السلام عليكم ورحمة الله وبركاته
وين بقية الطلبة؟؟؟؟
طيب لي سؤال : عند المقارنة هل يمكن وضع مسافات بين القيم مثال
7>x
أم 7 > x
و عند كتابة يساوي أيضا = نترك فراغ أم لا نكتبها متلاصقة؟؟:thinking:

المظفر بالله
18-06-2008, 02:21 AM
السلام عليكم ورحمة الله وبركاته
شكرا أستاذي على الدرس السهل إلى حد الآن :
void main()
{
int mark;
cin>>mark;

if ( mark < 50 )
cout<<"FAIL"<<endl;

else if ( mark < 60 )
cout<<"BAD"<<endl;

else if ( mark < 70 )
cout<<"NOT BAD"<<endl;

else if ( mark < 80 )
cout<<"GOOD"<<endl;

else if ( mark < 90 )
cout<<"VERY GOOD"<<endl;

else {
cout<<"EXCELLENT"<<endl;
cout<<"YOU WIN TOO"<<endl;
}
cout<<"thank you"<<endl;
}



ذكرنا انه اذا كنا نريد تطبيق جملة واحدة فقط عند تحقق الشرط فإننا نستطيع الاستغناء عن { و } هنا نفس الشيء بالنسبة لـ else , كما تلاحظون في هذا المثال ....


* سؤال : لو ادخلنا في المرة الاولى الرقم 40 المرة الثانية 50 المرة الثالثة 80 المرة الرابعة 100 , فماذا سيطبع في كل حالة ......

إجابة :
الرقم40 سيطبع FAIL thank you
الرقم 50 سيطبع thank you BAD
الرقم 80 سيطبع Very good thank you
الرقم 100 سيطبع excellent you win too thank you
طيب لي سؤال , لماذا وضعت مرةتين endl
لماذا لم تكتب مثلا cout<<"Excellent"; f
cout<<"you win too"<<endl;



بالنسبة لحلك فيه خطأ بسيط وهو
ان endl حقيقة تقوم محل "\n" اي انها تقوم بالنزول سطر جديد , وتعني endl اي end line اي ان السطر انتهى وابدأ سطر جديد

راجع الحل مرة اخرى
وارجو ان تضع الكود بين اداة الكود وهي بعد ان تظلل النص اضغط الزر --> http://www.geek4arab.com/vb/imgcache/8509.imgcache

المظفر بالله
18-06-2008, 02:36 AM
تطبيق اليوم :
1. ارجو اولا الاجابة عن السؤال المذكور اعلاه

2. اكتب برنامج يقوم بقراءة علامة طالب , اذا كانت علامة الطالب اكبر من 100 او اقل من 0 يظهر له رسالة خطأ "اي يطبع له انه ادخل رقم خطأ" , غير ذلك ,:
أ. اذا كانت العلامة اقل من 60 فهو راسب .
ب. اذا كانت علامته من 60 - 70 يطبع له انت ناجح
ج. اذا كانت بين 70 و 80 يطبع له ابليت حسنا , انت ناجح
د. اذا كان بين 80 و 90 يطبع له جيد جدا , انت ناجح
هـ . اذا كانت اكبر من 90 يطبع له , ممتاز , انت ناجح بتفوق

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

أ. "Sorry, You Fail"
ب. "You Pass"
ج. "Good , You pass"
د. "Very Good , you pass"
هـ. "Perfect , you superiority pass"

الإجابة سأكتبها مباشرة في الرد بدون برنامج التزاما بطلبك و لك أن تصحح لي أخطائي:


#include<iostream>;
void main()
{
byte note;
cout<<"veuillez inserez votre note\r"<<endl;
cin>>note;// إدخال المتغير note
if (note>100 || note<0)//condition pour accepter la note
{
if(note<60)
cout<<"Sorry, You Fail"<<endl;//si la note inferieur a 60 l'etudiante n'est pas admis
else if(note <70)
cout<<"You Pass"<<endl;//si le note est superieure a 60 et inferieure a 70 il passe
else if(note<80)
cout<<"Good , You pass"<<endl;/*si la note est superieure a 70 et
inferieure a80 il affiche
la phrase good you pass*/
else if(note<90)
cout<<"Very Good , you pass"<<endl;
else if(note>90)
cout<<"Perfect , you superiority pass"<<endl;//la fin du bloc if
}
else cout<<"vous avez inserez une note non valide"<<endl;//afficher une phrase d'erreur
}
هذا كان التمرين الثاني




محاولتك كانت جيدة لكن هنالك كان اخطاء

1. وضعت فاصلة منقوطة امام اسم المكتبة , لكن من المفترض ان لا توضع بعد استدعاء المكتبة ...
وكان اسم المكتبة صحيح لكن يجب عليك القيام بخطوة ما ااذا عرفتها بهذا الشكل ,
انت نسيت
.h اذا ازلتها اكتب تحت المكتبة

using namespace std; اما اذا وضعت الامتداد .h فلا داعي لهذه الجملة والسبب ان المكتبات الحديثة لا تحتوي .h وتستخدم ما يسمى بالـ namespace وانت هنا تعرف في بداية البرنامج ضمنيا ان يضع قبل cout و cin و endl العبارة std::cout مثلا ....
لن نتطرق له حاليا وقد يبدو الغاز , لكن انتبه لاسم المكتبة
2. عرفت متغير من النوع byte ,,, لكن هذا المتغير ليس معرف بالمكتبة المعروفة لدينا هنا لذلك هي خطأ استبدلها بـ char او int او short وهنا افضل حل ان نختار الاقصر لان اكبر رقم 100

3. لقد عكست اشارات المقارنة في (note>100 || note<0) هنا انت تقول له اذا كانت العلامة اكبر من 100 او اقل من 0 , وبذلك سوف يدخل الجمل التالية بشكل خاطئ اذا كان الرقم اكبر من 100 , واذا كان 50 مثلا سيقول له خطأ في ادخال اعلامة غير صالحة الخ

نحن نريد ان تكون العلامة اما ان تساوي 0 او اكبر و تساوي 100 او اقل

حاول مرة اخرى , وإن شاء الله ستفلح وتنجح
الحل جاهز لدي , وايضا ملاحظة و اذا قفز مؤشر الادخال الى الامام اتركه لا ترجعه , وذلك لترتيب الحل وسهولة قراءة الكود ....


بارك الله فيك اخي :goood: :goood: :goood:

المظفر بالله
18-06-2008, 02:50 AM
السلام عليكم ورحمة الله وبركاته
وين بقية الطلبة؟؟؟؟
طيب لي سؤال : عند المقارنة هل يمكن وضع مسافات بين القيم مثال
7>x
أم 7 > x
و عند كتابة يساوي أيضا = نترك فراغ أم لا نكتبها متلاصقة؟؟:thinking:
بالنسبة لوجود مشافة بين الاشارة و الرقم او المتغير فعادة ولا بأس لكن وجود المسافة بين اشاررتي المشاواة == و عدم المساواة != و اشارة اكبر من او يساوي >= واشارة اقل من او يساوي <= فهذا غير مسموح اما بين الاشارة والرقم فلا بأس
مثلا

x == 9;

achill2005
18-06-2008, 04:26 PM
تشكر على الإصلاح
و بالنسبة لهذا التمرين فقد أصلحت المكتبة و الشرط لقبول الأعداد
فأرجو إصلاح ما سهوت عنه من ـأخطاء
على أنه بالنسبة للتمرين الفارط فـendl لم أكن أعرف انها تعني الرجوع للسطر و بارك الله فيك أستاذي على المعلومة الجديدة

#include<iostream.h>
void main()
{
short note;
cout<<"veuillez inserez votre note\r"<<endl;
cin>>note;// إدخال المتغير note
if (note<100 && note>= 0)//condition pour accepter la note
{
if(note<60)
cout<<"Sorry, You Fail"<<endl;//si la note inferieur a 60 l'etudiante n'est pas admis
else if(note <70)
cout<<"You Pass"<<endl;//si le note est superieure a 60 et inferieure a 70 il passe
else if(note<80)
cout<<"Good , You pass"<<endl;/*si la note est superieure a 70 et
inferieure a80 il affiche
la phrase good you pass*/
else if(note<90)
cout<<"Very Good , you pass"<<endl;
else if(note>90)
cout<<"Perfect , you superiority pass"<<endl;//la fin du bloc if
}
else cout<<"vous avez inserez une note non valide"<<endl;//afficher une phrase d'erreur
}

المظفر بالله
18-06-2008, 07:11 PM
تشكر على الإصلاح
و بالنسبة لهذا التمرين فقد أصلحت المكتبة و الشرط لقبول الأعداد
فأرجو إصلاح ما سهوت عنه من ـأخطاء
على أنه بالنسبة للتمرين الفارط فـendl لم أكن أعرف انها تعني الرجوع للسطر و بارك الله فيك أستاذي على المعلومة الجديدة

#include<iostream.h>
void main()
{
short note;
cout<<"veuillez inserez votre note\r"<<endl;
cin>>note;// إدخال المتغير note
if (note<100 && note>= 0)//condition pour accepter la note
{
if(note<60)
cout<<"Sorry, You Fail"<<endl;//si la note inferieur a 60 l'etudiante n'est pas admis
else if(note <70)
cout<<"You Pass"<<endl;//si le note est superieure a 60 et inferieure a 70 il passe
else if(note<80)
cout<<"Good , You pass"<<endl;/*si la note est superieure a 70 et
inferieure a80 il affiche
la phrase good you pass*/
else if(note<90)
cout<<"Very Good , you pass"<<endl;
else if(note>90)
cout<<"Perfect , you superiority pass"<<endl;//la fin du bloc if
}
else cout<<"vous avez inserez une note non valide"<<endl;//afficher une phrase d'erreur
}
في برنامج اذا ادخلت 90 او 100 , من المفروض ان تقبل , لكن جرب وشوف شو يصير :ops:

achill2005
19-06-2008, 01:10 AM
السلام عليكم ورحمة الله وبركاته
نظريا إذا أدخلت 90 فلا بد أن يحقق الشرط الذي هو يكون أكبر أو يساوي صفر مع يكون أصغر من مائة. يعني لا زم يمر من السرط الأول
في داخل الشرط الأول هناك شروط لا تتحقق إلا بتحققه لأنها داخل نفس البلوك
فيحالة 90 نسيت علامة يساوي
في حالة 10 و في الشرط الأول اشترطت أن تكون العدد أصغر تماما من 100 و كنت قاصد أنه لا يمكن لنمعدّل أن يكون 100. لذلك سأزيد علامة يساوي لحالة أكبر من تسعين و أزيدها لحالة 100 مع أنني أعلم أنه من المستحيل عمليا الحصول على 100 نقطة خصوصا و أن هناك مواد أدبية فلا يمكن الحصول فيها على النقاط كاملة.

achill2005
19-06-2008, 01:12 AM
#include<iostream.h>
void main()
{
short note;
cout<<"veuillez inserez votre note\r"<<endl;
cin>>note;// إدخال المتغير note
if (note<=100 && note>= 0)//condition pour accepter la note
{
if(note<60)
cout<<"Sorry, You Fail"<<endl;//si la note inferieur a 60 l'etudiante n'est pas admis
else if(note <70)
cout<<"You Pass"<<endl;//si le note est superieure a 60 et inferieure a 70 il passe
else if(note<80)
cout<<"Good , You pass"<<endl;/*si la note est superieure a 70 et
inferieure a80 il affiche
la phrase good you pass*/
else if(note<90)
cout<<"Very Good , you pass"<<endl;
else if(note>=90)
cout<<"Perfect , you superiority pass"<<endl;//la fin du bloc if
}
else cout<<"vous avez inserez une note non valide"<<endl;//afficher une phrase d'erreur
}

المظفر بالله
19-06-2008, 01:38 AM
الآن نقدر نقول
وضعك تمام :good: :good: :good:

:haha:

achill2005
19-06-2008, 10:21 PM
السلام عليكم ورحمة الله وبركاته
طيب أستاذ
أنا بانتظار الدرس التالي
و لا تقل لي انك بانتظار البقية. يكفي أنه عندك تلميذ مجتهد على الأقل :haha:

المظفر بالله
20-06-2008, 12:42 AM
ونعم التلميذ :good:, الحقيقة سيتأخر الدرس الخامس لسبب انني طرحت درسين
وكل درس 3 ايام
اذن الدرسين 6 ايام

شعوله
23-06-2008, 04:21 AM
·سؤال : لو ادخلنا في المرة الاولى الرقم 40المرة الثانية 50 المرة الثالثة 80 المرة الرابعة 100 , فماذا سيطبع في كل حالة ......


If we entered 40, the output is:

FAIL

thank you

If we entered 50, the output is:

BAD

thank you

If we entered 80, the output is:

VERY COOD

thank you

If we entered 100, the output is:

EXCELLENT

YOU WIN TOO

thank you


************************************************** *


2. اكتب برنامج يقوم بقراءة علامة طالب , اذا كانت علامة الطالب اكبرمن 100 او اقل من 0 يظهر له رسالة خطأ "اي يطبع له انه ادخل رقم خطأ" , غير ذلك ,:
أ. اذا كانت العلامة اقل من 60 فهو راسب .
ب. اذا كانت علامته من 60 - 70يطبع له انت ناجح
ج. اذا كانت بين 70 و 80 يطبع له ابليت حسنا , انت ناجح
د. اذا كان بين 80 و 90 يطبع له جيد جدا , انت ناجح
هـ . اذا كانت اكبر من 90 يطبعله , ممتاز , انت ناجح بتفوق

للأمانة ما طبقت الكود على برنامج الـ visual


http://www.geek4arab.com/vb/imgcache/8559.imgcache


*************************************************
3. ما ناتج الكود التالي , جرب رجاءا بدون استخدام البرنامج , رجاء حار ...


كود:


int x = 6;

if (x < 5)

if (x > 5)

cout<<"True"<<endl;

else cout<<"False"<<endl;

if (x * 2 > 10);

cout<<"True"<<endl;

if (x * 2 < 10);

cout<<"False"<<endl;



The output is :

True

المظفر بالله
23-06-2008, 05:52 AM
الله يعطيك العافية اخت شعولة , بس فيه ملاحظة بالنسبة للسؤال الثاني واجابته
1. لو دخلنا 100 ايش رح يعمل :ops:

2. انتي ادرجتي بالجملة الشرطية الاولى اذا كان اقل من 0 او اعلى من 100 يطبع عبارات انه خطأ ثم ادخل العلامة , للعلم لو ادخلت العلامة ما اظن انه رح يرجع عليها الشرط , يعني رح يطلب العلامة وبعد ما تدخليها رح يخرج من البرنامج , يعني خلاص يكن انتهى تنفيذه وما رح يطبع اشي , وجربي ذلك , و يا رايت اختي لو تقدري ترفقي الكود في المشاركة او ترسليه على الخاص , لاني الصحيح في العادة اكون مستعجل واتعاجز اكتب الكود من اول , فاعمل كوبي , بيست :M19:

شعوله
23-06-2008, 03:38 PM
الله يعطيك العافية اخت شعولة , بس فيه ملاحظة بالنسبة للسؤال الثاني واجابته
1. لو دخلنا 100 ايش رح يعمل :ops:

2. انتي ادرجتي بالجملة الشرطية الاولى اذا كان اقل من 0 او اعلى من 100 يطبع عبارات انه خطأ ثم ادخل العلامة , للعلم لو ادخلت العلامة ما اظن انه رح يرجع عليها الشرط , يعني رح يطلب العلامة وبعد ما تدخليها رح يخرج من البرنامج , يعني خلاص يكن انتهى تنفيذه وما رح يطبع اشي , وجربي ذلك , و يا رايت اختي لو تقدري ترفقي الكود في المشاركة او ترسليه على الخاص , لاني الصحيح في العادة اكون مستعجل واتعاجز اكتب الكود من اول , فاعمل كوبي , بيست :M19:

سوووورى ما أنتبهت للحل إلا بعدين صححت الحل ووضعته فى الملفات المرفقه

http://www.geek4arab.com/vb/imgcache/8640.imgcache

achill2005
30-06-2008, 12:34 PM
السلام عليكم ورحمة الله وبركاته
أخي و الله قرّبت أنسى كل الدروس..يعني كثير مدة درس كل أربع أيام. لو درس كل يومين على الأكثر منطقي خصوصا و أننا مازلنا في الأبجديات

المظفر بالله
30-06-2008, 02:02 PM
والله معك حق اخي المفروض اليوم نكون في الدرس السادس , لكن لي عودة .....
اتمنى عليكم الصبر

achill2005
30-06-2008, 07:17 PM
السلام عليكم ورحمة الله وبركاته
اخي المظفّر
إن شاء الله تتمكن من وضع الدروس قريبا..و الحقيقة ماهي حكاية استعجال و لكن كما سبق و قلت أحس و بصراحو أنني بدات أنسى ما تعلمته..المهم نحن بانتظارك و يا رب خير

المظفر بالله
30-06-2008, 07:19 PM
اخي لا احد ينسى ما داوم عليه
معقول مخزن افكارك صغير :ops:

achill2005
03-07-2008, 07:58 PM
للأسف مخزن افكاري صغير... و نحن ما تعلمنا الشيء الكثير كي نداوم عليه.... و بصراحة من يوم ما قريت الدرس الرابع ما عملت و لا نظرة على اللي سبقه....
على كل أنا في الإنتظار و يارب الأعضاء الآخرين يكونوا معنا على الخط و لا يتأخروا

http://file7azm.info/do.php?img=807