Определить номер дня недели для 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().