2/11/2023, יום ה' (חוף, אשכול ב') - מחלקת Math

בכיתה
1. מחלקת Math
    מחלקת Math היא מחלקת שירות של #C בה קיימות פעולות בנושאים מתמטיים, וזאת כדי להקל עלינו  
    המתכנתים המשתמשים בפעולות המחלקה Math, כך שלא נצטרך לכתוב בעצמנו קוד המוצא את התשובה
    לאתגר המתמטי בו נתקלנו. 
    לדוגמה, קיבלנו שאלה המבקשת לקלוט את גילו של הסטודנט. אם נקלט גיל חיובי, נדפיס אותו. אם נקלט 
    גיל שלילי, נדפיס את הערך המוחלט שלו (את אותו הערך, רק בחיובי ולא בשלילי).
    במלים אחרות: עלינו להדפיס את הערך המוחלט של המשתנה age.
    אם נקלט הערך 16 נדפיס 16, ואם נקלט הערך 16- נדפיס 16. נוכל לכתוב קוד מלא בעצמנו:
    ;(" :Console.WriteLine("Enter your age
    ;(()int age = int.Parse(Console.ReadLine
    (if(age < 0
    }
    ;age = age * -1
    {
    ;(Console.WriteLine("Student age is: " + age * -1
    ומצד שני, נוכל להיעזר בספריית הפעולות המתמטיות הנמצאות במחלקת Math כך:
    ;(" :Console.WriteLine("Enter your age
    ;(()int age = int.Parse(Console.ReadLine
    ;(Console.WriteLine("Student age is: " + Math.Abs(age
2. מהו פרמטר
    את נושא זה לא למדנו בכיתה, למדו אותו באמצעות קריאת סעיף זה:
    פרמטר --> "ערך הנשלח לפעולה. כלומר, הערך שאנו כותבים בסוגריים של הפעולה".
    ובמלים אחרות: "ערך שאינו ידוע במסגרת הביטוי המסוים בו הוא מופיע". כלומר, כשאנו
    שולחים לפעולה משתנה כמו למשל ;(Console.WriteLine(age איננו יודעים את ערכו
    של המשתנה age בעת כתיבת התוכנית, ולכן נגיד "שלחנו את הפרמטר age לפעולה".
    דוגמאות:
    ;("Console.WriteLine("Hello World הפרמטר הוא "Hello World".
    ;(Math.Abs(-5 הפרמטר הוא הערך 5-.
    ;Math.Max(100, 200) הפרמטרים הם הערכים 100 ו- 200.
3. הפעולה Abs - מחזירה את הערך המוחלט
    דוגמה א':
    ;(int result = Math.Abs(-5
    ;(Console.WriteLine(result
    הפלט: 5
    דוגמה ב':
    ;((Console.WriteLine(Math.Abs(-5
    הפלט: 5
    בדוגמה א':  ראינו שהערך המוחזר מהפעולה Abs יכול להיקלט בצורה מסודרת לתוך משתנה
                     (ולהישמר במשתנה).
                     אנו יכולים להדפיס את הערך השמור במשתנה. הערך יודפס, ועדיין יישמר במשתנה,
                     כך שנוכל להשתמש בערך זה גם בהמשך התוכנית.
    בדוגמה ב':  הערך שמוחזר מהפעולה Abs יכול להיקלט ישירות לתוך הסוגריים של הפעולה WriteLine
                     (ואז בעת ריצת התוכנית להיות מודפס, אך לא להישמר לאחר שהודפס).
    דיון:           שאלה:  מתי נשמור ערך בצורה מסודרת לתוך משתנה, ורק אחר כך נדפיס אותו?
                     תשובה: כאשר נרצה להשתמש בערך זה בהמשך התוכנית, ולא להשתמש בו רק לצורך חד
                               פעמי של הדפסת ערכו באמצעות הפעולה WriteLine.
4. הפעולה Max מקבלת שני מספרים ומחזירה את הגדול מביניהם
    (המספר המתקבל כפרמטר יכול להיות שלם או ממשי)
    דוגמאות:
    ;(int res = Math.Max(-5, 14 הערך שייקלט למשתנה res הוא 14.
    ;(res = Math.Max(5, 6 הערך שייקלט למשתנה res הוא 6.
    ;((res = Math.Max(7, Math.Abs(-20 הערך שייקלט למשתנה res הוא 20.
3. הפעולה Min מקבלת שני מספרים ומחזירה את הקטן מביניהם
    דוגמאות:
    ;(int x = Math.Min(0, -1 הערך שייקלט למשתנה x הוא 1-.
4. הפעולה Floor מקבלת מספר ומחזירה את המספר השלם שערכו קטן מהמספר שהתקבל
    דוגמאות:
    ;(Math.Floor(3 הערך שיוחזר הוא 3.
    ;(Math.Floor(3.9 הערך שיוחזר הוא 3. שימו לב: לא מדובר כאן בעיגול המספר לפי החוקים
    המתמטיים, אלה בהחזרת המספר השלם הקרוב ביותר הנמצא מתחת לערך שנשלח לפעולה.
    ;(Math.Floor(3.1 הערך שיוחזר הוא 3.
    ;(Math.Floor(-4.9 הערך שיוחזר הוא 5-.
    ;(Math.Floor(-4.1 הערך שיוחזר הוא 5-.
5. הפעולה Sqrt מקבלת מספר ומחזירה את השורש החיובי שלו
    דוגמאות:
    ;(Math.Sqrt(100 הערך שיוחזר הוא 10.
    ;(Math.Sqrt(25 הערך שיוחזר הוא 25.
    ;(Math.Sqrt(2 הערך שיוחזר הוא 1.4142.
    ;(100-)Math.Sqrt הערך שיוחזר הוא NaN (שמשמעותו Not a Number).    
    ;(25-)answer = Math.Sqrt 
    ;(Console.WriteLine(answer יודפס NaN.
    דיון:
    א. מדוע הוחזר NaN? כיוון שאין ערך ריבועי למספרים שליליים.
    ב. מדוע ;int answer = Math.Sqrt(100) מחזיר שגיאה תחבירית (שגיאת Syntax)?
        כיוון שהפעולה Sqrt תמיד מחזירה ערך ממשי (double), גם אם התקבל בסוגריים מספר שלם.
        ולכן היה עלינו לכתוב:
;(100)double answer = Math.Sqrt.
        קראו לעומק את הכתוב בטבלת הפונקציות (פעולות) השכיחות בספריה Math ב- #C בעמ' 100,
        וכך, במקרה של שגיאה, תבינו את הסיבה לה.
6. הפעולה Round מקבלת מספר ומחזירה את העיגול שלו
    דוגמאות:
    ;(Math.Round(13.3 הערך שיוחזר הוא 13.
    ;(Math.Round(13.6 הערך שיוחזר הוא 14.
    ;(Math.Round(13.5 הערך שיוחזר הוא 14.
    ;(Math.Round(-13.3 הערך שיוחזר הוא 13-.
    ;(Math.Round(-13.9 הערך שיוחזר הוא 14-.
7. הפעולה Pow מקבלת מספר ומחזירה ערך ממשי (double) של הערך שהתקבל בריבוע
    בדקו פעולה זו בעצמכם עם מגוון ערכי פרמטרים מייצגים (כמו בסעיף 6).        

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

התכוננו למבדק שיעורי בית שיהיה ביום ב' הקרוב בנושאים הבאים
1. קראו מהו תנאי מקונן בעמודים 82-83.
2. בצעו תרגילים 36-39 בנושא תנאי מקונן בעמ' 84.
3. תרגלו בעצמכם את כל הפעולות של מחלקת Math כמופיע בעמ' 100, והיו
    מוכנים לשאלות בנושא.
    דוגמה לשאלות שיכולות להיות במבדק שיעורי הבית בנושא זה:
    א. הדפיסו את ערכו הריבועי של המספר 9 (יודפס 81) תשובה: ;((Console.WriteLine(Pow(9
    ב. לפניכם שורת קוד: ;(int result = Round(3.9
        1) במידה ואין שגיאה, מה יהיה הפלט?
        2) במידה ויש שגיאה, הסבירו מה סוג השגיאה, מה גרם לה ומה צריך לתקן בקוד.
     
תשובה 
      סוג השגיאה:     מדובר בשגיאה תחבירית (קו אדום מסולסל). 
      מה גרם לה:      לא ניתן לשמור ערך המוחזר מהפעולה Round בתוך משתנה מטיפוס שלם (int),
                            אלא רק במשתנה מטיפוס ממשי (double).
      התיקון הנדרש: ;(double result = Round(3.9
    ג. לפניכם שורת קוד: ;(double res = Round(3
        1) במידה ואין שגיאה, מה יהיה הפלט?
        2) במידה ויש שגיאה, הסבירו מה סוג השגיאה, מה גרם לה, ומה צריך לתקן בקוד.
   ד. הדפיסו את הערך השלם שמעל למספר 3.3.
   ה. הדפיסו את הערך השלם שמעל למספר השמור במשתנה הממשי x.
   ו. הדפיסו את הערכים הגדולים מבין זוגות המספרים הבאים:
      1) 5 מול 6.
      2) הערך המוחלט של x מול הערך המוחלט של y (הניחו כי משתנים אלה קיימים בקוד).
      3) עיגול המספר 9.9 מול עיגול המספר 10.4.
      4) ערכו הריבועי של המספר 10 מול שורש המספר 1,000.
       
בשיעורים הבאים
1. אופרטורים מיוחדים (קיצורי דרך בחישובי + - * /).
2. טיפים (נעשה שיעור טיפים בקרוב).
3. מהו קבוע.
4. מחלקת Random.