פרק 3 - תנאים, ביטויים לוגיים ושארית חלוקה


תנאים, החלטות וביטויים לוגיים

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

ריבוי שאלות בויז’ואל סטודיו

המטרה: לארגן את החומרים גם בויז'ואל סטודיו בנוסף ל-google docs. הרחיבו כדי לצפות בסרטון. ניתן לפעול בכמה אופנים:

ניתן לפעול ב-3 דרכים מומלצות כדי להכיל כמה פתרונות בתוך אותו פרוייקט

  1. מספר שאלות (כפעולות) באותו קובץ,
  2. מספר מחלקות באותו פרוייקט,
  3. מספר פרוייקטים באותו Solution.

הסרטון הבא מסביר על 3 הדרכים

משפטי תנאי - if, else

משפט תנאי מאפשר לנו לבצע פעולה מסוימת רק אם תנאי מסוים מתקיים.

מבנה משפט תנאי פשוט:

1
2
3
4
5
int score = 85;
if (score >= 60) // Logical Expression לביטוי שבסוגריים קוראים ביטוי לוגי
{
    Console.WriteLine("Passed the exam!");
}

מבנה משפט תנאי עם else:

1
2
3
4
5
6
7
8
9
int score = 55;
if (score >= 60) // false הביטוי הלוגי כאן הוא 
{
    Console.WriteLine("Passed the exam!");
}
else // לכן שורה 4 לא תבוצע ושורה 8 תבוצע
{
    Console.WriteLine("Failed the exam, try again.");
}

דוגמא פתורה לתנאי עם else if:

כתבו תוכנית הקולטת גיל ומדפיסה :

  • “minor” אם הגיל קטן מ-18
  • אחרת אם הגיל בין 18 ל-64 (כולל) — “adult”
  • אחרת — “senior”
פתרון
1
2
3
4
5
6
7
8
9
10
11
12
public static void Main()
{
    Console.Write("Enter age: ");
    int age = int.Parse(Console.ReadLine());

    if (age < 18)
        Console.WriteLine("minor");
    else if (age <= 64)
        Console.WriteLine("adult");
    else
        Console.WriteLine("senior");
}

אופרטורים של השוואה ואופרטורים לוגיים

במתמטיקה אופרטור סוג האופרטור תיאור דוגמה בקוד
\(=\) == השוואה שווה if (x == y) { … }
\(\neq\) != השוואה לא שווה if (x != y) { … }
\(>\) > השוואה גדול מ if (x > y) { … }
\(<\) < השוואה קטן מ if (x < y) { … }
\(\ge\) >= השוואה גדול או שווה if (x >= y) { … }
\(\le\) <= השוואה קטן או שווה if (x <= y) { … }
\(\land\) && לוגי AND (וגם) if (a > 0 && b > 0) { … }
\(\lor\) || לוגי OR (או) if (a == 0 || b == 0) { … }
\(\lnot\) ! לוגי NOT (שלילה) bool ok = !isReady;

ביטויים לוגיים והשוואות

ביטויים לוגיים מאפשרים לנו לקבל החלטות על בסיס השוואה בין ערכים.

דוגמא לביטוי לוגי היא הביטוי a >= 18: באנגלית : Logical Expression

int age = 18;
// הנה שורה קצת מוזרה ננסה להבין אותה יחד
bool isAdult = age >= 18; // isAdult שיכנס למשתנה true תוצאה הביטוי תהיה

דוגמאות לביטויים לוגיים

// השוואה פשוטה:
x > 0         // חיובי x אמת אם 

// שילוב עם AND:
(x > 0) && (x % 2 == 0)  
// חיובי ו־זוגי x אמת אם

// ביטוי מורכב:
(a != b) && ((c > d) || (e <= f))
// אמת אם a לא שווה ל־b וגם (c גדול מ־d או e קטן/שווה ל־f)

שארית חלוקה. שימוש במודולו (%)

האופרטור % (מודולו) מחזיר את שארית החלוקה בין שני מספרים. שארית החלוקה של 10 ב-3 היא 1. נושא זה מבלבל תלמידים ויש לחזור על ההקניה בנקודות זמן שונות לכל אורך השנה. אין ל-% שום קשר לחישוב אחוזים. ניתן להעזר בו לקביעת זוגיות / אי-זוגיות , לבידוד של ספרות במספר ועוד.

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)

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

שימוש באופרטורים לוגיים לכתיבת תנאים מורכבים

כיצד משלבים כמה תנאים בעזרת ‘וגם’, ‘או’, ו’לא’

אופרטורים לוגיים מאפשרים לנו לבדוק תנאים מורכבים: מקרים בהם צריכים ששני תנאים יתקיימו (וגם) או מצבים בהם יש כמה אפשרויות כל אחת מהן טובה (או)

  • && (וגם)
  • || (או)
  • ! (שלילה, לא)

דוגמה:

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");
}

סגנונות כתיבת סוגריים בקוד

סגנון C# מקובל (Allman) הופיע עד כה ואנו נכתוב רק בצורה זו

סגנון Java (K&R) כאן פתיחת הסוגריים היא בהמשך להוראה הפותחת את הבלוק

bool found = false;
int number = 5;

// java style block brackets
if (number == 5) { 
    found = true;
}

if (found) {
    Console.WriteLine("Number found");
}

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

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;

found = number == 5; // true יקבל את הערך found

if (found)
    Console.WriteLine("Number found");
    

בדיקת פלינדרום. טבלת מעקב

כתבו תוכנית ב-C# הקולטת מספר תלת-ספרתי חיובי (num) ומדפיצה הודעה אם המספר הוא פלינדרום. פלינדרום הוא מילה, מספר, משפט או כל רצף סמלים אחר, שקריאתו מימין לשמאל ומשמאל לימין היא זהה.

פתרון
1
2
3
4
5
6
7
8
9
10
11
12
Console.Write("Enter a 3 digit number: ");
int num = int.Parse(Console.ReadLine()); // הניחו לצורך מעקב שנקלט המספר 363
int units = num % 10; // בידוד הספרה הימנית
int hundreds = num / 100; // בידוד הספרה השמאלית
if (units == hundreds)
{
    Console.WriteLine($"{num} is a palindrome");
}
else
{
    Console.WriteLine($"{num} is not a palindrome");
}

טבלת מעקב עבור קלט 363: טבלת מעקב מאפשרת לעקוב אחר ביצוע הקוד על דף נייר. בבחינות מופיעות כמעט תמיד דוגמאות קוד ודרישה לבצע מעקב. בסוף המעקב תתבקשו בנוסף לקבוע מה מטרת הקוד.

שורה num units hundreds units == hundreds פלט
2 363  
3 363 3  
4 363 3 3  
5 363 3 3 true 363 is a palindrome

ניתן לעקוב ולרשום רק מה שמשתנה. דוגמא למעקב עבור קלט 563:

שורה num units hundreds units == hundreds פלט
2 563        
3,4   3 5    
5       false  
11         563 is not a palindrome

תרגול

⬅ מעבר לתרגול 3.1 - תרגילים בתנאים פשוטים

⬅ מעבר לתרגול 3.2 - תרגילים בתנאים מורכבים ושארית חלוקה

סרטונים

סרטוני פרק 2: ביטויים לוגיים

סרטוני פרק 4: משפטי תנאי