במאמר זה אציג מספר שיטות לבדיקה האם המספר הוא זוגי או אי זוגי, ואדון ביתרונות ובחסרונות של כל אחת מהן.
שיטה ראשונה – הפונקציה MOD
השיטה הראשונה היא באמצעות שימוש בפונקציה Mod. זו השיטה הטריוויאלית,
וסביר להניח שזו גם התשובה הראשונה שתמצאו אם תחפשו בגוגל פתרון.
אז איך עובדת הפונקציה? היא מחלקת מספר במחלק כלשהו, ובודקת אם יש שארית.
בואו נביט בקוד הבא:
tmp = 10
Debug.Print tmp Mod 2
מה בעצם כתוב כאן?
קח את הערך שהוזן ל Tmp וחלק אותו ב-2.
את התוצאה תציג בחלונית Immediate (לא מכירים? לחצו כאן להסבר)
הרצתי את הקוד פעמיים, כשבפעם הראשונה הזנתי לתוך המשתנה tmp את המספר 10, ובפעם השנייה 9
בריצה הראשונה קיבלתי 0, משום שכאשר מחלקים את המספר 10 ל-2, אין שארית.
בריצה השנייה, שבה הזנתי למשתנה tmp את הערך 9, קיבלתי 1, משום שכאשר מחלקים את 9 ב-2, מקבלים שארית 1.
מכאן אנחנו מבינים שאם השארית היא אפס, אז המספר הוא מספר זוגי.
אז אם זה כל כך טוב, למה זה כל כך רע?
נסו להריץ את הפונקציה על המספר 0.5 ותגלו שהשארית היא 0,
ואנחנו הרי מצפים לקבל שארית אפס, רק אם מדובר במספר זוגי, בעוד שהפונקציה מתייחסת רק לשלמים…
אם ככה, אנחנו ממשיכים לחפש.
שיטה שנייה – שימוש בפונקציות ISODD או ISEVEN
הפעם, נשתמש בפונקציות הגיליון isodd ו-iseven באופן הבא:
אז כשהזנתי לתוך המשתנה Tmp את הערך 10, קיבלתי False משום ש-10 הוא לא מספר אי זוגי.
כשהזנתי לתוכו את הערך 9 קיבלתי True, משום ש-9 הוא אכן אי זוגי.
אם אשתמש בפונקציה IsEven אקבל תוצאות הפוכות, כמובן.
אז הדרך הזאת נראית טובה, עד שאנחנו מבצעים גם כאן את הבדיקה על שבר, ומגלים שאנחנו נתקלים באותה הבעיה בדיוק.
שיטה שלישית – שימוש בפונקציה INT
אם כך, מה הפתרון?
נשתמש בפונקציה INT שיודעת להחזיר את השלמים מתוך מספר.
עכשיו ניזכר בשיעורי חשבון בבית הספר היסודי, שם למדנו שמספר זוגי הוא מספר שמתחלק ב-2 ללא שארית,
לכן אם אקח מספר ואחלק אותו בשתיים, לאחר מכן אשלוף ממנו את השלמים באמצעות הפונקציה INT
ואבדוק האם המספר החדש והשלם שקיבלתי שווה למספר לאחר החלוקה ב-2, אדע שמדובר במספר זוגי.
צילום המסך הבא יבהיר את הדברים:
בחלקו העליון תוכלו לראות את הטבלה, ובחלקו התחתון את הנוסחאות שרשומות בטבלה העליונה:
ואלה הנוסחאות מאחורי הקלעים:
בטבלה העליונה רשמתי בעמודה A ארבעה מספרים (1-4).
בעמודה B חילקתי את המספר ב-2
בעמודה C חילצתי את השלמים
בעמודה D ביצעתי את ההשוואה.
אנחנו יכולים לראות שבמספרים זוגיים החלוקה בשתיים וחישוב השלמים נותן את אותה התוצאה, ואילו במספרים אי זוגיים לא.
לכן, אנחנו יכולים להגיד שאם המספרים שווים, מדובר במספר זוגי.
אבל מה אם קיבלנו False, כלומר – המספרים אינם שווים?
כאן ייתכנו שני מצבים – מספר אי זוגי או שבר.
אז איך נדע?
נשווה בין המספר המקורי לתוצאה שמתקבלת על ידי שימוש ב INT.
הטבלה הבאה תעזור לכם להבין את הלוגיקה:
ואלה הנוסחאות מאחורי הקלעים: