Форум: "Основная";
Текущий архив: 2002.08.08;
Скачать: [xml.tar.bz2];
ВнизРабота с указателем Найти похожие ветки
← →
Andy BitOff (2002-07-28 23:32) [0]Здравстуйте.
Подскажите как сделать следуюшее;
Проверяю правильность введенного числа месяцу и году. Делаю так:
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
← →
VEG (2002-07-28 23:45) [1]Ой, для решения такой простой задачи, ты используешь такое трудное решение! Все это можно было реализовать при помощи функции:
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
← →
Andy BitOff (2002-07-28 23:48) [2]Поэтому и спрашиваю у Вас помощи. Не научился еще :(
← →
Юрий Зотов (2002-07-28 23:48) [3]Вы делаете то, что уже сделано в VCL. И указатели здесь совершенно ни при чем.
См. в модуле SysUtils функцию IsLeapYear и массив MonthDays.
А проверить правильность числа, месяца и года можно еще проще:
try
EncodeDate(Year, Month, Day);
... // Все ОК
except
... // Неверно
end;
← →
Юрий Зотов (2002-07-28 23:53) [4]Кстати, с високосным годом не так все просто, проверка делимости на 4 еще не дает верного результата.
← →
VEG (2002-07-28 23:53) [5]>Юрий Зотов
Об этой функции я не знал... УЖЕ ЗНАЮ!
← →
Andy BitOff (2002-07-28 23:58) [6]Все дело в том, что мне надо проверить следующее.
Получаю первую дату и вторую, при этом любое поле (день, месяц, год) в любой дате может содержать 0 (ноль), что означает, что это поле неизвестно. И полученные даты надо сравнить, чтобы первая не была больше второй.
← →
Юрий Зотов (2002-07-29 00:17) [7]А разве такая задача вообще имеет решение?
Вот две даты (в первой неизвестен день, во второй - год, а месяц у них один и тот же): 0.03.1999 и 12.03.0
Какая из них больше?
← →
Andy BitOff (2002-07-29 00:28) [8]Здесь ответ прост, введенные даты корректны, поскольку не введен год во второй дате и в этом случае, раз она вторая подразумевается, что год больше. Вообще если 0, то дальше как удобно.
Это я к тому написал, что через исключение проверка такой даты не получится.
← →
Юрий Зотов (2002-07-29 01:20) [9]Хорошо, меняем даты местами: 12.03.0 и 0.03.1999.
Теперь какая больше?
← →
RV (2002-07-29 08:08) [10]Юрий, почему делимость на 4 ничего не дает?
← →
MBo (2002-07-29 08:15) [11]>RV
Високосный год - делится на 4, исключая те, что делятся на 100, но включая делящиеся на 400
1900 невисокосный, 2000- високосный
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2002.08.08;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.006 c