Повернутися

struct DayMonthYear
{
    int day;   // день
    int month; // номер місяця
    int year;  // рік
};

DayMonthYear Yesterday(DayMonthYear D)
{
    int daysInMonth[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
    
    DayMonthYear yesterday = D;
    yesterday.day--;
    
    // Перевірка переходу на попередній місяць
    if (yesterday.day < 1)
    {
        yesterday.month--;
        
        // Перевірка переходу на попередній рік
        if (yesterday.month < 1)
        {
            yesterday.month = 12;
            yesterday.year--;
        }
        
        // Перевірка високосного року для попереднього місяця
        bool isLeapYear = (yesterday.year % 4 == 0 && yesterday.year % 100 != 0) || (yesterday.year % 400 == 0);
        if (isLeapYear) daysInMonth[1] = 29;
        
        yesterday.day = daysInMonth[yesterday.month - 1];
    }
    
    return yesterday;
}