תכנות
—
שיעור 110
4/March/2010
תחום מוגבל למספרים שלמים
במחשבים, מספרים שלמים מיוצגים בדרך כלל
על ידי מספר סופי (32 או 64) של ביטים. במחשב עם מעבד של 32 ביטים, מספר שלם נמצא בתחום
בפתרון
fraction-v3.c
לתרגיל
fraction-v2.c
משעור קודם
יש כשלון בכמה בדיקות במקרים של מכנים "גדולים".
לדוגמא, אם
ואז, לפני צמצום
והמכנה
גדול ממה שמעבד של 32 ביט יכול להכיל.
מכנה משותף קטן ביותר
אבל, אפשר לחבר על ידי מכנה משותף קטן ביותר. כזכור
ואז מרחיבים כל שבר לחוד בעזרת מכנה משותף ומחברים:
והמעבד יתמודד בהצלחה עם כל המכנים.
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
).
תרגילים
-
השלם ותקן תרגילים קודמים.
-
קרא את הסיכום שלמעלה, וּבַקֵר בקישורים המוזכרים.
-
הורד, והרץ את התכנית
fraction-v3.c
עם המקרה הבעייתי שמתואר למעלה.
שפר את התכנית לגירסא
fraction-v4.c
כך שבפונקציות:
fractions_add(...), fractions_subtract(...)
המכנה המשותף הקטן ביותר יחושב ויושם לתוצאה מלכתחילה, עוד לפני הצמצום הסופי.
ודא, שהמקרה ה"בעייתי" עובר את הבדיקות בהצלחה.
-
צפה בסרטון:
Using gdb within emacs
.
-
הורד את התכנית
pdb-read-v1.c
וקֹבץ הנתונים
persons.db
והרץ.
שפר את התכנית לגירסא
pdb-read-v2.c
-
התכנית תתעלם משורות בקֹבץ הנתונים שמתחילות בסימן #.
-
התוצאה תמוין לפי numeric_id.
-
[רשות] למד לשיר את השיר
The GDB Song
.
חזרה לעמוד האם