• 0
العاقب

سؤال عن Select Range

سؤال

إخواني الأعزاء،السلام عليكم ورحمة الله وبركاته

أنا بدأت تعلم الC++ قبل يوم واحد

ووصلت لدرس Switch Statement

ولكن واجهتني مشكلة وهي أن الcase تحتوي على قيمة واحدة

يعني مثلاً إذا أردت أن أعمل برنامج لتقييم درجات الطلاب(ممتاز،جيد،مقبول،رسوب)

فإني سأضطر لكتابتها بهذا الشكل



int i;
switch (i)
{
case 1:
cout<<"رسوب";
break;
case 2:
cout<<"رسوب";
break;
case 3:
cout<<"رسوب";
break;
case 4:
cout<<"رسوب";
break;
case 5:
cout<<"رسوب";
break;
.......
case 50:
cout<<"مقبول";
break;
case 51:
cout<<"مقبول";
break;
case 52:
cout<<"مقبول";
break;
case 53:
cout<<"مقبول";
break;
....

هل من المعقول أن يكون الكود بهذه الطريقة :wacko:

اذكر أني كنت أكتب مثل هذه الجملة بالفيجوال بيسك بهذا الشكل :lol:


Select Case Mark
Case 85 to 100
Msgbox "ممتاز"
Case 70 to 85
Msgbox "جيد جداً"
Case 60 to 50
Msgbox "جيد"
Case Is <50
Msgbox "رسوب"
.....
Case Else
......
End Select

عارف إني طولت عليكم بس سامحوني وأتمنى إني أكون وصلت السؤال بصورة جيدة

وجزاكم الله كل خير

تم تعديل بواسطه العاقب
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

14 إجابة على هذا السؤال .

  • 0

أنا بدأت تعلم الC++ قبل يوم واحد

قرار سليم

ووصلت لدرس Switch Statement

هل مررت بـ if ... else if ؟

القرار الأنسب هو استخدام if ... else if في هذه الأحوال


#include<iostream>
using namespace std;

int main()
{
int x;
cout<<"Enter a mark : ";
cin>>x;

if(x>=84)
cout<<"Excellent\n";
else if(x>=76)
cout<<"Very Good\n";
else if(x>=68)
cout<<"Good\n";
else if(x>=50)
cout<<"Accepted\n";
else cout<<"Fail\n";

return 0;
}

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

هل مررت بـ if ... else if ؟

القرار الأنسب هو استخدام if ... else if في هذه الأحوال

جزاك الله كل خير أخي

ولكن أنا أريد أن أحصرها

فمثلاً لو أدخل المستخدم قيمة أكثر من 100

أو لو لاحظت في كودك فإن القيمة 76 تحقق الشرط

if(x>=76)

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

if(x>=68)

وكذلك الشرط

if(x>=50)

أتمنى إنك فهمتني أخي،وجزيت خيراً

تم تعديل بواسطه العاقب
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

لاحظ يا أخي أن كلامك صحيح في الحالة التالية :


#include<iostream>
using namespace std;

int main()
{
int x;
cout<<"Enter a mark : ";
cin>>x;

if(x>=84)
cout<<"Excellent\n";
if(x>=76)
cout<<"Very Good\n";
if(x>=68)
cout<<"Good\n";
if(x>=50)
cout<<"Accepted\n";
cout<<"Fail\n";

return 0;
}

لكن مع وجود else فإن الحال ستختلف ، سأكتب لك الكود بطريقة أخرى ، علماً بأنه سيؤدي نفس غرض الكود في الرد السابق :


#include<iostream>
using namespace std;

int main()
{
int x;
cout<<"Enter a mark : ";
cin>>x;

if(x>=84)
cout<<"Excellent\n";
else
{
if(x>=76)
cout<<"Very Good\n";
else
{
if(x>=68)
cout<<"Good\n";
else
{
if(x>=50)
cout<<"Accepted\n";
else
{
cout<<"Fail\n";
}
}
}
}

return 0;
}

لاحظ أنه إذا أدخلت قيمة 90 مثلاً ، سيطبع Excellent ويذهب غلى return 0 مباشرة ، لن يدخل إلى الكود التابع لـ else لأن الشرط تحقق

الميزة في استخدام if ... else if أنه يخرج من السلسلة مباشرة فور تحقق أول شرط .

أرفقت لك الكود المناسب ، قم بتشغيله وتأكد من النتائج بنفسك ..

Marks.rar

1

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

جزاك الله كل خير أخي فقد فهمت الآن

ولكن هل يعني هذا أن الrange غير موجود في الswitch????كما هو الحال في البيسك؟؟؟

والشئ الثاني أخي ماهي return هذي (معليش بس استحملني شوية)

لأني عندما حذفتها عمل البرنامج بشكل عادي

ويبدو ان الcompiler مختلف عندنا

تم تعديل بواسطه العاقب
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

نعم غير موجود

والكلام من موقع cplusplus.com

Notice that switch can only be used to compare an expression against constants. Therefore we cannot put variables as labels (for example case n: where n is a variable) or ranges (case (1..3)) because they are not valid C++ constants.

If you need to check ranges or values that are not constants, use a concatenation of if and else if statements.

يعتبر أن أي شيء بعد case ينبغي أن يكون constant وليس متغيراً أو مدى range من القيم ..

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

شرح جميل أخ namespace و ينم عن فهم لـ else if :)

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

الـ compiler ليس مختلفاً ولا شيء من هذا

هناك معايير قياسية ينبغي على المبرمج المحترف عدم مخالفتها ، هذه المعايير ANSI/ISO C تخبرك أن الطريقة السليمة في تعريف الاقتران الرئيسي main هي :


int main(void)

ويرجع القيمة 0 إذا تم إنهاؤه بنجاح successful termination ، والقيمة 1 إذا حصل فشل عند حصول فشل في إنهائه unsuccessful termination

بالنسبة للمعايير standards التي كلمتك عنها الأمر ليس ذا أهمية ، أرجعت قيمة أم لا

لكن الأمر ليس بذلك العناء لذا أرجع القيمة 0

ولا تستخدم void main فالأمر مرفوض من قبل ANSI/ISO C

الأمر يحتاج للمناقشة - قد يظن البعض أن الأمرين سواء void main = int main

لا تشغل فكرك بالأمر حالياً

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

مثلاً أخي أنت ستخدم جملة using namespace std;

في حين أن الcompiler يعطيني رسالة خطأ في حال كتبتها

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

مثلاً أخي أنت ستخدم جملة using namespace std;

في حين أن الcompiler يعطيني رسالة خطأ في حال كتبتها

هل كتبتها كالآتي :


#include<iostream.h>
using namespace std;

أزل h. عند كتابتها - هل لا يزال الخطأ موجوداً ؟

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

نعم أخي لا يزال موجوداً

namespace name expected

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

طب أنا كدة احترت

يعني انزل لي compiler تاني؟؟؟؟؟

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

طب أنا كدة احترت

يعني انزل لي compiler تاني؟؟؟؟؟

أكيد

وما المانع ؟ ممكن حد من الأخوة يساعدك بهالموضوع

ربما الاختيار على أسس . . .

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

  • يستعرض القسم حالياً   0 members

    لا يوجد أعضاء مسجلين يشاهدون هذه الصفحة .