שלום חברים,מצטער מראש שזה קצת ארוך:
אני צריך לכתוב תוכנית במסגרת קורס שאני לוקח שממשת מיון-מיזוג חיצוני. הרעיון של מיון- מיזוג חיצוני הוא
שקיים קובץ במבנה טבלאי שאותו מעוניינים למיין, כמו כן קיימים מספר חוצצים בזיכרון המחשב שכל חוצץ
יכול להכיל מספר רשומות מהקובץ.
מה שמיון-מיזוג עושה הוא שבשלב ראשון הוא טוען מספר רשומות מהקובץ (בהתאם למספר החוצצים ולמספר
הרשומות שכל חוצץ יכול להכיל), ממיין רשומות אלה וכותב אותן בחזרה לקובץ במקום המקורי שלהן, אחרי
זה הוא טוען את הרשומות הבאות (שוב באותה כמות), ומבצע אלהן את אותה פעולה, כך הוא פועל עד שכל
הרשומות בקובץ מיונו לפי קבוצות. למי שלא הבין, אז אם קיימים 5 חוצצים וכל חוצץ יכול להכיל 10 רשומות,
אז בשלב הראשון הוא טוען קבוצות של 50 רשומות ואחרי זה ממיין אותן וכותב אותן בחזרה לדיסק.
בשלבים הבאים קיים תהליך של מיזוז בין הקבוצות שנוצרו בשלב הראשון.
אני מימשתי את כל השלב הראשון של המיון-מיזוג בצורה הבאה: ראשית קובץ הנתונים שלי הוא קובץ בינארי
שמכיל בהתחלה מידע על השדות שמרכיבים את הרשומות (מספר השדות וגודל של כל שדה), ולאחר מכן את
התוכן של כל השדות בקובץ.
יש לי מבנה שמייצג שדה, יש לי ווקטור שמייצג קבוצה של שדות (רשומה), יש לי ווקטור שמייצג קבוצה של
רשומות ווקטור שמכיל מידע על השדות השונים (גודלם).
עכשיו אני מגיע לבעייה שלי: בפונקציה שממשת את המיון מיזוג קיימת לולאה רשאית שרצה כל עוד לא
הגענו לסוף הקובץ ולולאה פנימית שרצה גם כל עוד לא הגענו לסוף הקובץ ולא טענו את כל הרשומות
שנכנסות בחוצצים. הבעייה היא שהוא לא מזהה אף פעם הגעה לסוף הקובץ והלולאה הראשית רצה עד
אין-סוף , תוך כדי כך שהיא מנפחת את קובץ הנתונים.
אני יודע שזה עבודה לא מבוטלת לעשות את זה אבל מועד ההגשה של התרגיל מאוד קרוב (יום שני),
ואני ממש שובר את הראש לגבי מה לא בסדר, אז משהוא יכול לאתר את הבעייה?
תודה מראש חן.
http://www.mytempdir.com/727056