![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Работа с указателем [D6, Win95/98]
Andy BitOff © (2002-07-28 23:32:00)Здравстуйте.
Подскажите как сделать следуюшее;
Проверяю правильность введенного числа месяцу и году. Делаю так:
var
god :array[1..12] of integer = (31,28,31,30,31,30,31,31,30,31,30,31); //обычный
godv:array[1..12] of integer = (31,29,31,30,31,30,31,31,30,31,30,31); //високосный
g:^integer;
begin
...
g:=@god;
if (Year mod 4) = 0 then g:=@godv; // то високосный
но как мне теперь обратится к определенному индексу? Типа так g[Month]
Т.е. Month например 2 и я должен получить 28 или 29
MBo (2002-07-29 08:15:00) [1]>RV
Високосный год - делится на 4, исключая те, что делятся на 100, но включая делящиеся на 400
1900 невисокосный, 2000- високосный
RV (2002-07-29 08:08:00) [2]Юрий, почему делимость на 4 ничего не дает?
Юрий Зотов (2002-07-29 01:20:00) [3]Хорошо, меняем даты местами: 12.03.0 и 0.03.1999.
Теперь какая больше?
Andy BitOff (2002-07-29 00:28:00) [4]Здесь ответ прост, введенные даты корректны, поскольку не введен год во второй дате и в этом случае, раз она вторая подразумевается, что год больше. Вообще если 0, то дальше как удобно.
Это я к тому написал, что через исключение проверка такой даты не получится.
Юрий Зотов (2002-07-29 00:17:00) [5]А разве такая задача вообще имеет решение?
Вот две даты (в первой неизвестен день, во второй - год, а месяц у них один и тот же): 0.03.1999 и 12.03.0
Какая из них больше?
Andy BitOff (2002-07-28 23:58:00) [6]Все дело в том, что мне надо проверить следующее.
Получаю первую дату и вторую, при этом любое поле (день, месяц, год) в любой дате может содержать 0 (ноль), что означает, что это поле неизвестно. И полученные даты надо сравнить, чтобы первая не была больше второй.
Юрий Зотов (2002-07-28 23:53:00) [7]Кстати, с високосным годом не так все просто, проверка делимости на 4 еще не дает верного результата.
VEG (2002-07-28 23:53:00) [8]>Юрий Зотов
Об этой функции я не знал... УЖЕ ЗНАЮ!
Andy BitOff (2002-07-28 23:48:00) [9]Поэтому и спрашиваю у Вас помощи. Не научился еще :(
Юрий Зотов (2002-07-28 23:48:00) [10]Вы делаете то, что уже сделано в VCL. И указатели здесь совершенно ни при чем.
См. в модуле SysUtils функцию IsLeapYear и массив MonthDays.
А проверить правильность числа, месяца и года можно еще проще:
try
EncodeDate(Year, Month, Day);
... // Все ОК
except
... // Неверно
end;
VEG (2002-07-28 23:45:00) [11]Ой, для решения такой простой задачи, ты используешь такое трудное решение! Все это можно было реализовать при помощи функции:
Function days (Year, Month):Integer;
begin
Case month of
1: Result:=31;
2: If (Year mod 4)=0 then Result:=29 else Result:=28;
3: Result:=31;
4: Result:=30;
5: Result:=31;
6: Result:=30;
7: Result:=31;
8: Result:=31;
9: Result:=30;
10: Result:=31;
11: Result:=30;
12: Result:=31;
end; //©VEG, 28.07.2002 22:53