פרק 3 - תנאים
עד עכשיו התוכנית שלנו ביצעה את הפקודות לפי הסדר, מלמעלה למטה. אבל הרבה פעמים אנחנו רוצים שהתוכנית תקבל החלטה: אם משהו נכון, תעשה פעולה אחת. אם לא, תעשה פעולה אחרת.
1. מהו תנאי?
תנאי הוא בדיקה שמחזירה אחת משתי תשובות: true או false.
לפי התוצאה הזאת התוכנית מחליטה מה לעשות.
דוגמה לתנאי: האם הגיל גדול מ-18?
אם כן, התשובה היא true.
אם לא, התשובה היא false.
2. הפקודה if
הפקודה if מאפשרת לנו להריץ קטע קוד רק אם תנאי מסוים מתקיים.
int age = 20;
if (age >= 18) {
System.out.println("מותר להיכנס");
}
( ) מכילים את התנאי, והסוגריים המסולסלים
{ } מכילים את הפקודות שירוצו אם התנאי נכון.
3. הפקודה else
אם נרצה לבצע פעולה אחרת כאשר התנאי לא מתקיים, נוסיף else.
int age = 16;
if (age >= 18) {
System.out.println("מותר להיכנס");
} else {
System.out.println("אסור להיכנס");
}
4. הפקודה else if
לפעמים יש יותר משתי אפשרויות. במצב כזה נשתמש ב-else if.
int grade = 85;
if (grade >= 90) {
System.out.println("מצוין");
} else if (grade >= 70) {
System.out.println("טוב");
} else {
System.out.println("צריך שיפור");
}
5. אופרטורי השוואה נפוצים
| אופרטור | פירוש | דוגמה |
|---|---|---|
== | שווה ל | x == 5 |
!= | שונה מ | x != 5 |
> | גדול מ | x > 5 |
< | קטן מ | x < 5 |
>= | גדול או שווה ל | x >= 5 |
<= | קטן או שווה ל | x <= 5 |
== ולא ב-=.
הסימן = הוא השמה, לא השוואה.
טעות נפוצה - בלבול בין = ל-==: כתיבת if (age = 18) במקום
if (age == 18). למרבה המזל, ב-Java (ובאותה מידה ב-C#) זו שגיאת קומפילציה
מיידית - התנאי בתוך if חייב להיות מסוג boolean, ו-age = 18
הוא ביטוי מסוג int - אז התוכנית פשוט לא תרוץ, ולא תקבלו תוצאה שגויה "בשקט". עדיין כדאי
להכיר את השגיאה כדי לא להיתקע עליה בזמן מבחן.
🎓 זווית הבגרות
איך זה מופיע בבגרות: תנאים הם אחד הנושאים המרכזיים בחלק הראשון של הבגרות - כמעט כל שאלה כוללת החלטה מבוססת תנאי, לרוב בתוך לולאה שעוברת על מערך.
סוג שאלה טיפוסי: שאלת "מה יודפס" שדורשת מעקב אחרי שרשרת if/else if/else, או שילוב תנאים בתוך פתרון גדול יותר כמו סינון ערכים במערך.
טעות נפוצה: להשתמש בכמה if נפרדים במקום
else if - זה גורם לבדיקת כל התנאים גם אחרי שאחד כבר התקיים, ועלול להדפיס יותר מדי.
מה לזכור למבחן: ברגע שתנאי ב-if/else if
מתקיים, כל השאר בשרשרת מדולג אוטומטית - לא נבדק בכלל.
6. תרגול
מה יודפס למסך על ידי הקוד הבא?
int grade = 72;
if (grade >= 90) {
System.out.println("מצוין");
} else if (grade >= 70) {
System.out.println("טוב");
} else {
System.out.println("צריך שיפור");
}
כמה שורות פלט יודפסו בסה"כ על ידי הקוד הבא?
int score = 95;
if (score >= 60) {
System.out.println("עבר");
}
if (score >= 90) {
System.out.println("מצטיין");
}
מה יודפס למסך על ידי הקוד הבא? (תנאי מקונן - if בתוך if)
int age = 20;
boolean hasLicense = true;
if (age >= 18) {
if (hasLicense) {
System.out.println("מותר לנהוג");
} else {
System.out.println("צריך רישיון");
}
} else {
System.out.println("צעיר מדי");
}
כתבו את השורה הראשונה של תנאי שבודק אם המשתנה age גדול או שווה ל-18, כולל הסוגריים המסולסלים הפותחים (כמו בדוגמאות שראינו).
כתבו את השורה הראשונה של תנאי שבודק אם המשתנה grade שווה ל-100, כולל הסוגריים המסולסלים הפותחים.