Показать сообщение отдельно
  #12  
Старый 14.12.2010, 00:07
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,100
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

какую-то фигню ты написал.
у меня получилось что-то вот такое (это если по простому):
Код:
program Project1;

{$APPTYPE CONSOLE}

uses
  SysUtils;

type
  TStud = record
    Name : String[20];
    Year : Integer;
  end;

var
  A : Array Of TStud;
  A1, A2 : Array Of TStud;

procedure ReadFile1(AFileName : String);
var
  F : File Of TStud;
begin
  SetLength(A1,0);
  If FileExists(AFileName) Then
    Begin
      AssignFile(F,AFileName);
      Reset(F);
      While Not EOF(F) Do
        Begin
          SetLength(A1,Length(A1)+1);
          Read(F,a1[High(A1)]);
        End;
      CloseFile(F);
    End;
end;

procedure ReadFile2(AFileName : String);
var
  F : File Of TStud;
begin
  SetLength(A2,0);
  If FileExists(AFileName) Then
    Begin
      AssignFile(F,AFileName);
      Reset(F);
      While Not EOF(F) Do
        Begin
          SetLength(A2,Length(A2)+1);
          Read(F,A2[High(A1)]);
        End;
      CloseFile(F);
    End;
end;

procedure TypeArray(AA : Array Of TStud);
var
  I : Integer;
begin
  For I := Low(AA) To High(AA) Do
    WriteLn(AA[i].Year,' ',AA[i].Name);
end;

procedure Swap(AA : Array Of TStud; I, J : Integer);
var
  T : TStud;
begin
  T := AA[i];
  AA[i] := AA[J];
  AA[J] := T;
end;

procedure SortArray(AA : Array Of TStud);
var
  I, J : Integer;
begin
  For I := Low(AA) To High(AA)-1 Do
    For J := I+1 To High(AA) Do
      If AA[i].Year = AA[J].Year
        Then
          Begin
            If AA[i].Name > AA[J].Name Then Swap(AA,I,J);
          End
        Else
          If AA[i].Year > AA[J].Year Then Swap(AA,I,J);
end;

function IsExists(T : TStud; AA : Array Of TStud) : Boolean;
var
  I : Integer;
begin
  Result := False;
  For I := Low(AA) To High(AA) Do
    If (AA[i].Year = T.Year) And (AA[i].Name = T.Name) Then
      Begin
        Result := True;
        Break;
      End;
end;

procedure ComposeIntoResult(AA : Array Of TStud);
var
  I : Integer;
begin
  For I := Low(AA) To High(AA) Do
    If Not IsExists(AA[i],A) Then
      Begin
        SetLength(A,Length(A)+1);
        A[High(A)] := AA[i];
      End;
end;

procedure WriteFile(AFileName : String; AA : Array Of TStud);
var
  I : Integer;
  F : File Of TStud;
begin
  AssignFile(F,AFileName);
  Rewrite(F);
  For I := Low(AA) To High(AA) Do
    Write(F,AA[i]);
  CloseFile(F)
end;

begin
  ReadFile1('In1.dat');
  ReadFile2('In2.dat');

  WriteLn('--- File 1 ---');
  TypeArray(A1);
  WriteLn;

  WriteLn('--- File 2 ---');
  TypeArray(A2);
  WriteLn;

  SetLength(A,0);
  ComposeIntoResult(A1);
  ComposeIntoResult(A2);
  SortArray(A);

  WriteLn('--- Result ---');
  TypeArray(A);
  WriteLn;

  Write('Press Enter to close...');
  ReadLn;
end.
Ответить с цитированием