Определить номер дня недели для K-го дня года - C (СИ)
Формулировка задачи:
РЕШИТЕ,ПОЖАЛУЙСТА
Дни недели пронумерованы следующим образом: 1 — понедельник, 2 — вторник, …, 6 — суббота, 7 — воскресенье. Дано целое число K, лежащее в диапазоне 1–365, и целое число N, лежащее в диапазоне 1–7. Определить номер дня недели для K-го дня года, если известно, что в этом году 1 января было днем недели с номером N.
Решение задачи: «Определить номер дня недели для K-го дня года»
textual
Листинг программы
#include <stdlib.h> #include <stdio.h> #include <locale.h> #include <time.h> #define BF_LEN 80 #define SEC_PER_DAY 60*60*24 void main(int argc, char **argv) { int doy,y1st; time_t dtsec; struct tm *ptm; char *bf = malloc(BF_LEN); cputs("Enter DOY[1-365]:"); scanf("%d",&doy); cputs("Enter 1st day #:"); scanf("%d",&y1st); dtsec = --doy*SEC_PER_DAY; //время с начала года в секундах, дни начинаются с 0 ptm = localtime(&dtsec); //конвертим в структуру strftime(bf,BF_LEN,"day entered is %d %B",ptm);//выводим дату для дня года puts(bf); dtsec-=(y1st-2)*SEC_PER_DAY; ptm = localtime(&dtsec); strftime(bf,BF_LEN,"weekday name %A",ptm); puts(bf); }
Объяснение кода листинга программы
В этом коде выполняются следующие действия:
- Ввод с клавиатуры двух чисел:
- doy (от 1 до 365) - номер дня года
- y1st (от 1 до 7) - номер первого дня недели для года
- Вычисление времени с начала года в секундах для введенного doy. Дни начинаются с 0, поэтому вычитается 1.
- Преобразование времени в структуру tm с помощью функции localtime().
- Форматирование строки с датой для введенного doy и вывод ее на экран с помощью функции puts().
- Вычисление времени с начала года в секундах для первого дня недели (y1st-2), учитывая, что дни недели с 1 по 7 считаются с 0.
- Преобразование времени в структуру tm с помощью функции localtime().
- Форматирование строки с названием дня недели для введенного doy и вывод ее на экран с помощью функции puts().
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д