Помощь - Поиск - Пользователи - Календарь
Полная версия: сортировка записей в файле
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
shutka
Ребята!!!Помогите пожалуйста!!!Мне необходимо отсортировать записи в типизированном файле по полю строкового типа.Вот листинг всей программы!Я не знаю,как вывести результаты на экран..Подскажите?!
program zadan2;
uses crt;
type Tanim=record
     Fio:string;
     Name:string;
     Poroda:string;
     age:byte;
     end;
const n=3;adr:string='an.doc';
var anim:array[1..n]of Tanim;
fan:file of Tanim;i,a:byte;b:string;K:integer;
function Compare(a, b: String): Integer;
var
  i, n, lA, lB: Integer;
  function Min(a, b: Integer): Integer;
  begin
    if a < b then
     Min := a
    else
     Min := b;
  end;
begin
  lA := Length(a);
  lB := Length(b);
  n := Min(lA, lB);
  i := 1;
  while (i <= n) and (a[i] = b[i]) do inc(i);
  if (i > n) then begin
    if (lA = lB) then Compare := 0
     else
      if lA > lB then Compare := - 1
       else Compare := 1;
  end
   else
    if ord(a[i]) < ord(b[i]) then
      Compare := 1
    else
      Compare := -1
end;

begin
     Assign(fan,adr);
     rewrite(fan);
     writeln('Введите данные по каждому животному');
     for i:=1 to n do begin with anim[i] do
     begin
     write('Введите ФИО владельца животного: ');readln(FIO);
     write('Введите кличку животного: ');readln(Name);
     write('Введите породу: ');readln(Poroda);
     write('Введите возраст: ');readln(age);
     end;
     write(fan,anim[i]);end;
     close(fan);
     reset(fan);
     writeln;
     writeln('Введите возраст животного ');readln(a);
     for i:=1 to n do  begin
         with anim[i] do
         if age=a then begin
         writeln('Животные такого возраста:');
         writeln('Фамилия владельца: ',Fio,';Кличка животного: ',Name,';порода: ',Poroda);
         end;end;
     writeln;
     write('Введите кличку ');readln(b);
     for i:=1 to n do  begin
         with anim[i] do
         if Name=b then begin
         writeln('Данные о животных с такой кличкой:');
         writeln('ФИО владельца: ',Fio,';возраст животного: ',age,';порода: ',Poroda);
         end;end;
     writeln;

     for i:=1 to n do     {здесь надо зделать сортировку по породам животных}
     begin
     k:=compare(anim[i].poroda,anim[i+1].poroda);
     if k=-1 then begin
          writeln(fan,anim[i+1],anim[i]);end;

     end;


     Close(fan);
end.

shutka
Все!!!Решила!!!Если кому надо будет, то вот!!!

program zadan2;
uses crt;
const n=3;adr:string='an.dat';
type Trecanim=record
     Fio:string;
     Name:string;
     Poroda:string;
     age:byte;
     end;
     Tanim=array[1..n]of Trecanim;
     Tfan=file of Tanim;

var
i,a1,j:byte;b1:string;anim:Tanim;fan:Tfan;

procedure Sort(var b:Tanim); {сортировка записи}
var
   temp : Trecanim;
   flag : boolean;
begin
   repeat
      flag := true;
      for i := 1 to n - 1 do
       if not (b[i].poroda <= b[i+1].poroda) then begin
          temp := b[i];
          b[i] := b[i + 1];
          b[i + 1] := temp;
          flag := false;
       end;
   until flag;
end;
begin
     Assign(fan,adr);
     rewrite(fan);
     writeln('Введите данные по каждому животному');
     for i:=1 to n do begin with anim[i] do
     begin
     write('Введите ФИО владельца животного: ');readln(FIO);
     write('Введите кличку: ');readln(Name);
     write('Введите породу: ');readln(Poroda);
     write('Введите возраст: ');readln(age);
     end;
     write(fan,anim);end;
     close(fan);
     reset(fan);
     writeln;
     writeln('Введите возраст животного ');readln(a1);
     for i:=1 to n do  begin
         with anim[i] do
         if age=a1 then begin
         writeln('данные о животных такого возраста:');
         writeln('ФИО владельца: ',Fio,';кличка животного: ',Name,';порода: ',Poroda);
         end;end;
     writeln;
     write('Введите кличку животного ');readln(b1);
     for i:=1 to n do  begin
         with anim[i] do
         if Name=b1 then begin
         writeln('данные о животных с такой кличкой:');
         writeln('ФИО владельца: ',Fio,';возраст животного: ',age,';порода: ',Poroda);
         end;end;
     writeln;
     for j:=1 to n do sort(anim);
       for i:=1 to n do begin
     with anim[i] do
     writeln('ФИО владельца: ',Fio,';кличка животного: ',Name,';возраст животного: ',age,';порода: ',Poroda);
     end;
      Close(fan);

end.
smile.gif
Гость


накониц-то НАШЕЛ эту хрень!!! Ты просто МегА-тЁлка! СпасибО!
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.