По номеру дня недели определить его название - 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);
}

Объяснение кода листинга программы

  1. Включаются необходимые заголовочные файлы
  2. Определяется константа BUFLEN, которая равна 32 символам
  3. Объявляются переменные sec, ret, loc, day, month, year, days
  4. Инициализируется структура tm, используя функцию memset
  5. Пользователю предлагается ввести дату в формате DD-MM-YYYY
  6. С помощью функции scanf считываются значения переменных day, month, year
  7. Значения переменных month и day приводятся к 0-индексированному формату (например, январь становится 0, а не 1)
  8. Значение переменной year приводится к формату ГГГГ-ГГ-ГГ (например, 2000 становится 1900, а не 2000)
  9. Значения переменных ret.tm_year, ret.tm_mon и ret.tm_mday присваиваются соответствующие значения
  10. Значения переменных ret.tm_hour, ret.tm_min и ret.tm_sec присваиваются нулевые значения
  11. Используя функцию mktime, создается объект типа tm
  12. Если mktime вернул -1, то программа выводит сообщение об ошибке и завершает работу с кодом EXIT_FAILURE
  13. Полученный объект типа tm приводится к объекту типа localtime_r
  14. Используя оператор индексации, определяется день недели и выводится на экран с помощью функции printf
  15. Программа завершает работу с кодом EXIT_SUCCESS

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

12   голосов , оценка 4 из 5
Похожие ответы