תכנות - שיעור 21 4/December/2005    

הוצאת שורש

חזרנו לנושא הוצאת שורש ממספר, שהתחלנו בו בשעור 18 . הרחבנו קצת את הדיון. שמנו לב שאם lteq1.png אז

lteq2.png
ואם lteq3.png אז
lteq4.png

בכל מקרה אם lteq5.png אז

lteq6.png
לכן כך ניתן להשתמש באי-השויון האחרון, לחסמים התחלתיים.

שרשים מסדר כלשהו

שרש רבועי הוא למעשה פתרון של המשואה:

lteq7.png
אנו מעונינים לפתור גם משואות כמו
lteq8.png
כלומר לחשב את
lteq9.png
לשמחתנו, האלגוריתם שבתכנית יכול לעבוד אם רק נשנה מעט את החשוב הפנימי ובמקום lteq10.png נחשב את lteq11.png

החלק השלם של השורש

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

פתרונות לתרגילים קודמים

להלן פתרון למציאת gcd ו- lcm של מספר כלשהו של מספרים - תרגיל שניתן בשעור קודם.

תרגילים

  1. כתוב תכנית שמקבלת מספר ממשי lteq12.png ומספר שלם ולא שלילי lteq13.png ומחשבת ומדפיסה את
    lteq14.png

  2. תרגיל דומה, אלא שעתה גם a הינו שלם אי-שלילי, ואנו מעונינים רק בחלק השלם של השרש. הגדירו והשתמשו בפונקציה
    introot(a, n)
    ודאגו לכך שכל החישובים יהיו במספרים שלמים.
  3. כתבו תכנית ובה פונקציה שמקבלת מספר שלם כפרמטר
    isSquare(n)
    ומחזירה True אם יש למספר שורש רבועי שלם ומחזירה False אחרת. התכנית תקרא לפונציה עבור כל המספרים שנתנים בשורת הפקודה, ותדפיס את "פסק הדין".

חזרה לעמוד האם