?IF,IF,IF...\ELSE - תכנות - HWzone פורומים
עבור לתוכן
  • צור חשבון

?IF,IF,IF...\ELSE


nahoom

Recommended Posts

אני לומד ++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

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

תלוי מה אתה צריך. אם אתה צריך שהתנאי השני יתקיים רק במידה שהראשון לא התקיים, תשתמש ב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";

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

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

ארכיון

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

×
  • צור חדש...