ABA


"שאלה לכל המומחים ב- C/C++ - זיהוי סוף קובץ"
גירסת הדפסה        
קבוצות דיון פיתוח, תיכנות ובניית אתרים נושא #13377 מנהל    סגן המנהל    מפקח   Winner    צל"ש   מומחה  
אשכול מספר 13377
chenke 
חבר מתאריך 1.7.02
730 הודעות
   15:30   09.06.06   
אל הפורום  
  שאלה לכל המומחים ב- C/C++ - זיהוי סוף קובץ  
 
   שלום חברים,

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

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

אני יודע שזה עבודה לא מבוטלת לעשות את זה אבל מועד ההגשה של התרגיל מאוד קרוב (יום שני),
ואני ממש שובר את הראש לגבי מה לא בסדר, אז משהוא יכול לאתר את הבעייה?

תודה מראש חן.

http://www.mytempdir.com/727056


                                שתף        
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד

  האשכול     מחבר     תאריך כתיבה     מספר  
  ניסית להשתמש ב DviR_ 10.06.06 05:16 1
     הלולאה משתמשת בפונקציה feof(), בתור תנאי יציאה chenke  10.06.06 07:31 2
         אחי DviR_ 10.06.06 14:29 3

       
DviR_

   05:16   10.06.06   
אל הפורום  
  1. ניסית להשתמש ב  
בתגובה להודעה מספר 0
 
   EOF?

תנסה להשוות את זה לערך של זה... בלולאות שלך וברגע שזה נכון (True)

צא מהלופ

יענו

do
}
כאן הקוד נגיד
while(rc!=EOF){

אם אתה יודע למה אני מתכוון זה אמור להיות קל
הEOF
כלולל בסיפרית ה
stdio.h


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
chenke 
חבר מתאריך 1.7.02
730 הודעות
   07:31   10.06.06   
אל הפורום  
  2. הלולאה משתמשת בפונקציה feof(), בתור תנאי יציאה  
בתגובה להודעה מספר 1
 
   הקובץ שאני עובר עליו הוא בינארי ולכן לא מתאים לו שימוש בקבוע EOF


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
DviR_

   14:29   10.06.06   
אל הפורום  
  3. אחי  
בתגובה להודעה מספר 2
 
   אני לא חושב שזה צריך לשנות בינארי או לא בינארי שזה מגיע לסוף הקובץ זה יחזיק -1 כי אין מידע לקרוא יותר

אבל אולי יש משהו במה שאתה אומר...
אם זה לא זה אני אחשוב על פיתרון אחר
אבל אני עף לישון בנתיים


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד

תגובה מהירה  למכתב מספר: 
 
___________________________________________________________________

___________________________________________________________________
למנהלים:  נעל | תייק בארכיון | מחק | העבר לפורום אחר | מחק תגובות | עגן אשכול
       



© כל הזכויות שמורות ל-רוטר.נט בע"מ rotter.net