Написать программу на C++, которая будет вычислять разницу в днях и секундах между двумя датами.
cpp
#include <iostream>
#include <chrono>
#include <ctime>
// Функция для ввода даты от пользователя
std::tm readDate() {
std::tm date;
std::cout << "Введите день: ";
std::cin >> date.tm_mday;
std::cout << "Введите месяц: ";
std::cin >> date.tm_mon;
std::cout << "Введите год: ";
std::cin >> date.tm_year;
date.tm_mon -= 1; // В структуре std::tm месяцы нумеруются с 0 до 11
date.tm_year -= 1900; // В структуре std::tm годы отсчитываются от 1900 года
return date;
}
// Функция для вычисления разницы в днях и секундах между двумя датами
void calculateDifference(const std::tm& date1, const std::tm& date2) {
std::time_t time1 = std::mktime(const_cast<std::tm*>(&date1));
std::time_t time2 = std::mktime(const_cast<std::tm*>(&date2));
if (time1 == -1 || time2 == -1) {
std::cout << "Ошибка при вычислении разницы дат!" << std::endl;
return;
}
// Проверяем, какая дата является первой
std::time_t earlierTime, laterTime;
if (time1 < time2) {
earlierTime = time1;
laterTime = time2;
} else {
earlierTime = time2;
laterTime = time1;
}
// Вычисляем разницу секунд
std::time_t differenceSeconds = laterTime - earlierTime;
// Преобразуем разницу секунд в дни
int differenceDays = differenceSeconds / 86400;
std::cout << "Разница в днях: " << differenceDays << std::endl;
std::cout << "Разница в секундах: " << differenceSeconds << std::endl;
}
int main() {
std::cout << "Введите первую дату:" << std::endl;
std::tm date1 = readDate();
std::cout << "Введите вторую дату:" << std::endl;
std::tm date2 = readDate();
calculateDifference(date1, date2);
return 0;
}
Программа начинается с объявления необходимых заголовочных файлов: `<iostream>` для ввода-вывода данных, `<chrono>` для работы со временем и `<ctime>` для работы с датами и временем.
Затем определяются функции `readDate` и `calculateDifference`, которые будут использоваться в главной функции `main`.
Функция `readDate` считывает дату от пользователя и возвращает структуру `std::tm`, содержащую введенные значения.
Функция `calculateDifference` получает две даты в качестве аргументов и выполняет следующие действия:
1. Преобразует структуры `std::tm` в значения типа `std::time_t` с помощью функции `std::mktime`. В случае ошибки преобразования выводит сообщение об ошибке и возвращает управление.
2. Определяет, какая из дат является более ранней.
3. Вычисляет разницу в секундах между двумя датами путем вычитания значений типа `std::time_t`.
4. Преобразует разницу в секундах в дни, разделив на 86400 (количество секунд в одном дне).
5. Выводит полученные значения разницы в днях и секундах.
Главная функция `main` запрашивает две даты у пользователя с помощью функции `readDate`, а затем вызывает функцию `calculateDifference`, передавая в нее полученные даты.
В результате работы программы пользователю будет выведена разница в днях и секундах между введенными датами.Нажимая «Регистрация» или «Войти через Google», вы соглашаетесь с Публичной офертой, даете Согласие на обработку персональных данных, а также подтверждаете что вам есть 18 лет
Нажимая «Регистрация» или «Войти через Google», вы соглашаетесь с Публичной офертой, даете Согласие на обработку персональных данных, а также подтверждаете что вам есть 18 лет