к завтрашнему дню надо решить эту задачу 'Дан массив записей, содержащих дату (число, месяц, год) и время (час, минута, секунда). Упорядочить этот массив в порядке «возрастания», т.е. от более ранних значений к более поздним. ' Но я даже толком в смысл задачи не въехал. Помогите чем можете. заранее ОгРоМнОе спасибо.
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; Begin For i := 1 To n Do For j := n DownTo i+1 Do If ar[Pred(j)] > ar[j] Then { < } Begin T := ar[Pred(j)]; ar[Pred(j)] := ar[j]; ar[j] := T End End;
Он почти подходит для решения твоей задачи... Почти - потому что не предназначен он для сортировки записей, он сортирует целые числа... Еще один препон - нельзя сравнивать между собой записи, ибо это НЕвстроенные типа Паскаля, и он про твой тип ничего не знает. Но если сделать так:
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; Begin For i := 1 To n Do For j := n DownTo i+1 Do If isMore(ar[Pred(j)], ar[j]) Then Begin T := ar[Pred(j)]; ar[Pred(j)] := ar[j]; ar[j] := T End End;
, то все заработает...
Пробуй, я написал тебе все, что нужно для решения...
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.