16.2.1. Опрос и назначение даты
Для опроса или замены даты, имеющейся во встроенных часах ПЭВМ, используются процедуры GetDate и SetDate. Процедура GetDate возвращает в своих переменных значения года, месяца, числа и номера дня в неделе. Процедура SetDate, наоборот, устанавливает значения года, месяца и числа в часах. Заметим, что SetDate не нужен номер дня недели. Он вычисляется автоматически при вызове процедуры GetDate.
Существуют ограничения на вводимые значения даты. Так, год при установке должен быть в диапазоне 1980...2099, месяц — 1...12, число — 1...31. При нарушении диапазонов вызов процедуры SetDate игнорируется. Кроме употребления процедур GetDate/SetDate по непосредственному назначению, их можно использовать для определения дня недели любого числа в месяце до 2099 года. Как это сделать, рассмотрено в примере на рис. 16.3.
- 351 -
| { ДЕМОНСТРАЦИЯ ОПРЕДЕЛЕНИЯ ДНЯ НЕДЕЛИ ПО ДАТЕ }
| USES DOS;
| TYPE
| DayString = String[11];
| CONST
| Days : Array [1..7] of DayString = { дни недели }
| ( 'Понедельник', 'Вторник , 'Среда', 'Четверг',
| 'Пятница', 'Суббота', 'Воскресенье' );
| { Функция возвращает название дня недели по дате.}
| FUNCTION WhatDay( Year, Month, Day : Word ) : DayString;
| VAR
| Y, M, D, n : Word;
| BEGIN
| GetDate( Y, M, D, n ); { запоминание текущей даты }
| SetDate( Year,Month,Day ); { установка даты из запроса }
| GetDate( Year,Month,Day,n); {получение по ней номера n }
| WhatDay := Days[n]; { номер n дает название дня }
| SetDate(Y, M, D ) { восстановление даты в ПЭВМ }
| END;
| VAR { -- ПРИМЕР ВЫЗОВА -- }
| у, m, d : Word;
| BEGIN
| Write( 'Введите год ' ); ReadLn( у );
| Write( 'Введите месяц' ); ReadLn( m );
| Write( 'Введите число' ); ReadLn( d );
| WriteLn;
| WriteLn(d:2,'/', m:1,'/',y:4,'-->',WhatDay(y,m,d));
| ReadLn { пауза до нажатия клавиши ввода }
| END.
Рис. 16.3