Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.08.08;
Скачать: CL | DM;

Вниз

Работа с указателем   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.014 c
14-24192
Igorek
2002-07-12 17:17
2002.08.08
Стереть информацию с HDD без возможности восстановления


1-24076
Goblinus
2002-07-23 02:43
2002.08.08
Разное по RxRichEdit


3-23934
Loco
2002-07-14 16:18
2002.08.08
Исключения


3-23869
Ptr
2002-07-19 15:07
2002.08.08
Чистка Interbase


14-24195
RV
2002-07-12 11:30
2002.08.08
в продолжение Когда можно работать ?