Generic selectors
Exact matches only
Search in title
Search in content
Search in posts
Search in pages

מבוא לשפות תכנות באמצעות שפת C פרק 8 – קבלת החלטות Decision Statements

קבלת החלטות – זהו קונספט חשוב בשפות תכנות, שכן במהלך כתיבת תוכנית יש סיטואציות רבות בהן אנו נאלצים לבחור בין שתי אפשרויות או יותר לפי תנאים מסוימים.

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

  • אם ממוצע ציוני הסטודנט היו מעל ל-95 באותה השנה אז הוא יקבל ציון מעולה
  • אם ממוצע ציוני הסטודנט היו מתחת ל-50 באותה השנה אז הוא יקבל ציון טעון שיפור
  • אם ממוצע ציוני הסטודנט היו מתחת ל-95 ומעל ל-50 באותה השנה אז הוא יקבל ציון ממוצע

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

תרשים זרימה משפט תנאי if

משפט התנאי if

כעת נכתוב תוכנית בשפת C אשר נעזרת במשפט תנאי if על מנת להפוך את הסיטואציה שתיארנו לקוד, כאשר את ממוצע ציוני התלמיד נזין למשתנה x:

#include 
int main() {
   int x = 55;
   if( x > 95) {
      printf( "ציון התלמיד מעולהn");
   }
   if( x < 50) {
      printf( "ציון התלמיד טעון שיפורn");
   }
   if( x < 95 && x > 50 ) {
      printf( "ציון התלמיד ממוצעn");
   }
}

ואז תתקבל התוצאה הבאה:

ציון התלמיד ממוצע

בתכנית זו השתמשנו במשפט התנאי if, כאשר בפעם הראשונה בדקנו אם התנאי, כלומר אם ממוצע הציונים של התלמיד – הוא מעל 95 או לא. אם התנאי הוא אמת אז התוכנית תריץ את פקודת ה-printf שמתחתיה, אך אם התנאי הוא כזב, התכנית תדלג על שורת הפקודה שמתחתיה ותמשיך הלאה.

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

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

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

אחרי משפט תנאי if, ניתן לכתוב משפט תנאי else, שבמידה והערך הבוליאני שמגיע מבדיקת תנאי ה-if הוא כזב, אז התוכנית מוציאה אותו לפועל:

if(boolean_expression) {
   /* קוד שיצא לפועל אם הערך הבוליאני שנתקבל הוא אמת */
} 
else {
  /* קוד שיצא לפועל אם הערך הבוליאני שנתקבל הוא כזב */
}

ולפניכם תרשים זרימה אשר מבאר זאת:

תרשים זרימה משפט תנאי if, else

משפטי תנאי if, else  הם כלי שימושי לסיטואציות שבהם אנו צריכים לקבל החלטה ולבחור בין 2 אופציות. שימו לב לתוכנית הבאה:

#include 
int main() {
   int x = 55;
   if( x > 95) {
      printf( "התלמיד מבריק בצורה יוצאת דופןn");
   } else {
      printf( "התלמיד אינו מבריק בצורה יוצאת דופןn");
   }
}

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

  • במשתנה x הזנו את הערך 55 שהוא למעשה ממוצע ציוני התלמיד
  • במשפט התנאי if בדקנו אם ממוצע ציוניו הוא מעל 95
  • אם התנאי הוא אמת, אז התוכנית תוציא פלט לפי פקודת printf שכתבנו
  • אם התנאי הוא כזב, אז במשפט התנאי else כתבנו פקודת printf שתוציא לנו פלט שונה

ולכן קיבלנו את התוצאה הבאה:

התלמיד אינו מבריק בצורה יוצאת דופן

משפטי התנאי if, elseif

לאחר משפט תנאי if, ניתן להוסיף משפט תנאי elseif. זהו כלי שימושי מאוד לסיטואציות שבהן אנו רוצים לבדוק יותר מתנאי אחד.

כאשר אנו משתמשים במשפטי תנאי if else, elseif יש מספר כללים שעלינו לזכור:

  • אחרי משפט if ניתן להוסיף מקסימום משפט תנאי else אחד, שמיקומו הנכון יהיה אחרי משפט התנאי elseif
  • ברמת העיקרון, אין הגבלה למספר משפטי ה-elseif שניתן להוסיף אחרי משפט if אחד, ומיקומם הנכון הוא לפני משפט התנאי else
  • ברגע שהתנאי שנכתב במשפט elseif הוא אמת, התוכנית תדלג על שאר משפטי ה-elseif שנותרו

כעת נכתוב תוכנית שמשתמשת במשפטי if, elseif:

