תכנות נומרי עם Matlab ו-Octave/משפטי תנאי
פרק זה לוקה בחסר. אתם מוזמנים לתרום לוויקיספר ולהשלים אותו. ראו פירוט בדף השיחה.
הקדמה
if
עריכהמשפטי תנאי מתחילים במילה if, לאחריו ביטוי לבדיקה, ולאחריו הפקודה שיש לבצע במקרה שהביטוי אמת:
if(<condition>)
<action>
end%if
כאשר condition הוא התנאי הבוליאני לבדיקה, וaction הוא הפקודה ).
התרשים הבא מראה את התנאי בצורה גרפית:
לדוגמה, קטע הקוד:
if(x == 6)
fprintf("x is 6");
end
ידפיס אם ערך x אכן 6 תתבצע ההדפסה (ואם לא - לא).
כמובן שנוכל ליצור תנאים מסובכים מעט יותר:
- אפשר להשתמש באופרטורים בוליאניים ולוגיים כדי ליצור תנאים בוליאניים מורכבים לבדיקת הif
- אפשר להשתמש בבלוקים כדי לבצע רצף של פקודות במקרה שהתנאי אמת
else
עריכהלפעמים צריך לציין הן מה לעשות כשתנאי מתקיים, והן מה לעשות כשאינו מתקיים. במקרה זה אפשר להשתמש בתנאי if / else.
if(<condition>)
<action>
else
<alternative_action>
end
כאן condition הוא תנאי, action הוא פקודה (או בלוק) לביצוע אם התנאי מתקיים, וalternative_action הוא פקודה (או בלוק) לביצוע אם אינו מתקיים.
התרשים הבא מראה את התנאי בצורה גרפית:
לדוגמה:
if(x==6)
y += 2;
else
y = 8;
end
יחבר 2 לy אם x == 6, ויקבע את ערכו של y ל8 אם ערכו של x אינו 6.
elseif
עריכהלפעמים צריך לציין הן מה לעשות כשתנאי מתקיים, והן מה לעשות כשאינו מתקיים, אך תנאי אחר כן מתקיים. במקרה זה אפשר להשתמש בתנאי 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
עריכהניתן לשלב בין שלושת תנאי הבקרה שראינו. המבנה הכללי ביותר הוא:
- תנאי if, שלאחריו
- אפס או יותר תנאי elseif, שלאחר האחרון שבהם (אם יש כאלה)
- תנאי 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, מתבצעים השלבים הבאים:
- הערך expression מחושב
- נבדק מי הוא הערך הראשון מבין הערכים value_0, value_1,... שערכו זהה לexpression. הפקודה המתאימה לערך הראשון הנ"ל תבוצע.
- אם אף ערך מתאים ל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
ואז היה בודקת רק "כן" אחרת היא מסתיימת.
הפרק הקודם: אופרטורים |
משפטי תנאי | הפרק הבא: לולאות |