Top.Mail.Ru
Ответы
Аватар пользователя
Аватар пользователя
Аватар пользователя
Аватар пользователя
Просто установи
+4

Помогите по програмированию c++

Написать программу для определения Вашего возвраста в днях.

Т.е. с даты Вашего рождения(например с 20.01.1997) по 06.02.2025.

Использовать только года, месяца и дни.

уже 2 день пытаюсь решить не как не пойму что надо сделать

По дате
По рейтингу
Аватар пользователя
Высший разум
1мес
Изменено
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
#include <iostream>

using namespace std;

class Date {
    int day{};
    int month{};
    int year{};
    bool is_leap(int year) {
        if (year % 4) return false;
        if (0 == year % 400) return true;
        return year % 100;
    }
    friend istream& operator>>(istream& inp, Date& d) {
        char delim;
        return inp >> d.day >> delim >> d.month >> delim >> d.year;
    }
    friend bool operator<(const Date& a, const Date& b) {
        if (a.year < b.year) return true;
        if (a.year == b.year) {
            if (a.month < b.month) return true;
            if (a.month == b.month) return a.day < b.day;
        }
        return false;
    }
    friend bool operator==(const Date& a, const Date& b) {
        return a.year == b.year && a.month == b.month && a.day == b.day;
    }
    friend int operator-(const Date& a, const Date& b) {
        if (a == b) return 0;
        Date l{ a };
        Date r{ b };
        if (b < a) swap(l, r);
        auto days{ 0 };
        for (auto i = l; i < r; ++i, ++days) { ; }
        return days;
    }
public:
    Date& operator++() {
        if (day < 28) ++day;
        else if (day == 28) {
            if (month != 2) ++day;
            else if (is_leap(year)) ++day;
            else { ++month; day = 1; }
        }
        else if (day == 29 && month != 2) ++day;
        else if (day == 30) {
            if (month == 2) { ++month; day = 1; }
            else if (month != 4 && month != 6 && month != 9 && month != 11) ++day;
            else { ++month; day = 1; }
        }
        else {
            if (month == 12) { ++year; month = day = 1; }
            else { ++month; day = 1; }
        }
        return *this;
    }
};

int main() {
    Date a, b;
    cin >> a >> b;
    cout << a - b << '\n';
}
Аватар пользователя
Искусственный Интеллект
1мес

Надо использовать метку времени == timestamp

Вычислить (или найти) количество секунд в году и дне и найти разницу между датами в секундах. Это чтобы не путаться в високосных годах и т.д. Как получить кол-во секунд - вот пример.

123456789
#include <iostream>
#include <chrono>
int main()
{
    const auto p1 = std::chrono::system_clock::now();
    std::cout << "секунд с начала эры: "
              << std::chrono::duration_cast<std::chrono::seconds>(
                   p1.time_since_epoch()).count() << '\n';
}

Надо ещё дату перевести в метку времени - есть готовая функция.

Почитайте Как легко конвертировать timestamps в даты

Аватар пользователя
Новичок
1мес
Изменено

(P.s сгенерировано с помощью ИИ. Т.к сам в этой теме особо не шарю, надеюсь, что поможет)

#include <iostream>

#include <ctime>

// Функция для проверки високосного года

bool isLeapYear(int year) {

if (year % 4 != 0) {

return false;

} else if (year % 100 != 0) {

return true;

} else {

return (year % 400 == 0);

}

}

// Функция для получения количества дней в месяце

int daysInMonth(int month, int year) {

switch (month) {

case 1: case 3: case 5: case 7: case 8: case 10: case 12:

return 31;

case 4: case 6: case 9: case 11:

return 30;

case 2:

return isLeapYear(year) ? 29 : 28;

default:

return 0;

}

}

// Функция для вычисления количества дней между двумя датами

int calculateDaysBetweenDates(int birthDay, int birthMonth, int birthYear,

int currentDay, int currentMonth, int currentYear) {

int totalDays = 0;

// Добавляем дни из полных годов между датами

for (int year = birthYear; year < currentYear; ++year) {

totalDays += isLeapYear(year) ? 366 : 365;

}

// Вычитаем дни, прошедшие с начала года рождения до дня рождения

for (int month = 1; month < birthMonth; ++month) {

totalDays -= daysInMonth(month, birthYear);

}

totalDays -= birthDay - 1;

// Добавляем дни, прошедшие с начала текущего года до текущей даты

for (int month = 1; month < currentMonth; ++month) {

totalDays += daysInMonth(month, currentYear);

}

totalDays += currentDay - 1;

return totalDays;

}

int main() {

// Дата рождения: 20 января 1997 года

int birthDay = 20;

int birthMonth = 1; // январь

int birthYear = 1997;

// Текущая дата: 6 февраля 2025 года

int currentDay = 6;

int currentMonth = 2; // февраль

int currentYear = 2025;

// Вычисляем количество дней между датами

int ageInDays = calculateDaysBetweenDates(birthDay, birthMonth, birthYear,

currentDay, currentMonth, currentYear);

std::cout << "Ваш возраст в днях (с " << birthDay << "." << birthMonth << "." << birthYear

<< " по " << currentDay << "." << currentMonth << "." << currentYear

<< ") составляет: " << ageInDays << " дней." << std::endl;

return 0;

}

Аватар пользователя
Ученик
1мес

Нужно написать функцию которая будет вычислять количество дней, лет, месяцев

Аватар пользователя
Ученик
1мес

яйца