תכנות — שיעור 110 4/March/2010    

תחום מוגבל למספרים שלמים

במחשבים, מספרים שלמים מיוצגים בדרך כלל על ידי מספר סופי (32 או 64) של ביטים. במחשב עם מעבד של 32 ביטים, מספר שלם נמצא בתחום

lteq1.png
בפתרון fraction-v3.c לתרגיל fraction-v2.c משעור קודם יש כשלון בכמה בדיקות במקרים של מכנים "גדולים". לדוגמא, אם
lteq2.png
ואז, לפני צמצום
lteq3.png
והמכנה
lteq4.png
גדול ממה שמעבד של 32 ביט יכול להכיל.

מכנה משותף קטן ביותר

אבל, אפשר לחבר על ידי מכנה משותף קטן ביותר. כזכור
lteq5.png
ואז מרחיבים כל שבר לחוד בעזרת מכנה משותף ומחברים:
lteq6.png
והמעבד יתמודד בהצלחה עם כל המכנים.

GDB

בתהליך debug (חיפוש ותיקון טעויות בתוכנה), יש כלים שמסַיעים לניתוח פעילות התכנית. כלי מטיפוס כזה נקרא בשם debugger. ראינו את הכלי
gdb The GNU Project Debugger
אפשר להפעיל אותו ב"שורת פקודה" רגילה, ולהפעיל מתוכו פקודות רבות, פשוטות ומורכבות מאד. יש לכולן כמובן תיעוד מלא .

כדי להפיק מ gdb את מלוא יכולתו, חשוב ל"קַמְפֵּל" את התוכניות על ידי הוספת הַדֶּגֶל -g בהפעלת gcc. ישנם כלים גראפיים (נוחים לפי טעם אישי) שמתממשקים ל-gdb, לדוגמא: ddd   anjuta   ויש עוד המתוארים ברשימה .

אנו ראינו כיצד מפעילים את gdb מתוך- emacs על ידי הקשת M-x gdb

קריאה מקובץ וטעינה לרשומות

ניתחנו (גירסה דומה של) התכנית, pdb-read-v1.c שיכולה לקרוא את קֹבץ הנתונים: persons.db. (אגב, הפקתו של האחרון נעשתה בעזרת mk-person-db.py ).

תרגילים

  1. השלם ותקן תרגילים קודמים.
  2. קרא את הסיכום שלמעלה, וּבַקֵר בקישורים המוזכרים.
  3. הורד, והרץ את התכנית fraction-v3.c עם המקרה הבעייתי שמתואר למעלה.
    שפר את התכנית לגירסא fraction-v4.c כך שבפונקציות:
    fractions_add(...), fractions_subtract(...)
    המכנה המשותף הקטן ביותר יחושב ויושם לתוצאה מלכתחילה, עוד לפני הצמצום הסופי. ודא, שהמקרה ה"בעייתי" עובר את הבדיקות בהצלחה.
  4. צפה בסרטון: Using gdb within emacs .
  5. הורד את התכנית pdb-read-v1.c וקֹבץ הנתונים persons.db והרץ. שפר את התכנית לגירסא pdb-read-v2.c
  6. [רשות] למד לשיר את השיר The GDB Song .

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