![]() |
|
#1
|
|||
|
|||
![]() помогите пожалуйста сортировать из записи дату..
вот такая вещь: Код:
type recp = record names: string; date : array[1..3]; end; var ... zapis1 : array[1..10] of recp; zapis2 : recp; ... date[1] - чило date[2] - месяц date[3] - год нужно сортировать по всей дате... помогите пожалуйста.. писал так: Код:
for i:= 1 to n-1 do repeat flg := 0; if (zapis1[i].date[3] > zapis1[i+1].date[3]) then begin zapis2 := zapis1[i]; zapis1[i] := zapis1[i+1]; zapis1[i+1] := zapis2; flg := 1; end; until flg = 0; вобщем здесь сортировка работает, но только по году. если я начинаю дальше сортировать по месяцу то сортируется только по месяцу.. пробовал обойтись и таким методом: Код:
for i:= 1 to n-1 do repeat flg := 0; if (zapis1[i].date[3] > zapis1[i+1].date[3]) and (zapis1[i].date[2] > zapis1[i+1].date[2]) and (zapis1[i].date[1] > zapis1[i+1].date[1]) then begin zapis2 := zapis1[i]; zapis1[i] := zapis1[i+1]; zapis1[i+1] := zapis2; flg := 1; end; until flg = 0; тоесть сортировка сазу по всей дате, но н сортирует только по числу ![]() помогите пожалуйста! |
#2
|
|||
|
|||
![]() неужели никто не поможет с сортировкой?
![]() |
#3
|
|||
|
|||
![]() Попробуй сортировать так:
Код:
function GetNum(i: integer): integer; begin Result := zapis1[i].date[3] * 1000 + zapis1[i].date[2] * 100 + zapis1[i].date[1]; end; procedure Sort; ...... if GetNum(i) > GetNum(i + 1) then begin .... обмен .... end; ..... end; |
#4
|
|||
|
|||
![]() функции нельзя использовать...
p.s. задание такое Последний раз редактировалось ApplicatiOn, 14.12.2008 в 20:12. |
#5
|
|||
|
|||
![]() ну тогда не используй функцию, я написал так, чтобы понятнее было.
Код:
procedure Sort; ...... if (zapis1[i].date[3] * 1000 + zapis1[i].date[2] * 100 + zapis1[i].date[1]) > (zapis1[i + 1].date[3] * 1000 + zapis1[i + 1].date[2] * 100 + zapis1[i + 1].date[1]) then begin .... обмен .... end; ..... end; |
#6
|
|||
|
|||
![]() я функции не знаю (только процедуры).. во втором варианте понятнее, спасибо)
|
#7
|
|||
|
|||
![]() он сортирует только по числу почему-то.. если смотреть по году то он не сортировал..
|
#8
|
|||
|
|||
![]() Нет! Лучше дату представить в вещественном формате
Код:
type TMyRec = record AName: String; ADate: TDateTime; end; var MyRec : array [1..10] of TMyRec; AMyRec: TMyRec; ... for i := 1 to 10 do for j := 1 to 10-i do if MyRec[j].ADate < MyRec[j+1].ADate then begin AMyRec := MyRec[j]; MyRec[j] := MyRec[j+1]; MyRec[j+1] := AMyRec; end; На выходе получаешь отсортированный по возрастанию массив |
#9
|
|||
|
|||
![]() половина не понятного.. причем тут TDateTime???
я вдату ввожу, отдельно... в разные переменные (в моем случае это массив из них). здесь же совсем другой случай.. |
#10
|
|||
|
|||
![]() в том то она и сложность... что 3 различные переменные содержат свои значения и по ним надо сортировать, по всем показателям..
|
#11
|
|||
|
|||
![]() Что именно непонятно? TDateTime - это стандартный тип Double
Если ты вводишь дату то можно вводить в Edit ('12.10.2008') и затем конвертировать StrToDate. Да и стандартные компоненты его понимают. Да и удобнее использовать чема массив в массиве |
#12
|
|||
|
|||
![]() прикол в том что мне надо ввести всё отдельно.. такое задание... потом сортировать всю запись по дате. и здесь не такой формат нужен "чч.мм.гггг", а 3 разные переменные:
a = чч b = мм c = гггг но я взял массив дабы меньше писать.. все надо выполнить кт ому же в консольном варианте (Console Application), а не в windows application |
#13
|
|||
|
|||
![]() в консольном варианте разве отсутствет модуль SysUtils? а для сборки из отдеьных числе подойдет и EncodeDate(Year, Month, Day: Word)
|
#14
|
|||
|
|||
![]() да нельзя это ничего использовать!
p.s можно использовать только записи, массивы, циклы, логические операции, выражения.. ни функций, ни процедур... |
#15
|
|||
|
|||
![]() я сечас попробую рассмотреть этот вариант
Код:
if (zapis1[i].date[3] * 1000 + zapis1[i].date[2] * 100 + zapis1[i].date[1]) > (zapis1[i + 1].date[3] * 1000 + zapis1[i + 1].date[2] * 100 + zapis1[i + 1].date[1]) then ошибка может быть в том, что zapis1[i].date[3] * 1000 (например), это больше максимального значения integer. попробую взять longint... |