Показать сообщение отдельно
  #15  
Старый 14.12.2010, 15:01
Yreng Yreng вне форума
Прохожий
 
Регистрация: 13.12.2010
Сообщения: 8
Репутация: 10
По умолчанию

теперь я понял свою ошибку(я файл в ворд паде создавал, а надо было через программу). потренировался, всё ок.
только одна проблема. я взял вашу программу и дополнил её вводом этих файлов (file1.dat и file2.dat), на экране всё работает правильно, а когда открываю file.dat , то там неразбериха, странные символы и т.д. Это как-то можно испрвить или это из-за того, что файл не txt, поэтому в него так записывается?
Код:
program Project2;

{$APPTYPE CONSOLE}

uses
  SysUtils;

type
  Stud = record
    Year: Integer;
    Name: String[20];
  end;  
var
  f: file of Stud;
  i, j, n, k: integer;
  a1, a2: array of Stud;
  t: Stud;
  res: char;

begin
  AssignFile(f, 'C:\file1.dat');
  Reset(F);
  repeat
    Write('Name: ');
    ReadLn(t.Name);
    Write('Year: ');
    ReadLn(t.Year);
    Write('res: ');
    Write(F, T);
    ReadLn(Res);
  until (res = 'n');
  Closefile(F);

   AssignFile(f, 'C:\file2.dat');
  Reset(F);
  repeat
    Write('Name: ');
    ReadLn(t.Name);
    Write('Year: ');
    ReadLn(t.Year);
    Write('res: ');
    Write(F, T);
    ReadLn(Res);
  until (res = 'n');
  CloseFile(F);

  AssignFile(f, 'C:\file1.dat');
  Reset(f);
  i := 0;
  while not eof(f) do
  begin
    SetLength(a1, i + 1);
    Read(f, a1[i]);
    inc(i);
  end;
  CloseFile(f);

  AssignFile(f, 'C:\file2.dat');
  Reset(f);
  n := 0;
  while not eof(f) do
  begin
    SetLength(a2, n + 1);
    Read(f, a2[n]);
    inc(n);
  end;
  CloseFile(f);

  j := i;
  dec(n);
  while n >= 0 do
  begin
    k := i - 1;
    while k >= 0 do
    begin
      if (a1[k].Name = a2[n].Name) and (a1[k].Year = a2[n].Year) then
        break;
      dec(k);
    end;
    if k = -1 then
    begin
      SetLength(a1, j + 1);
      a1[j].Year := a2[n].Year;
      a1[j].Name := a2[n].Name;
      inc(j);
    end;
    dec(n);
  end;

  // Sorting
  for i := 0 to j - 2 do
  begin
    for n := i + 1 to j - 1 do
      if (a1[i].Year > a1[n].Year) then
      begin
        t.Year := a1[i].Year;
        t.Name := a1[i].Name;

        a1[i].Year := a1[n].Year;
        a1[i].Name := a1[n].Name;

        a1[n].Year := t.Year;
        a1[n].Name := t.Name;
      end;
  end;

  AssignFile(f, 'C:\file.dat');
  Rewrite(f);
  for i := 0 to j - 1 do
  begin
    Write(f, a1[i]);
    Writeln(a1[i].Year, ' ', a1[i].Name);
  end;
  CloseFile(f);
  Writeln('Ready');
  Readln;
end.
Ответить с цитированием