» נושאי לימוד
» נושאי לימוד
יום ראשון 22 בדצמבר 2024
מיזוג קבצים
דף ראשי  פרק 5: אלגורתמי מיון בפסקל  מיון מיזוג  מיזוג קבצים גרסה להדפסה

מיזוג קבצים

 

דוגמא נוספת  לשימוש במיון מיזוג עם שימוש בקבצים

כתוב תוכנית הממזגת שני קבצים מסוג שלם הממוינים בסדר עולה.

 

פתרון:

 

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.

 

 02-03-04 / 11:37  עודכן ,  03-09-03 / 18:00  נוצר ע"י ליזי פרגו'ן  בתאריך 
 מיון מיזוג - הקודםהבא - פרק 6: מבחנים לדוגמא 
תגובות הקוראים    תגובות  -  0
דרכונט
מהי מערכת הדרכונט?
אינך מחובר, להתחברות:
דוא"ל
ססמא
נושאי לימוד
חיפוש  |  לא פועל
משלנו  |  לא פועל
גולשים מקוונים: 12