הערה: בפרק זה נלמד כיצד לקבל החלטות בתוכנית שלנו באמצעות תנאים, ביטויים לוגיים ושימוש בשארית החלוקה.
ביטויים לוגיים והשוואות
ביטויים לוגיים מאפשרים לנו לקבל החלטות על בסיס השוואה בין ערכים.
דוגמאות לביטויים לוגיים:
1
2
int age = 18;
bool isAdult = age >= 18; // התוצאה תהיה true
משפטי תנאי - if, else
משפט תנאי מאפשר לנו לבצע פעולה מסוימת רק אם תנאי מסוים מתקיים.
מבנה משפט תנאי פשוט:
1
2
3
4
5
int score = 85;
if (score >= 60)
{
Console.WriteLine("Passed the exam!");
}
מבנה משפט תנאי עם else:
1
2
3
4
5
6
7
8
9
int score = 55;
if (score >= 60)
{
Console.WriteLine("Passed the exam!");
}
else
{
Console.WriteLine("Failed the exam, try again.");
}
אופרטורים להשוואה
משווים בין שני ערכים, והתוצאה היא true או false (כלומר – ביטוי לוגי). דוגמאות:
x == 5
, נכון אם x שווה ל־5
x <= 10
, נכון אם x קטן או שווה ל־10
x != y
, נכון אם x שונה מ־y
הכרזה לעומת השמה
חשוב להבחין בין הכרזה על משתנה (declaration) לבין השמה של ערך למשתנה (assignment).
דוגמה נכונה:
1
2
int x; // הכרזה
x = 10; // השמה
שגיאה נפוצה:
1
2
int y;
y = y + 1; // שגיאה: שימוש במשתנה ללא ערך התחלתי
אזהרה: בדוגמה השגויה תקבלו שגיאה מסוג Use of unassigned local variable 'y'
. ודאו תמיד לתת ערך התחלתי למשתנה לפני שמשתמשים בו בחישוב.
שימוש במודולו (%)
הפעולה %
(מודולו) מחזירה את שארית החלוקה בין שני מספרים.
1
2
3
4
5
6
7
8
9
int number = 7;
if (number % 2 == 0)
{
Console.WriteLine("Mispar zugi // even number");
}
else
{
Console.WriteLine("Mispar e-zugi // odd number");
}
אם המשתנה הוא 7, הפלט יהיה:
Mispar e-zugi // odd number
שימוש באופרטורים לוגיים לכתיבת תנאים מורכבים
איך משלבים כמה תנאים בעזרת ‘וגם’, ‘או’, ו’לא’
אופרטורים לוגיים מאפשרים לנו לבדוק תנאים מורכבים:
&&
(וגם)||
(או)!
(שלילה)
דוגמה:
1
2
3
4
5
6
7
8
9
10
11
int age = 25;
bool hasLicense = true;
if (age >= 18 && hasLicense)
{
Console.WriteLine("You can drive a car");
}
else
{
Console.WriteLine("You cannot drive a car");
}
משתני דגל (Flags)
משתנה דגל הוא משתנה לוגי שנועד לזכור מצב מסוים.
1
2
3
4
5
6
7
8
9
10
11
12
bool found = false;
int number = 5;
if (number == 5)
{
found = true;
}
if (found)
{
Console.WriteLine("Number found");
}
טבלת מעקב (דוגמה לתנאי)
שורת קוד | score | פלט |
---|---|---|
הגדרה | 55 | |
בדיקה | 55 | Failed the exam, try again. |
החלפת ערכים בין משתנים
כאשר אנו רוצים להחליף ערכים בין שני משתנים, נדרש לנו משתנה עזר שלישי. זוהי אנלוגיה דומה לשאלה: כיצד מחליפים תוכן בין שני ספלי תה?
נניח שיש לנו שני ספלים:
- ספל A מכיל תה ירוק
- ספל B מכיל תה שחור
כדי להחליף את התכולה שלהם, נזדקק לכלי שלישי (ספל C):
- נשפוך את התוכן של ספל A לתוך ספל C (ריק)
- נשפוך את התוכן של ספל B לתוך ספל A (שהתרוקן)
- נשפוך את התוכן של ספל C לתוך ספל B
באותו אופן פועלת החלפת ערכים בתכנות - נדרש משתנה עזר זמני (temp).
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
static void Main()
{
// קלט שני מספרים
Console.WriteLine("Enter first number:");
int a = int.Parse(Console.ReadLine()); // קליטת המספר הראשון
Console.WriteLine("Enter second number:");
int b = int.Parse(Console.ReadLine()); // קליטת המספר השני
Console.WriteLine($"Before swap: a = {a}, b = {b}");
// החלפת הערכים באמצעות משתנה זמני
int temp = a; // שמירת הערך של a במשתנה זמני
a = b; // הצבת הערך של b לתוך a
b = temp; // הצבת הערך המקורי של a (שנשמר ב-temp) לתוך b
Console.WriteLine($"After swap: a = {a}, b = {b}");
Console.WriteLine("Press any key to finish...");
Console.ReadKey(); // המתנה ללחיצת מקש לפני סגירת החלון בדרך כלל לא נעשה בכך שימוש
}
סגנונות כתיבת סוגריים בקוד
סגנון C# מקובל (Allman) הופיע עד כה ואנו נכתוב רק בצורה זו
סגנון Java (K&R) כאן פתיחת הסוגריים היא בהמשך להוראה הפותחת את הבלוק
1
2
3
4
5
6
7
8
9
10
bool found = false;
int number = 5;
if (number == 5) {
found = true;
}
if (found) {
Console.WriteLine("Number found");
}
כתיבה ללא סוגריים: בדוגמא שלנו ניתן גם להתעלם מסוגריים מפני שבתוך הבלוק מופיעה הוראה בודדת. כתיבה זו מומלצת מרגע שתרגישו בנח איתה. גם כאשר כותבים ללא סוגריים מקובל מאד מעבר שורה
1
2
3
4
5
6
7
8
bool found = false;
int number = 5;
if (number == 5)
found = true;
if (found)
Console.WriteLine("Number found");
אזהרה: שימו לב להשתמש תמיד בשני סימני שוויון (==
) לבדיקת שוויון בתנאים.