По номеру дня недели определить его название - C (СИ)
Формулировка задачи:
#include <stdio.h> #include <conio.h> main() { static int days[]={0,31,28,31,30,31,30,31,31,30,31,30,31}; int dw=4,A[3]={1,1,1999},B[3]; clrscr(); printf("Vvedite datu (DD MM YYYY)"); scanf("%d %d %d",&B[0],&B[1],&B[2]); while ((A[0]<=B[0])&&(A[1]<=B[1])&&(A[2]<=B[2])) { A[0]++; if (A[0]>days[A[1]]) { if ((A[1]==2)&&(A[0]==29)&&(A[2]%4==0)) goto l10; A[0]=1;A[1]++; if(A[1]==13){A[1]=1;A[2]++;} } l10: dw++; if (dw==8) (dw=1); } switch (dw){ case 1:printf("pyatnica");break; case 2:printf("subbota");break; case 3:printf("voskresene");break; case 4:printf("ponedelnik");break; case 5:printf("vtornik");break; case 6:printf("sreda");break; case 7:printf("chetverg ");break;} getch(); }
Решение задачи: «По номеру дня недели определить его название»
textual
Листинг программы
#include <stdio.h> #include <stdlib.h> #include <time.h> #include <string.h> #define BUFLEN 32 int main(void){ time_t sec; struct tm ret, * loc; int day, month, year; static const char *days[] = { "Воскресенье", "Понедельник", "Вторник", "Среда", "Четверг", "Пятница", "Суббота" }; memset(&ret, 0, sizeof(struct tm)); printf("Enter the dste in format DD-MM-YYYY > "); if ( scanf("%d-%d-%d", &day, &month, &year) != 3 ){ perror("scanf"); exit(EXIT_FAILURE); } ret.tm_year = year - 1900; ret.tm_mon = month - 1; ret.tm_mday = day; ret.tm_hour = 0; ret.tm_min = 0; ret.tm_sec = 1; if ( ( sec = mktime(&ret) ) == -1 ){ perror("mktime"); exit(EXIT_FAILURE); } loc = localtime(&sec); printf("%s\n", days[loc->tm_wday]); exit(EXIT_SUCCESS); }
Объяснение кода листинга программы
- Включаются необходимые заголовочные файлы
- Определяется константа BUFLEN, которая равна 32 символам
- Объявляются переменные sec, ret, loc, day, month, year, days
- Инициализируется структура tm, используя функцию memset
- Пользователю предлагается ввести дату в формате DD-MM-YYYY
- С помощью функции scanf считываются значения переменных day, month, year
- Значения переменных month и day приводятся к 0-индексированному формату (например, январь становится 0, а не 1)
- Значение переменной year приводится к формату ГГГГ-ГГ-ГГ (например, 2000 становится 1900, а не 2000)
- Значения переменных ret.tm_year, ret.tm_mon и ret.tm_mday присваиваются соответствующие значения
- Значения переменных ret.tm_hour, ret.tm_min и ret.tm_sec присваиваются нулевые значения
- Используя функцию mktime, создается объект типа tm
- Если mktime вернул -1, то программа выводит сообщение об ошибке и завершает работу с кодом EXIT_FAILURE
- Полученный объект типа tm приводится к объекту типа localtime_r
- Используя оператор индексации, определяется день недели и выводится на экран с помощью функции printf
- Программа завершает работу с кодом EXIT_SUCCESS
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д