Объединить файлы в новый файл, сохранив упорядоченность элементов - Turbo Pascal

Узнай цену своей работы

Формулировка задачи:

ДАны 2 файла целых чисел с именами Name1 и Name2, элементы которых упорядоченны по возростанию. Объеденить эти файлы в новый файл с именем Name3, сохранив упорядоченность элементов.

Решение задачи: «Объединить файлы в новый файл, сохранив упорядоченность элементов»

textual
Листинг программы
const
  Name1 = 'dat1.dat';
  Name2 = 'dat2.dat';
  Name3 = 'dat3.dat';
  
procedure CreateFile(Size, minVal, maxVal : Integer; Name : String);
var
  F : File of Integer;
  A : array [0..1000] of Boolean;
  i, N : Integer;
begin
  for N := 0 to 1000 do A[N] := False;
  repeat
    N := Random(maxVal - minVal + 1) + minVal;
    if Not A[i] then
      begin
        Dec(Size);
        A[N] := True;
      end;
  until Size = 0;
  Assign(F, Name); Rewrite(F); for i := 0 to 1000 do if A[i] then Write(F, i); Close(F);
end;
 
procedure OutFile(Msg, Name : String);
var
  F : File of Integer;
  N : Integer;
begin
  Write(Msg, #32, Name, ':');
  Assign(F, Name); Reset(F); while Not EOF(F) do begin Read(F, N); Write(#32, N); end; Close(F);
  WriteLn;
end;
 
var
  F1, F2, F3 : File of Integer;
  S1, S2 : Integer;
  N1, N2 : Integer;
begin
  Randomize;
  CreateFile(10, 10, 99, Name1); OutFile('Создан файл', Name1);
  CreateFile(10, 10, 99, Name2); OutFile('Создан файл', Name2);
  /// Объединение файлов ///
  Assign(F1, Name1); Reset(F1); S1 := FileSize(F1);
  Assign(F2, Name2); Reset(F2); S2 := FileSize(F2);
  Assign(F3, Name3); Rewrite(F3);
  Read(F1, N1); S1 -= 1;
  Read(F2, N2); S2 -= 1;
  repeat
    if N1 < N2 then
      begin
        if S1 > 0 then
          begin Write(F3, N1); Read(F1, N1); S1 -= 1; end
        else
          begin Write(F3, N1); N1 := MaxInt; end;
      end
    else
      begin
        if S2 > 0 then
          begin Write(F3, N2); Read(F2, N2); S2 -= 1; end
        else
          begin Write(F3, N2); N2 := MaxInt; end;
      end;
  until (N1 = MaxInt) and (N2 = MaxInt);
  Close(F1); Close(F2); Close(F3); OutFile('Создан файл', Name3);
end.

Объяснение кода листинга программы

const Name1 = 'dat1.dat'; Name2 = 'dat2.dat'; Name3 = 'dat3.dat'; procedure CreateFile(Size: Integer; minVal: Integer; maxVal: Integer; Name: String); var F: File of Integer; A: array [0..1000] of Boolean; i, N: Integer; begin for N := 0 to 1000 do A[N] := False; repeat N := Random(maxVal — minVal + 1) + minVal; if Not A[i] then begin Dec(Size); A[N] := True; end; until Size = 0; Assign(F, Name); Rewrite(F); for i := 0 to 1000 do if A[i] then Write(F, i); Close(F); end; procedure OutFile(Msg: String; Name: String); var F: File of Integer; N: Integer; begin Write(Msg, #32, Name, ':'); Assign(F, Name); Reset(F); while Not EOF(F) do begin Read(F, N); Write(#32, N); end; Close(F); end; var F1, F2, F3: File of Integer; S1, S2: Integer; N1, N2: Integer; begin Randomize; CreateFile(10, 10, 99, Name1); OutFile('Создан файл', Name1); CreateFile(10, 10, 99, Name2); OutFile('Создан файл', Name2); // Объединение файлов // Assign(F1, Name1); Reset(F1); S1 := FileSize(F1); Assign(F2, Name2); Reset(F2); S2 := FileSize(F2); Assign(F3, Name3); Rewrite(F3); Read(F1, N1); S1 -= 1; Read(F2, N2); S2 -= 1; repeat if N1 < N2 then begin if S1 > 0 then begin Write(F3, N1); Read(F1, N1); S1 -= 1; end else begin Write(F3, N1); N1 := MaxInt; end; end else begin if S2 > 0 then begin Write(F3, N2); Read(F2, N2); S2 -= 1; end else begin Write(F3, N2); N2 := MaxInt; end; end; until (N1 = MaxInt) and (N2 = MaxInt); Close(F1); Close(F2); Close(F3); OutFile('Создан файл', Name3); end;

Оцени полезность:

15   голосов , оценка 3.733 из 5
Похожие ответы