к завтрашнему дню надо решить эту задачу 'Дан массив записей, содержащих дату (число, месяц, год) и время (час, минута, секунда). Упорядочить этот массив в порядке «возрастания», т.е. от более ранних значений к более поздним. ' Но я даже толком в смысл задачи не въехал. Помогите чем можете. заранее ОгРоМнОе спасибо.
volvo
21.11.2006 1:03
Цитата
я даже толком в смысл задачи не въехал
Смысл задания - следующий... У тебя есть массив, содержащий определенные структуры... Например, вот такой: (4-apr-1990;11:00:00), (5-jan-1975;14:11:30), ... ну, и так далее, неважно что там дальше... Те две структуры, которые я привел, не упорядочены по возрастанию... Потому, что дата, содержащаяся во второй, "раньше" даты, содержашейся в первой...
Теперь, как делать... Выбираешь любой метод сортировки отсюда: Методы сортировок и сожешь сортировать. За одним исключением: сначала надо кое-что изменить. Возьмем, для примера, метод "пузырька", как самый простой и понятный:
Type
arrType = Array[1 .. n] Of Integer;
Procedure Bubble(Var ar: arrType; n: integer);
Var i, j, T: Integer;
BeginFor i := 1To n DoFor j := n DownTo i+1DoIf ar[Pred(j)] > ar[j] Then{ < }Begin
T := ar[Pred(j)]; ar[Pred(j)] := ar[j]; ar[j] := T
EndEnd;
Он почти подходит для решения твоей задачи... Почти - потому что не предназначен он для сортировки записей, он сортирует целые числа... Еще один препон - нельзя сравнивать между собой записи, ибо это НЕвстроенные типа Паскаля, и он про твой тип ничего не знает. Но если сделать так:
Type
myRec = Record{ Здесь - те поля, которые тебе нужны }End;
arrType = Array[1 .. n] Of myRec;
Function isMore(r1, r2: myRec): boolean;
begin{
Функция сравнивает содержимое полей R1 и R2, и возвращает True, если дата/время, записанные
в R1 больше (позже) даты/времени, записанного в R2; иначе возвращается False
Как именно сравнивать записи - попробуй решить для себя сам... Можно, конечно,
сделать перебор по всем полям, начиная с года, потом месяц, день, ... Но проще,
наверное, будет перевести дату в какое-то универсальное число, например, количество
секунд до записанной даты, прошедшее, скажем, с 1 января 1900 года, и сравнивать эти секунды
}end;
Procedure Bubble(Var ar: arrType; n: integer);
Var
i, j: Integer;
T: myRec;
BeginFor i := 1To n DoFor j := n DownTo i+1DoIf isMore(ar[Pred(j)], ar[j]) ThenBegin
T := ar[Pred(j)]; ar[Pred(j)] := ar[j]; ar[j] := T
EndEnd;
, то все заработает...
Пробуй, я написал тебе все, что нужно для решения...
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.