Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Решить календарную задачу по основам программирования

Олег Исаков Профи (635), закрыт 3 месяца назад
Последняя среда каждого месяца - санитарный день. Получить даты всех санитарных
дней этого отдела от заданной даты до конца этого года. Нужно написать код на языке C.
Лучший ответ
Николай Веселуха Высший разум (375136) 4 месяца назад
#include <stdio.h>
#include <time.h>

typedef struct {
int day;
int month;
} Date;

Date find_last_weekday(int year, int month, int week_day) {
struct tm current = { 0 };
Date date;
current.tm _year = year - 1900;
current.tm _mon = month - 1;
current.tm _mday = 1;
if (month == 12) {
++ current.tm _year;
current.tm _mon = 0;
} else {
++ current.tm _mon;
}
mktime(&current);
current.tm _mday = 0;
mktime(&current);
while ( current.tm _wday != week_day) {
-- current.tm _mday;
mktime(&current);
}
date.day = current.tm _mday;
date.month = current.tm _mon + 1;
return date;
}

int main(void) {
int year = 2024;
int week_day = 3;
int day;
int month;
Date date;
printf("Введите день месяца: ");
scanf("%i", &day);
printf("Введите число месяца: ");
scanf("%i", &month);
while (month <= 12) {
date = find_last_weekday(year, month, week_day);
if (day == 1 || day <= date.day ) {
printf("%d.%02d.%d\n", date.day , date.month, year);
}
if (day != 1) {
day = 1;
}
++month;
}
return 0;
}
Остальные ответы
Похожие вопросы