#C: האם ב Switch אפשר שמשהו יתקיים אם הוא יעמוד בתווך מסויים? - תכנות - HWzone פורומים
עבור לתוכן
  • צור חשבון

#C: האם ב Switch אפשר שמשהו יתקיים אם הוא יעמוד בתווך מסויים?


moo2004

Recommended Posts

היי,

רק התחלתי ללמוד עכשיו #C וכתבתי משהו קטן שמייצר 20 תרגילים רנדומלים במתמטיקה וסופר על כמה תרגילים המשתמש ענה נכון.

אני רוצה להדפיס הודעה למסך (ב Console השחור) עם טקסט למשתמש.

ההודעה תשתנה עפ"י מספר התשובות הנכונות.

הודעה אחת תופיע כאשר משתמש ענה על יותר מ 15 תרגילים נכון,

הודעה אחרת תופיע כאשר משתמש ענה על יותר מ 10 תרגילים נכון, אבל על פחות מ 15,

הודעה אחרת תופיע כאשר משתמש ענה על יותר מ 5 תרגילים נכון, אבל על פחות מ 10

וכן הלאה...

איך אני יכול לעשות את זה עם Switch ולא עם משפט IF בתוך IF?

:s05:

קישור לתוכן
שתף באתרים אחרים

קודם כל, לא צריך if בתוך if, אלא פשוט להשתמש ב-else if, כלומר משהו בסגנון:

string msg;
if (n > 15) {
msg = "some message";
} else if (n > 10) {
msg = "some other message";
} else if (n > 5) {
// ... and so on
}

והאמת היא שזה הפתרון המומלץ.

לגבי switch - הוא יודע לטפל רק בערכים קבועים, ולא בטווחים של ערכים. לכן יש לך שני פתרונות אפשריים.

אופציה אחת, די חורנית ולא מומלצת, היא פשוט להחזיק switch עם 21 אפשרויות שונות (מ-0 עד 20).

אופציה שנייה היא לעשות switch על n/4, ואז מספר האופציות יצטמצם לך ל-5 (0 עד 4).

בכל מקרה, עדיף להשתמש ב-if. ב-switch משתמשים רק אם באמת יש לך רשימה קבועה של ערכים אפשריים (בד"כ ב-enum-ים).

קישור לתוכן
שתף באתרים אחרים

אם הוא יכנס לראשון אז הערך גדול מ-15. אם הוא לא יכנס לראשון, אז מובטח שהערך קטן מ-15 והוא יבדוק את התנאי שבא אחרי ה- else. לא צריך לבדוק אם זה קטן מ-15.

שים לב שאם היית רוצה לרשום את התנאי עם הקטן מ-15 היית צריך להוסיף שווה.

ד.א חסרים לך סוגריים.

קישור לתוכן
שתף באתרים אחרים

באמת אין אפשרות ש Case תגדיר טווח של ערכים. כל Case צריך להיות לערך אחד...

עשיתי את זה בסוף עם:


If .....
else if...

אם רוצים לעשות משהו דומה עם Switch צריך לעשות את זה כך:


switch (x)
case 20:
case 19:
case 18:
case 17: Console.writeln("Bla Bla");
break;

מה שיקרה זה שאם הערך של CX יהיה 19 למשל (או 20 או 18) יתבצע ה case הראשון שכתובות בו הוראות לביצוע...

כמו שכבר אמרו לפני, זו דרך "ערבית" לעשות את זה.

קישור לתוכן
שתף באתרים אחרים

עוד אופציה שלפעמים עדיפה אם יש לך לא מעט ערכים היא להשתמש ברשימה (== מערך או כל דבר אחר) של טווחים:

הנה פסאודוקוד בסיסי

ranges[] = { 0, 10, 15, 20, 100, 200, 256 };
int range = 0;
while (val < ranges[range+1]) AND (val >= ranges[range]) DO range = range+1;

קישור לתוכן
שתף באתרים אחרים

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

×
  • צור חדש...