Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
TURBO_PASCAL.doc
Скачиваний:
4
Добавлен:
01.07.2025
Размер:
8.23 Mб
Скачать

16.2. Работа с часами и календарем

Модуль DOS представляет как бы два набора процедур: один — для работы со встроенными часами и календарем, а второй — для ведения дат и времени создания файлов (табл. 16.2). {349}

Таблица 16.2

Процедура

Действие

GetDate(VAR Year, Month, Day, DW : Word)

SetDate(Year, Month, Day : Word)

Считывает год, месяц, число и день во встроенных часах ПЭВМ

Устанавливает год, месяц и число во встроенных часах

GetTime(VAR Hour, Min, Sec, Sec100 : Word)

SetTime(Hour, Min, Sec, Sec100 : Word)

Считывает текущее время по встроенным часам ПЭВМ

Устанавливает новое время во встроенных часах ПЭВМ

PackTime(VAR DT : DateTime; VAR T : LongInt)

UnPackTime(T : LongInt; VAR DT : DateTime)

Создает компактную запись даты и времени для назначения ее файлу

Распаковывает запись даты и времени, считанную в файле

GetFTime(VAR f; VAR T : LongInt)

SetFTime(VAR f; T : LongInt)

Считывает компактную запись даты и времени для открытого файла f

Записывает компактную запись даты и времени для открытого файла f

16.2.1. Опрос и назначение даты

Для опроса или замены даты, имеющейся во встроенных часах ПЭВМ, используются процедуры GetDate и SetDate. Процедура GetDate возвращает в своих переменных значения года, месяца, числа и номера дня в неделе. Процедура SetDate, наоборот, устанавливает значения года, месяца и числа в часах. Заметим, что SetDate не нужен номер дня недели. Он вычисляется автоматически при вызове процедуры GetDate.

Существуют ограничения на вводимые значения даты. Так, год при установке должен быть в диапазоне 1980...2099, месяц — 1...12, число — 1...31. При нарушении диапазонов вызов процедуры SetDate игнорируется. Кроме употребления процедур GetDate/SetDate по непосредственному назначению, их можно использовать для определения дня недели любого числа в месяце до 2099 года. Как это сделать, рассмотрено в примере на рис. 16.3. {350}

{ДЕМОНСТРАЦИЯ ОПРЕДЕЛЕНИЯ ДНЯ НЕДЕЛИ ПО ДАТЕ }

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

16.2.2. Опрос и назначение времени

Процедуры GetTime(VAR Hour, Min, Sec, Sec100 : Word ) и SetTime( Hour, Min, Sec, Sec100: Word) опрашивают и устанавливают значение текущего времени во встроенных часах ПЭВМ. Обе процедуры используют одинаковую последовательность параметров:

( часы, минуты, секунды, миллисекунды )

При установке времени процедурой SetTime их можно задавать непосредственно значениями. Разрешенные значения для установки времени таковы: часы — 0...23, минуты и секунды — 0...59, миллисекунды — 0...99. При нарушении диапазонов время не устанавливается. {351}

Неаккуратное использование процедуры SetTime может сильно изменить представление компьютера о времени, зато процедура GetTime вполне безопасна. С ее помощью можно сделать счетчик времени работы программы. Схема включения процедур в программу приводится на рис. 16.4.

USES DOS;

VAR

h, min, s, ms : Word; { отсечки времени по часам }

Time : Real; { время работы в секундах }

BEGIN

GetTime( h, min, s, ms ); { начало работы программы }

{ время начала программы в секундах : }

Time := ( h*60 + min )*60 + s + ms/100;

{ === программа работает - время идет === }

Write(' Нажмите ENTER' ); ReadLn;

GetTime( h, min, s, ms ); { конец работы программы }

{ время работы программы в секундах : }

Time := ( h*60 + min )*60 + s + ms/100 - Time;

ms:= Trunc( 100 * Frac( Time ) ); { миллисекунды }

h := Trunc( Time ) div 3600; { часы }

min := Trunc( Time-3600*h ) div 60; { минуты }

s := Trunc( Time-3600*h ) mod 60: { секунды }

WriteLn( 'Активное время работы , h:1,' ч ',

min:1, ' мин ', s:1, ',' , ms:1, ' с' );

ReadLn { пауза... }

END.

Рис. 16.4

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]