תכנות נומרי עם Matlab ו-Octave/משפטי תנאי



פרק זה לוקה בחסר. אתם מוזמנים לתרום לוויקיספר ולהשלים אותו. ראו פירוט בדף השיחה.



הקדמה

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

if(<condition>)
  <action>
end%if

כאשר condition הוא התנאי הבוליאני לבדיקה, וaction הוא הפקודה ).

התרשים הבא מראה את התנאי בצורה גרפית:

 
התנאי if

לדוגמה, קטע הקוד:

if(x == 6)
  fprintf("x is 6");
end

ידפיס אם ערך x אכן 6 תתבצע ההדפסה (ואם לא - לא).

כמובן שנוכל ליצור תנאים מסובכים מעט יותר:

  • אפשר להשתמש באופרטורים בוליאניים ולוגיים כדי ליצור תנאים בוליאניים מורכבים לבדיקת הif
  • אפשר להשתמש בבלוקים כדי לבצע רצף של פקודות במקרה שהתנאי אמת

לפעמים צריך לציין הן מה לעשות כשתנאי מתקיים, והן מה לעשות כשאינו מתקיים. במקרה זה אפשר להשתמש בתנאי if / else.

if(<condition>)
  <action>
else
  <alternative_action>
end

כאן condition הוא תנאי, action הוא פקודה (או בלוק) לביצוע אם התנאי מתקיים, וalternative_action הוא פקודה (או בלוק) לביצוע אם אינו מתקיים.

התרשים הבא מראה את התנאי בצורה גרפית:

 
התנאי if-else


לדוגמה:

if(x==6)
  y += 2;
else
  y = 8;
end

יחבר 2 לy אם x == 6, ויקבע את ערכו של y ל8 אם ערכו של x אינו 6.

לפעמים צריך לציין הן מה לעשות כשתנאי מתקיים, והן מה לעשות כשאינו מתקיים, אך תנאי אחר כן מתקיים. במקרה זה אפשר להשתמש בתנאי if / elseif.

if(<condition>)
  <action>
elseif(<alternative_condition>)
  <alternative_action>
end

כאן condition הוא תנאי, action הוא פקודה (או בלוק) לביצוע אם התנאי מתקיים, alternative_condition הוא תנאי לבדיקה אם condition הוא שקר, וalternative_action הוא פקודה (או בלוק) לביצוע אם condition הוא שקר אך alternative_condition הוא אמת.

לדוגמה:

if(x==6)
  y += 2;
elseif(x % 2 == 0)
  y = 8;
end

יחבר 2 לy אם x == 6, ויקבע את ערכו של y ל8 אם ערכו של x אינו 6 אך x זוגי.


שילובי if / elseif / else

עריכה

ניתן לשלב בין שלושת תנאי הבקרה שראינו. המבנה הכללי ביותר הוא:

  1. תנאי if, שלאחריו
  2. אפס או יותר תנאי elseif, שלאחר האחרון שבהם (אם יש כאלה)
  3. תנאי else


switch-case

עריכה

switch-case הוא סוג נוסף של משפט בקרה. המבנה שלו הוא מהצורה:

switch(<expression>)
case <value_0>
  <action_0>
  case <value_1>
  <action_1>
 end

כאשר:

  • expression הוא ערך (לרוב נתון כערכו של משתנה)
  • value_0, value_1, ..., הם ערכים קבועים.
  • action_0, action_1, ..., הם פקודות או רצפי פקודות.
  • default_action הוא פקודה או רצף פקודה.

כאשר רצף התכנית מגיע לפקודת switch, מתבצעים השלבים הבאים:

  1. הערך expression מחושב
  2. נבדק מי הוא הערך הראשון מבין הערכים value_0, value_1,... שערכו זהה לexpression. הפקודה המתאימה לערך הראשון הנ"ל תבוצע.
  3. אם אף ערך מתאים לexpression, ותנאי ברירת המחדל (default) נמצא, אז הפקודה המתאימה לו תבוצע.

התכנית הבאה מדגימה את השימוש בswitch:

x=input('Click a number between 1 and 4 ','s');
switch x
   case '1'
 disp('You clicked 1. have a good day');
     case '2'
  disp('You clicked 2. have a nice day');
     case '3'
 disp('You clicked 3. have a happy day');
      case '4'
   disp('You clicked 4. have a great day');
      otherwise
 disp('You did not click a number between 1 and 4');
 end

התוכנית תדפיס הודעת ברכה שונה לכל מספר מ 1 עד 4. אם המשתמש יכניס מספר שונה, היא תחזיר הודעה מתאימה.

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


otherwise הוא דומה ל- else בפונקציה if . כמו שם הוא מחזיר מה שיוגדר בו רק אם אין שום תנאי שמתקיים.


במקרה שנרצה להגדיר יותר מקלט אחד לתנאי מסויים , נשתמש בסוגרים מסולסלות:

  
x=input('do you want to continue? yes/no ','s');
switch x
   case {'yes','YES'}
 disp('continue');
     case {'no','NO'}
  disp('goodbye!');
 end

התוכנית הנ"ל מאשרת קלט גם אם נכתב באותיות רשיות.

היה ניתן לכתוב את התוכנית כך:

  
x=input('do you want to continue? yes/no ','s');
switch x
   case {'yes','YES'}
 disp('continue');
    otherwise
  disp('goodbye!');
 end

ואז היה בודקת רק "כן" אחרת היא מסתיימת.

הפרק הקודם:
אופרטורים
משפטי תנאי הפרק הבא:
לולאות