20-21.2.23 ימים ב' ו- ג', (חוף, אשכול ב' ) - IsPalindrome, Convert, IsArmstrong, פעולות-עזר, החזרת ביטוי בוליאני

בכיתה 
1. פתרון משותף של תרגילי הבית + מענה על שאלות
    א. הפעולה IsPalindrome.
    ב. הפעולה Convert.
    ג. הפעולה IsArmstrong.
2. פעולות עזר
    לעיתים נחשוב שכדאי לנו לכתוב פעולות עזר לצורך השלמת המשימה של כתיבת הפעולה המרכזית.
    הפעולה המרכזית היא הפעולה אותה התבקשנו לכתוב בתרגיל שקיבלנו.
    להלן הסיבות מדוע בעת כתיבת פעולה, יתכן ונרצה שאת חלקה תבצע פעולת עזר אחת או יותר:
   
א. לכל פעולה מטרה ספציפית
        למדנו שעל כל פעולה לבצע משימה מוגדרת וספציפית אחת.
   
ב. קלות ותקינות
        כאשר מפצלים את אלגוריתם הפעולה לכמה פעולות, כל פעולה המרכיבה את הפתרון
        קטנה יותר וברורה יותר - הן לצורך כתיבתה והן לצורך קריאתה וביצוע שינויים בה.
        פעולה קטנה יותר קלה יותר לכתיבה וקל לבדוק שהיא אכן תקינה ומחזירה בכל מצב תשובה נכונה.
        פעולה גדולה, המבצעת כמה משימות שונות, יתכן ותחזיר ערך נכון בחלק מהמקרים, וערך שגוי
        בחלק אחר של המקרים. ייקח לנו זמן רב, ויהיה לנו קשה יותר לפענח ולמצוא את סיבת השגיאה.        
   
ג. שימוש עתידי
        כאשר אנו כותבים פעולות קטנות, קיים סיכוי שנוכל להיעזר בחלקן בעתיד לצורך פתרונות
        אלגוריתמיים שנקבל.
        דוגמה כיתתית:
        לצורך כתיבת הפעולה המרכזית IsPalindrome המקבלת מספר שלם ומחזירה תשובה
        בוליאנית האם הוא פלינדרום, הוחלט בכיתה ליצור מערך בגודל כמות ספרות המספר, ולהציב
        לתוכו את ספרות המספר. לכל תא במערך ספרה אחת מספרות המספר.
        הסיבה לכך הייתה הסברה שלנו כמתכנתי הפעולה, שקל יותר להחזיר תשובה בוליאנית האם מערך
        שלמים הוא פלינדרום מאשר האם מספר שלם הוא פלינדרום.
        מדוע זה רלוונטי? כיוון שאם המערך הוא פלינדרום, הרי שהמספר טרם המרתו למערך הוא פלינדרום.
        לצורך כך, כתבנו פעולת עזר CountDigits המקבלת מספר שלם ומחזירה את כמות ספרותיו.
        כך ידענו מהו גודל המערך שאנו יוצרים במסגרת בלוק הפקודות של הפעולה.
        שימוש עתידי:
        יתכן ובהמשך נתבקש לפתור תרגיל אחר, לכתוב פעולה DiffDigits המקבלת שני מספרים שלמים
        ומחזירה את הפרש הספרות מהן מורכב כל אחד מהמספרים.
        לדוגמה, אם המספר הראשון הוא 123 והמספר השני הוא 987675, הרי שהפעולה תחזיר את הערך 3, 
        שהוא הפרש הספרות מהן מורכב כל אחד משני המספרים. 
        שימוש בפעולת העזר CountDigits יעזור מאד לצורך כתיבת קוד הפעולה DiffDigits.
3. החזרת ביטוי בוליאני:
    נניח שאנו רוצים להחזיר true אם כמות ספרות המספר היא 5 ומעלה.
    נוכל לכתוב כך:
            (if(CountDigits(num) >= 5
                       ;return true
                                   ;return false
    או כך:
    ;return CountDigits(num) >= 5
לבית 
*** להכנה עד ליום ב' הבא, ה- 27.2.2023,
     בו יהיה מבדק ש.ב
 על 3 הפעולות א'-ג' שלהלן: ***
1בונבוניירת פעולות על מערכים:
    א. כתבו פעולה IsSortedAny המקבלת כפרמטר מערך שלמים ומחזירה true אם הוא ממויין בסדר
        כלשהו (עולה או יורד), אחרת - false. לדוגמה, אם הפעולה תקבל את המערכים הבאים:
        * 4 ,2, 0, 3- <-- יוחזר true.
        * 4 , 7, 11, 35, 44 <-- יוחזר true.
        * 8 , 7, 9, 11 <-- יוחזר false.
    ב. כתבו פעולה IsCharSeven המקבלת מערך תווים. אם מתקיימים יחדיו שני התנאים הבאים:
        1) גודל המערך הוא 7.
        2) קיים איפשהו במערך רצף התווים 'a', 'b', 'c' (משמאל לימין).
        יודפסו הדברים הבאים:
        1) "Super-7-char-array".
        2) יודפס המערך בסדר הפוך ובשורה אחת.
        אם מתקיים רק תנאי אחד או אם לא מתקיים אף תנאי, יודפס: "NOT-Super-7-char-array".
        לדוגמה:
        אם התקבל כפרמטר מערך התווים הבא: 'm' ,'a, 'b', 'c' <--,
        הרי שיודפס:
        Super-7-char-array
        c, b, a, m (משמאל לימין).
        אם התקבל כפרמטר מערך התווים הבא: 'a', 'c', 'm', 'b' <--,
        הרי שיודפס:
        NOT-Super-7-char-array.
     ג. כתבו פעולה MoveElementsRight המקבלת כפרמטר מערך שלמים.
         הפעולה מזיזה את כל ערכי המערך תא אחד ימינה, כאשר ערכו של האיבר האחרון עובר
         למקום הראשון. לדוגמה:
        אם התקבל כפרמטר המערך הבא: 5 ,4 ,3 ,2 ,1 <--,
        הרי שבסיום ביצוע הפעולה המערך ייראה כך: 4 ,3 ,2 ,1 ,5 <--. 
    * השאלות בסעיפים ד' - ו' הן שאלות רשות בשלב זה. בהמשך הן תהפוכנה לשאלות חובה *
    ד. *רשות* כתבו פעולה Fibonacci10 המחזירה מערך שלמים בגודל 10 עם איברי פיבונאצ'י הראשונים.
        סדרת פיבונאצ'י היא סדרה ששני איבריה הראשונים הם 1 ,1, וכל איבר לאחר מכן שווה לסכום שני
        קודמיו. בהתאם לכך, 10 איבריה הראשונים של הסדרה הם:
        55 ,34 ,21 ,13 ,8 ,5 ,3 ,2 ,1 ,1 <--
        על הפעולה ליצור מערך שלמים בגודל 10, ובאמצעות לולאת חישוב להשים במערך את 10 האיברים
        הראשונים של הסדרה, ולהחזיר את המערך.
    ה. *רשות* כתבו פעולה FibonacciX המקבלת כפרמטר מספר שלם.
        הפעולה מחזירה מערך בגודל X (המספר שהתקבל) עם X האיברים הראשונים של הסדרה.
        לדוגמה, אם הפעולה זומנה עם ערך הפרמטר 12, יוחזר המערך הבא:
         144 ,89 ,55 ,34 ,21 ,13 ,8 ,5 ,3 ,2 ,1 ,1 <--.
    ו. *רשות* כתבו פעולה PrintRand15 המציבה מספרים אקראיים בטווח שבין 0 ל- 5 במערך שלמים
        בגודל 15.
        1) הפעולה תדפיס את המערך השלמים.
        2) הפעולה תדפיס מערך נוסף בגודל 15, לאחר שכל האפסים מהמערך המקורי הועברו לסופו.
        לדוגמה, אם הוגרלו למערך המספרים הבאים:
        1 ,2 ,3 ,4 ,5 ,0 ,1 ,3 ,0 ,5 ,4 ,5 ,2 ,0 ,1 <--.
        הרי שתודפסנה שתי השורות שלהלן:
        1 ,2 ,3 ,4 ,5 ,0 ,1 ,3 ,0 ,5 ,4 ,5 ,2 ,0 ,1 <--.
        0 ,0 ,0 ,1 ,2 ,3 ,4 ,5 ,1 ,3 ,5 ,4 ,5 ,2 ,1 <--.

בשיעורים הבאים
1. מערך שלמים
    תרגול, תרגול, תרגול.
1. מערך ממשיים, תווים, בוליאני, מחרוזתי
    תרגול, תרגול, תרגול.
2. אלגוריתמיקה - 'השלבים בפתרון בעיה'
    מדוע כדאי ליישמם כבר בשלב הזה
    השלבים:
     א. הבנת הבעיה.
     ב. הצבת ערכים לווידוא הבנת הבעיה.
     ג. זיהוי ואפיון הנתונים: קלט / חישוב / פלט.
     ד. ציור תרשים זרימה.
     ה. פירוט אסטרטגיית הפתרון בעברית, אותה מתרגמים לקוד התכנותי.