Сортировка по возрастанию даты в записях - 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.
Объяснение кода листинга программы
- Создается тип данных
Note
, который представляет собой запись с полямиiDay
(день),sMonat
(месяц),iAge
(возраст) иsData
(дата). - Создается переменная
aChronicle
, которая представляет собой массив записей типаNote
. - Создается переменная
n
, которая представляет собой количество записей в массивеaChronicle
. - Определяется функция
GetMonat
, которая преобразует месяц из строки в числовое значение и возвращает это значение. - Определяется функция
Compare
, которая сравнивает две записи на основе возраста, месяца и дня. Если возраст одинаков, сравниваются месяц и день. Если все три поля равны, сравниваются только дни. Если все условия равны, функция возвращает 0. - Определяется процедура
qsort
, которая реализует алгоритм сортировки пузырьком. - В основной части программы сначала вызывается функция
GetMonat
для определения числового значения месяца в первой записи. - Затем вызывается функция
Compare
для сравнения первой записи с остальными записями в массивеaChronicle
. - Пока условие сравнения не выполняется, выполняется рекурсивный вызов функции
qsort
для подмассива. - После завершения рекурсивных вызовов выполняется вывод записей.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д