Сложение двух дат - C (СИ)
Формулировка задачи:
добрый день
помогите плиз со сложением двух дат что-то нечё не может прийти в голову как это сделать)
#include <stdio.h> struct Date { unsigned y; //год unsigned m; //месяц unsigned d; //день }; void GetDate(Date* d) // ввод даты с клавиатуры в формате «дд.мм.гггг»; { printf("Vvedite daty v formate <dd.mm.gggg>:"); scanf("%d%*c%d%*c%d%*c",&d->d,&d->m,&d->y); } void PutDate(Date d) // вывод даты в формате «дд.мм.гггг»; { printf("\nNawa structura soderjit - %d.%d.%d",d.d,d.m,d.y); } void AddDate(Date* d1, Date d2) // сложение двух дат (результат помещается в d1); { } int main() { struct Date d,d1; GetDate(&d); GetDate(&d1); PutDate(d); return 0; }
Решение задачи: «Сложение двух дат»
textual
Листинг программы
bool CMainSheet::SetFileTimeStampUTC ( const char* const pszFile, const FILETIME& rBaseUTC, int iDelayMin, int iDelaySec, bool bDelayRandom ) { HANDLE hFile = OpenFileReadWrite(pszFile); if (hFile == INVALID_HANDLE_VALUE) { // Error ! return false; } unsigned __int64 FileTime64 = 0ui64; memcpy(&FileTime64,&rBaseUTC,sizeof(__int64)); int iApxSec = 60 * iDelayMin + iDelaySec; if (bDelayRandom) { iApxSec += (int)IntRand() % 30; } int iApxMSec = (int)IntRand() % 10000; // random milliseconds __int64 iShift = 10000000i64 * iApxSec + 10000i64 * iApxMSec; FileTime64 += iShift; FILETIME CreationTime; FILETIME LastAccessTime; FILETIME LastWriteTime; memcpy(&CreationTime, &FileTime64,sizeof(__int64)); memcpy(&LastAccessTime,&FileTime64,sizeof(__int64)); memcpy(&LastWriteTime, &FileTime64,sizeof(__int64)); SetFileTime(hFile,&CreationTime,&LastAccessTime,&LastWriteTime); CloseHandle(hFile); hFile = INVALID_HANDLE_VALUE; return true; }
Объяснение кода листинга программы
- В функции
SetFileTimeStampUTC
происходит установка временной метки файла. - Параметры функции:
pszFile
: указатель на имя файла.rBaseUTC
: объект типаFILETIME
, содержащий базовую временную метку в формате UTC.iDelayMin
: значение задержки в минутах.iDelaySec
: значение задержки в секундах.bDelayRandom
: флаг, указывающий, является ли задержка случайной.
- В начале функции открывается файл с помощью функции
OpenFileReadWrite
и сохраняется его дескриптор в переменнойhFile
. Если файл не может быть открыт, то возвращаетсяfalse
и код прекращает выполнение. - Далее создается переменная
FileTime64
типаunsigned __int64
, которая будет использоваться для хранения временной метки файла. - С помощью функции
memcpy
в переменнуюFileTime64
копируются байты из объектаrBaseUTC
. - Затем вычисляется приблизительное количество секунд задержки путем умножения значения
iDelayMin
на 60 и добавления значенияiDelaySec
. - Если флаг
bDelayRandom
установлен вtrue
, то к полученному значению добавляется случайное значение от 0 до 30 секунд. - Далее случайным образом вычисляется значение задержки в миллисекундах в диапазоне от 0 до 10000 миллисекунд.
- Затем создается переменная
iShift
типа__int64
, которая будет использоваться для смещения временной метки файла. - В
iShift
сначала устанавливается байтовое представление значения 10 миллионов (10000000) умноженного на значение задержки в секундах (iApxSec
), а затем добавляется байтовое представление значения 10 тысяч (10000) умноженного на значение задержки в миллисекундах (iApxMSec
). - Значение
iShift
добавляется к переменнойFileTime64
. - Создаются три объекта типа
FILETIME
:CreationTime
,LastAccessTime
иLastWriteTime
, которые будут использоваться для установки временных меток файла. - С помощью функции
memcpy
в каждый из объектов копируются байты из переменнойFileTime64
. - В функцию
SetFileTime
передаются дескриптор файла и объектыCreationTime
,LastAccessTime
иLastWriteTime
для установки временных меток файла. - В конце функции дескриптор файла закрывается с помощью функции
CloseHandle
, после чего он становится недействительным. - Возвращается значение
true
, если все операции были выполнены успешно, иfalse
в противном случае.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д