#include 
int main() {
   int x = 55;
   if( x > 95) {
      printf( "ציוניו של התלמיד מעוליםn");
   } 
   else if( x < 30) {
      printf( "ציוניו של התלמיד טעוני שיפורn");
   } 
   else if( x < 95 && x > 30 ) {
      printf( "ציוניו של התלמיד ממוצעיםn");
   }
}

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

  • במשתנה x הזנו את הערך 55 שהוא למעשה ממוצע ציוני התלמיד
  • במשפט התנאי if בדקנו אם ממוצע ציוניו הוא מעל 95
  • אם התנאי הוא אמת, אז התוכנית תוציא פלט לפי פקודת printf שכתבנו
  • אם התנאי הוא כזב התוכנית תמשיך אל משפט התנאי elseif
  • במשפט התנאי elseif בדקנו אם ממוצע ציוניו הוא מתחת ל-30
  • אם התנאי הוא אמת, אז התוכנית תוציא פלט לפי פקודת printf שכתבנו
  • אם התנאי הוא כזב התוכנית תמשיך אל משפט ה-elseif הבא
  • במשפט התנאי elseif הבא בתור בדקנו אם ממוצע ציוניו הוא מתחת ל-30
  • אם התנאי הוא אמת, אז התוכנית תוציא פלט לפי פקודת printf שכתבנו
  • אם התנאי הוא כזב התוכנית תמשיך אל משפט ה-elseif הבא
  • במשפט התנאי elseif הבא בתור בדקנו אם ממוצע ציוניו הוא מעל ל-30 ומתחת ל-90
  • אם התנאי הוא אמת, אז התוכנית תוציא פלט לפי פקודת printf שכתבנו

 

ולכן קיבלנו את הפלט הבא:

ציוניו של התלמיד ממוצעים

משפטי תנאי Switch

משפט התנאי Switch הוא למעשה אלטרנטיבה למשפטי if אשר מאפשרת למשתנה להיבדק בהשוואה לרשימה של ערכים, כאשר כל פריט ברשימה זו נקרא case או מקרה בעברית והמשתנה שעליו הפעלנו את משפט התנאי Switch נבדק בכל case שכתבנו, וזהו התחביר בשפת C:

switch(התנאי){
   case ONE :
      קוד;
      break;
   case TWO:
      קוד;
      break;
   ......
   default :
      קוד;
}

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

תוכלו גם להיעזר בתרשים הזרימה הבא:

תרשים זרימה משפט תנאי switch

כעת שימו לב לתוכנית הבאה שכתבנו על פי תרשים הזרימה:

#include 
int main() {
   int x = 2;
   switch( x ){
      case 1 :
         printf( "אחדn");
         break;
      case 2 :
         printf( "שתייםn");
         break;
      case 3 :
         printf( "שלושn");
         break;
      case 4 :
         printf( "ארבעn");
         break;
      default :
         printf( "אף אחת מהתוצאותn");
   }
}
  • קודם כל בביטוי שלמעלה נתנו את הערך 2 למשתנה x
  • ב-case הראשון בדקנו אם ערך המשתנה שווה ל-1
  • במידה והתנאי הוא אמת, גוף הקוד של case זה יצא לפועל, אם כזב, התוכנית תמשיך ל-case הבא
  • ב-case השני בדקנו אם ערך המשתנה שווה ל-2
  • במידה והתנאי הוא אמת, גוף הקוד של case זה יצא לפועל, אם כזב, התוכנית תמשיך ל-case הבא
  • ב-case השלישי בדקנו אם ערך המשתנה שווה ל-3
  • במידה והתנאי הוא אמת, גוף הקוד של case זה יצא לפועל, אם כזב, התוכנית תמשיך ל-case הבא
  • ב-case הרביעי בדקנו אם ערך המשתנה שווה ל-4
  • במידה והתנאי הוא אמת, גוף הקוד של case זה יצא לפועל, אם כזב, התוכנית תמשיך ל-case הבא
  • הקוד שבגוף המקרה האחרון שנקרא default, יצא לפועל רק אם אף אחד מהמקרים לא היה אמת

 

ולכן נקבל את הפלט הבא:

שתיים

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

קבלת החלטות בשפת Java

זוהי אותה התוכנית, רק שהפעם כתבנו אותה לשפת Java:

public class Main {
   public static void main(String []args) {
      int x = 45;
      if( x > 95) {
         System.out.println( "ציוניו של התלמיד מעולים");
      } 
      else if( x < 30) {
         System.out.println( "ציוניו של התלמיד טעוני שיפור");
      } 
      else if( x < 95 && x > 30 ) {
         System.out.println( "ציוניו של התלמיד ממוצעים");
      }
   }
}

על מנת שנקבל את התוצאה הבאה:

ציוניו של התלמיד ממוצעים

קבלת החלטות בשפת Python

זוהי אותה התוכנית, רק שהפעם כתבנו אותה לשפת Java:

x = 45
if x > 95:
   print ("ציוניו של התלמיד מעולים")
elif x < 30:
   print ("ציוניו של התלמיד טעוני שיפור")
elif x < 95 and x > 30:
   print ("ציוניו של התלמיד ממוצעים")

על מנת שנקבל את התוצאה הבאה:

ציוניו של התלמיד ממוצעים

רוצים לשתף את המדריך?

שיתוף ב facebook
שיתוף ב twitter
שיתוף ב telegram
שיתוף ב whatsapp
שיתוף ב linkedin
שיתוף ב tumblr
שיתוף ב email
שיתוף ב reddit
שיתוף ב skype
שיתוף ב vk

אהבתכם את המדריך? פתר לכם תקלה?

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

כתיבת תגובה