void day_of_day(int day, int month);
int mn_in_d(int* tr_fl, int* day, int* month);
int check_day(char* string, int* month, int* day);
int check_month(char* string, int*month);
int Check(char* string, int size);
char* Enter(char* trinsg, int* size);
void body();
void tabl(int n);
int main()
{
setlocale(LC_ALL, "Rus");
body();
return 0;
}
void body()
{
printf("Данная программа показывает какой день недели (пн-вс) был в данный день\n");
printf("Введите дату в формате мм.дд\n");
int size_1 = 0;
char* m_and_d = (char*)malloc(size_1 * sizeof(char));
m_and_d = Enter(m_and_d, &size_1);
free(m_and_d);
return;
}
char* Enter(char* trinsg, int* size)
{
char simbol_1;
int check_bl = 0;
do
{
while ((simbol_1 = getchar()) != 10)
{
trinsg = realloc(trinsg, (*size + 1) * sizeof(char));
*size += 1;
trinsg[*size - 1] = simbol_1;
};
check_bl = Check(trinsg, *size);
if (check_bl != 1)
{
printf("\nНеверный ввод!\n");
free(trinsg);
*size = 0;
trinsg = malloc(*size * sizeof(char));
};
} while (check_bl != 1);
return trinsg;
}
int Check(char* string, int size)
{
int true_fact = 1;
int month = 0;
int day = 0;
if (size == 5)
{
for (int i = 0; i < size; i++)
{
if (string[2] != '.')
{
true_fact = 0;
break;
}
if ((i != 2) && (string[i] < 48 || string[i]>57))
{
true_fact = 0;
break;
}
}
if (true_fact == 1)
{
string[2] = ' ';//для корректной работы функции atoi
true_fact = check_month(string, &month);
if (true_fact == 1) true_fact = check_day(string, &month, &day);
if (true_fact == 1) day_of_day(day, month);
}
}
else true_fact = 0;
return true_fact;
}
int check_month(char* string, int *month)
{
if ((string[0] == 48) && (string[1] != 48))
{
*month = atoi(string);
return 1;
}
if (string[0] == 49)
{
if (string[1] <= 50)
{
*month = atoi(string);
return 1;
}
}
else return 0;
}
int check_day(char* string, int* month, int* day)
{
int tr_fl = 0;
string[0] = ' ';
string[1] = ' ';
if ((string[3] == 48) && (string[4] != 48))
*day = atoi(string);
if ((string[3] > 48) && string[3] < 52)
*day = atoi(string);
if (*day > 31) return 0;
else
{
tr_fl = mn_in_d(&tr_fl, day, month);
return tr_fl;
}
return 0;
}
int mn_in_d(int* tr_fl, int* day, int* month)
{
switch (*month)
{
case 2:
if ((*day) > 28)
{
printf("\nВ феврале не может быть больше 28 дней!\n");
return 0;
}
else return 1;
break;
case 4:
if ((*day) > 30)
{
printf("\nВ апреле не может быть больше 30 дней!\n");
return 0;
}
else return 1;
break;
case 6:
if ((*day) > 30)
{
printf("\nВ июне не может быть больше 30 дней!\n");
return 0;
}
else return 1;
break;
case 9:
if ((*day) > 30)
{
printf("\nВ сентябре не может быть больше 30 дней!\n");
return 0;
}
else return 1;
break;
case 11:
if ((*day) > 30)
{
printf("\nВ ноябре не может быть больше 30 дней!\n");
return 0;
}
else return 1;
break;
default:
return 1;
break;
}
}
void day_of_day(int day, int month)
{
int what_day = 0, ostatki = 0, dop_chislo, imp_tab = 0, superrio = 0, lock_per = 0;
switch (month)
{
case 1:
superrio = 0;
lock_per = 1;
break;
case 2:
superrio = 3;
lock_per = 1;
break;
case 3:
superrio = 3;
lock_per = 1;
break;
case 4:
superrio = 6;
lock_per = 1;
break;
case 5:
superrio = 8;
lock_per = 1;
break;
case 6:
superrio = 11;
lock_per = 2;
break;
case 7:
superrio = 13;
lock_per = 2;
break;
case 8:
superrio = 16;
lock_per = 3;
break;
case 9:
superrio = 19;
lock_per = 3;
break;
case 10:
superrio = 0;
lock_per = 1;
break;
case 11:
superrio = 3;
lock_per = 1;
break;
case 12:
superrio = 5;
lock_per = 1;
break;
};
if (day > 7)
{
what_day = day / 7;
ostatki = day % 7;
dop_chislo = day - what_day * 7 + superrio;
if (dop_chislo > 7) dop_chislo = dop_chislo - 7 * lock_per;
if (dop_chislo <= 0) dop_chislo += 7;
}
else
{
dop_chislo = day + superrio;
if (dop_chislo > 7) dop_chislo = dop_chislo - 7 * lock_per;
if (dop_chislo <= 0) dop_chislo += 7;
};
tabl(dop_chislo);
return;
}
void tabl(int n)
{
int i = n-1;
printf("Ваш день недели: ");
char* day[] = { "Суббота\n", "Воскресенье\n", "Понедельник\n", "Вторник\n", "Среда\n", "Четверг\n", "Пятница\n" };
printf("%s", day[i]);
return;
}