תכנות נומרי עם 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
ואז היה בודקת רק "כן" אחרת היא מסתיימת.
הפרק הקודם: אופרטורים |
משפטי תנאי | הפרק הבא: לולאות |