Добавил:
Рад, если кому-то помог Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
0
Добавлен:
01.11.2025
Размер:
1.77 Кб
Скачать
#include <iostream>
#include <stdexcept>
#include <locale>
using namespace std;

class Date {
    int day, month, year;
    
    bool isLeapYear(int y) const {
        return (y % 4 == 0 && y % 100 != 0) || (y % 400 == 0);
    }
    
    int daysInMonth(int m, int y) const {
        if (m == 2) return isLeapYear(y) ? 29 : 28;
        if (m == 4 || m == 6 || m == 9 || m == 11) return 30;
        return 31;
    }
    
public:
    void set_date(int d, int m, int y) {
        if (y < 1) throw invalid_argument("Некорректный год");
        if (m < 1 || m > 12) throw invalid_argument("Некорректный месяц");
        if (d < 1 || d > daysInMonth(m, y)) throw invalid_argument("Некорректный день");
        
        day = d;
        month = m;
        year = y;
    }
    
    void print() const {
        cout << day << "." << month << "." << year << endl;
    }
};

int main() {
    setlocale(LC_ALL, "ru_RU.UTF-8");
    
    Date date;
    
    try {
        cout << "Корректная дата: ";
        date.set_date(15, 5, 2023);
        date.print();
    } catch (const exception& e) {
        cout << "Ошибка: " << e.what() << endl;
    }
    
    try {
        cout << "Некорректная дата: ";
        date.set_date(31, 4, 2023); // В апреле 30 дней
        date.print();
    } catch (const exception& e) {
        cout << "Ошибка: " << e.what() << endl;
    }
    
    try {
        cout << "Некорректный месяц: ";
        date.set_date(15, 13, 2023);
        date.print();
    } catch (const exception& e) {
        cout << "Ошибка: " << e.what() << endl;
    }
    
    return 0;
}
Соседние файлы в папке Лаба7