תכנות — שיעור 32 23/October/2007    

מציאת שורש ריבועי

תיארנו כיצד אפשר למצוא שורש רבועי. בספריית פיתון קימת הפונקציה math.sqrt למרות זאת אנו רוצים לראות כיצד למצוא את השורש בעזרת פעולות חשבון בסיסיות. דיברנו על ההבדל החשוב בין מספרים שלמים למספרים מטיפוס float (נקודה צפה) שיכולים לכלול גם שברים. בפייתון אפשר להפוך מחרוזת או מספר שלם על ידי הפונקציה float. לדוגמא:

x = float(sys.argv[1])

הופך פרמטר ראשון של התכנית למספר מטיפוס float.

קירוב על ידי חסמים

קל לראות שאם

lteq1.png
אז
lteq2.png
לכן יש לנו חסמים, תחתון ועליון
lteq3.png
עבור השורש. נחפש את האמצע בין החסמים, כלומר את הממוצע :
lteq4.png
נבדוק אם הוא השורש. אם לא אז הוא יחליף את החסם המתאים. אם נמשיך כך, החסמים מתקרבים זה אל זה ואל השורש.

תרגילים

קודמים

תוכלו להוריד פתרון של שעור קודם .

חדשים

  1. עבור על פתרון הדוגמא . קרא את כל ההערות, והבן את התכנית.
  2. כתוב תכנית sqrtiter.py. התכנית מקבלת שני מספרים משורות הפקודה, הראשון מספר float והשני שלם. כלומר
    ./sqrtiter.py x n
    ואז התכנית תתקרב לשורש של x, כלומר ל lteq5.png ומדפיסה n זוגות של חסמים. לדוגמא:
    yotam@durini:l33:778> ./sqrtiter.py 100 9
    Iteration[ 1]  m = 0.000000  <=  r  <=  M = 101.000000
    Iteration[ 2]  m = 0.000000  <=  r  <=  M = 50.500000
    Iteration[ 3]  m = 0.000000  <=  r  <=  M = 25.250000
    Iteration[ 4]  m = 0.000000  <=  r  <=  M = 12.625000
    Iteration[ 5]  m = 6.312500  <=  r  <=  M = 12.625000
    Iteration[ 6]  m = 9.468750  <=  r  <=  M = 12.625000
    Iteration[ 7]  m = 9.468750  <=  r  <=  M = 11.046875
    Iteration[ 8]  m = 9.468750  <=  r  <=  M = 10.257812
    Iteration[ 9]  m = 9.863281  <=  r  <=  M = 10.257812
    

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