Сортировка по возрастанию даты в записях - Pascal ABC

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

Свою летопись историк составил в таком формате: день(арабскими)/Месяц(Римскими)/Год(арабскими)/Описание(строка). Упорядочить все записи за возрастанием даты.

Код к задаче: «Сортировка по возрастанию даты в записях - Pascal ABC»

textual
program z1;
type Note = record
       iDay : integer;
       sMonat : string;
       iAge: integer;
       sData: string;
     end;
var 
  aChronicle : array[1..100] of Note;
  n : integer;
  
function GetMonat(a : Note) : integer;
begin
  if(a.sMonat = 'I') then GetMonat := 1
  else if(a.sMonat = 'II') then GetMonat := 2
  else if(a.sMonat = 'III') then GetMonat := 3
  else if(a.sMonat = 'IV') then GetMonat := 4
  else if(a.sMonat = 'V') then GetMonat := 5
  else if(a.sMonat = 'VI') then GetMonat := 6
  else if(a.sMonat = 'VII') then GetMonat := 7
  else if(a.sMonat = 'VIII') then GetMonat := 8
  else if(a.sMonat = 'IX') then GetMonat := 9
  else if(a.sMonat = 'X') then GetMonat := 10
  else if(a.sMonat = 'XI') then GetMonat := 11
  else if(a.sMonat = 'XII') then GetMonat := 12
  else GetMonat := 0;
end;
  
function Compare(a : Note; b : Note) : integer;
begin
  if(a.iAge < b.iAge) then Compare := 1
  else if(a.iAge > b.iAge) then Compare := -1
  else begin
    if(GetMonat(a) < GetMonat(b)) then Compare := 1
    else if(GetMonat(a) > GetMonat(b)) then Compare := -1
    else begin
      if(a.iDay < b.iDay) then Compare := 1
      else if(a.iDay > b.iDay) then Compare := -1
      else if(a.iDay < b.iDay) then Compare := 0;
    end;
  end;
end;
 
procedure qsort(low : integer; high : integer);
var i, j : integer;
    m, t : Note;
begin
  i := low; j := high; m := aChronicle[(i + j) shr 1];
  repeat
    while (Compare(aChronicle[i], m) = 1) do inc(i);    
    while (Compare(aChronicle[j], m) = -1) do dec(j);
    if (i <= j) then begin
      t := aChronicle[i]; aChronicle[i] := aChronicle[j]; aChronicle[j] := t;
      inc(i); dec(j);
    end;
  until (i > j);
  if (low < j) then qsort(low, j);
  if (i < high) then qsort(i, high);
end;
 
begin
  //чтение записей
  qsort(1, n); //n - число записей
  //вывод записей
end.

7   голосов, оценка 3.429 из 5


СОХРАНИТЬ ССЫЛКУ
Похожие ответы