עבור לתוכן

?IF,IF,IF...\ELSE

Featured Replies

פורסם

אני לומד ++C והגעתי לIF וכתוב לי שיש כמה דרכים לכתוב IF:

1)לכתוב כל הזמן IF

דוגמא

:if (X >Y)
cout << "Go x !\n";

if (x< y)
{
cout << "Go y!\n";
cout << "Happy for you!\n";
}

(if (x ==y

IF (2 ולאחר מכן ELSE

דוגמא:

if ( (firstNumber % secondNumber) == 0) // evenly divisible?
{
if (firstNumber == secondNumber)
cout << "They are the same!\n";
else
cout << "They are evenly divisible!\n";
}
else
cout << "They are not evenly divisible!\n";

קיצר אני רציתי לשאול במה עדיף להישתמש :1\2

פורסם

הדרך המתורבתת לכתוב:

if(condition = true)
{
action;
}
else
{
action;
}

פורסם

תלוי מה אתה צריך. אם אתה צריך שהתנאי השני יתקיים רק במידה שהראשון לא התקיים, תשתמש בELSE. אם אתה סתם מבצע IFים בלי קשר לוגי אחד לשני, אל תשתמש בELSE.

בדוגמא הראשונה שלך, כדאי להשתמש בELSE IF ובELSE, מכיוון שאם התנאי הראשון מתקיים או לא, זה משפיע בצורה כלשהי על התנאים האחרים.

פורסם

רק לידע כללי

הבעיה עם ה if והelse היא בעיה ידועה בc (טוב זה ידוע למי שלמד compilers או programing languages או קורס דומה באוניברסיטה ) הבעיה מושרשת מהעובדה ששפת תיכנות חיבת להיות context free שאומר שלכל ביטוי (statement )יש רק פירוש אחד. לif if else יש שני פירושים בגלל שהelse יכול להיות שייך או לif הראשון או לשני. בשפות אחרות לרוב יש פקודה שנקראת "endif " כמו ב preprocessor כדי לפתור את הבעיה ב C משתמשים ב {} כדי להיות ברורים.

שפה שהיא לא context free ולכל ביטוי יש יותר מפירוש אחד נקראת context sensetive שאומר שהביטוי תלוי בתוכן שבא לפניו או יבוא אחריו . דוגמה לשפה כזאת היא השפה שבני האדם משתמשים בה. דוגמה פשוטה היא "יריתי באיש עם האקדח" האם האקדח שייך לי או לאיש שיריתי בו? ("I shot the man with the gun ")אפשר לענות על השאלה לפי המשפטים הקודמים (ראיתי איש עם אקדח/ שלפתי את האקדח )או המשפטים שיבואו (האקדח נפל לו מהיד / החזרתי את האקדח לנרתיק ) .

עוד משהו שצריך להזהר איתו בC נקרא precedence אני לא זוכר איך עושים את זה בקומפילר אבל לרוב תמיד כדאי להכניס ביטויים לסוגריים . הנה דוגמה לביטוי ואלידי שלא יתבצע נכון בגלל הכללים של ה precedence :

a&1==0

זה בודק אם a הוא זוגי הבעיה היא שלפעולה == יש עדיפות על הפעולה & ומה שיקרה זה שהביטוי אף פעם לא יעבוד בגלל שהקומפילר רואה אותו ככה

a&(1==0)

במקום


(a&1)==0

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

פורסם

כמו ש UnsignedInteger אמר, לדעתי מאוד רצוי שבמשפט הראשון שלך יהיה else בגלל 2 סיבות:

א. זה קצת יותר יעיל.

ב. זה יותר קריא.

ככה אני הייתי כותב אותו:

if (x > y)
statement;

else if (x < y)
statement;

else
statement;

גם המשפט השני הוא לדעתי די מכוער, אני אישית הייתי בונה אותו ככה:

if (firstNumber == secondNumber)	
cout << "They are the same!\n";

else if ( (firstNumber % secondNumber) == 0 )
cout << "They are evenly divisible!\n";

else
cout << "They are not evenly divisible!\n";

לדעתי אפילו יותר טוב לתקוע שם משפט ?:

פורסם

לי אמרו שתמיד אם אין ELSE יש לרשום הערה אם הסבר למה אין ELSE אחרת אתה בטוח עושה משהו לא נכון :)

פורסם

?!WTF

מי אמר לך דבר מטומטם כזה?

פורסם

לי אמרו שתמיד אם אין ELSE יש לרשום הערה אם הסבר למה אין ELSE אחרת אתה בטוח עושה משהו לא נכון :)

אחרת מי שאומר לך את זה טועה.

ארכיון

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

דיונים חדשים