![]() |
|
|
#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... |