מיזוג קבצים
דוגמא נוספת לשימוש במיון מיזוג עם שימוש בקבצים
כתוב תוכנית הממזגת שני קבצים מסוג שלם הממוינים בסדר עולה.
פתרון:
program MERGER; { תוכנית למיזוג שני קבצים} type FILE_TYPE=file of integer ; (* הצהרה על סוג הקובץ *) LONG_STRING=string[255]; (* המחרוזת הארוכה ביותר *) var FA, FB: FILE_TYPE; (* הקבצים אותם צריך למזג *) FC:FILE_TYPE; (* הקובץ הממוזג בסוף *) ST:LONG_STRING; (* מחרוזת לקליטת שמות הקבצים על הדיסקט *) END_MERGER: Boolean; (* סיום במיזוג *) FA_NUM, FB_NUM : integer; (* הערכים הנקראים מהקבצים *) procedure INIT_FILES; { תת תוכנית לאתחול, פתיחת הקבצים וקישורם לשמות בתוכנית } begin write (' הקש שם הקובץ הראשון למיזוג: ' ); readln (ST); assign (FA,ST); write (' הקש שם הקובץ השני למיזוג:'); readln (ST); assign (FB,ST); write (' הקש שם הקובץ הממזג את שני הקבצים: '); readln (ST); assign (FC,ST); reset (FA); reset (FB); rewrite(FC); end; procedure WRITE_ALL (var FC, var FILE_A_OR_B: FILE_TYPE); { FC לקובץ FB או FA תת-תוכנית לכתיבת שארית הקובץ } (* var FC הקובץ הממוזג - *) (* var FILE_A_OR_B – אחד מן הקבצים *) var INPUT_NUMBER: integer; (* B או A, קריאת ערך מהקבצים למיזוג*) begin (* כל עוד לא הסתיים הקובץ *) while not (eof (FILE_A_OR_B)) do begin read (FILE_A_OR_B, INPUT_NUMBER); (* קרא ערך*) write (FC, INPUT_NUMBER); (* וכתוב אותו לקובץ הממוזג *) end; end; (********התוכנית הראשית**********) begin END_MERGER:=false; (* עדיין לא הסתיים המיזוג *) if eof(FA) then (* אם אין ערכים בקובץ הראשון *) begin WRITE_ALL(FC,FB); (* העתק את כל הקובץ השני לקובץ הממזג*) END_MERGER:= true; (* והמיזוג הסתיים *) end; { אם אין ערכים בקובץ השני לא הסתיים המיזוג } if (eof(FB) and (not END_MERGER)) then begin WRITE_ALL (FC,FA);(*העתק את כל הקובץ הראשון לקובץ הממזג*) END_MERGER:= true; (* והמיזוג הסתיים *) end; if not END_MERGER then (* אם לא הסתיים המיזוג *) begin read (FA, FA_NUM); (* קרא ערך מהקובץ הראשון *) read (FB, FB_NUM); (* וערך מהקובץ השני *) end; while (not END_MERGER) do (* כל עוד לא הסתיים המיזוג –מזג *) begin {אם הערך מהקובץ הראשון קטן מהערך בקובץ השני } if FA_NUM < FB_NUM then begin write (FC, FA_NUM); (* רשום הערך לקובץ הממזג *) { אם יש עוד ערכים בקובץ הראשון קרא ערך } if (not (eof(FA))) then read (FA, FA_NUM) else {אחרת, העתק את כל שארית הקובץ השני לקובץ הממזג} begin { לפני-כן,רשום את הערך שכבר קראת} write (FC, FB_NUM); WRITE_ALL(FC,FB); END_MERGER:=true; end; end else { אחרת, אם הערך מהקובץ השני קטן יותר } begin write (FC, FB_NUM); (* רשום אותו לקובץ הממוזג*) { אם יש עוד ערכים בקובץ השני קרא ערך } if (not (eof (FB))) then read (FB, FB_NUM) else {אחרת, העתק את כל שארית הקובץ הראשון לקובץ הממזג} begin { לפני כן, רשום את הערך שכבר קראת} write (FC, FA_NUM); WRITE_ALL(FC,FA); END_MERGER:=true; end; end; end; { סגור את כל הקבצים } close (FA); close (FB); close (FC); end.