0 / 0 / 0
Регистрация: 02.12.2018
Сообщений: 22
1

Попадает ли дата в период

08.06.2020, 22:43. Показов 413. Ответов 3

Всем привет! Хотел написать функцию проверки даты в попадание в период. Собственно вот сама функция:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
bool Is_Date_In(string date, string date1, string date2) {
    int year, year1, year2;
    int month, month1, month2;
    int day, day1, day2;
 
    Str_toDate(date, &day, &month, &year);
    Str_toDate(date1, &day1, &month1, &year1);
    Str_toDate(date, &day2, &month2, &year2);
 
    if (
        (
        (year == year1 && month == month1 && day >= day1) ||
        (year == year1 && month >= month1) ||
        (year >= year1) 
        )
        &&
        (
        (year == year2 && month == month2 && day <= day2) ||
        (year == year2 && month <= month2) ||
        (year <= year2)
            )
        ) return true;
 
 
    else return false;
}
date — дата
date1 — начала периода
date2 — конец периода
Str_toDate() — функция распределяющая данные даты по day, month, year (date = "day.month.year", date1 = "day1.month1.year1", date2 = "day2.month2.year2").

Но функция работает не корректно. Выводит какие-то рандомные даты хотя указан период. Подскажите где что не так .
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
08.06.2020, 22:43
Ответы с готовыми решениями:

Найти список людей, чей день рождения попадает в заданный период
Здравствуйте, уважаемые форумчане! Только начал изучать язык Пролог и пока ещё мало что...

Найти входит ли дата в указаный период
Есть класс WeekEnd: public class WeekEnd { public DateTime StartDate { get; set; } ...

Попадает ли данная дата в промежуток
Добрый день! При изучении материала возникли затруднения: есть работник, который работает в...

Как проверить попадает ли дата в диапазон? Типа гороскоп
Здравствуйте! Задача такая: пользователь выбирает дату. Надо проверить в какой диапазон попадает...

3
653 / 466 / 183
Регистрация: 23.04.2019
Сообщений: 1,987
08.06.2020, 22:48 2
Цитата Сообщение от almaskazhymrat Посмотреть сообщение
Но функция работает не корректно. Выводит какие-то рандомные даты хотя указан период.
функция которую вы написали возвращает только true или false, если вы имеете ввиду проблемы с функцией Str_toDate, то можете показать её реализацию? тогда вам может подскажут
0
2414 / 1160 / 429
Регистрация: 08.11.2016
Сообщений: 3,232
09.06.2020, 10:13 3
almaskazhymrat, более прямой подход реализовать для Вашего типа данных (Date) перегрузку операторов сравнения ("==", "!=", ">", "<" и т.д.) и с помощью них определять попадание в диапазон
0
0 / 0 / 0
Регистрация: 02.12.2018
Сообщений: 22
09.06.2020, 15:49  [ТС] 4
AndryS1, Он работает идеально. Вот собственно код
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
void Str_toDate(string date, int *day, int *month, int *year) {
    
    string array[3];
    size_t position = 0;
    int index = 0;
    bool isLeap = false;
    bool isValidDate = true;
    
 
    while ((position = date.find('.')) != string::npos) {
        string token = date.substr(0, position);
        array[index] = token;
        date.erase(0, position + 1);
        index += 1;
    }
    array[index] = date;
 
    *day = atoi(array[0].c_str());
    *month = atoi(array[1].c_str());
    *year = atoi(array[2].c_str());
 
}
Мне бы исправить условия в if Is_Date_In(); Чую написал неправильно. Но лучше придумать не мог. По идее ведь существует такой код, не зря же в приложениях или на сайтах можно выделить дату и выбрать к примеру билет.

Добавлено через 17 минут
Annemessk, это как - то сложно. Думаю можно написать без него максимум в 10 строчек, но не получается)

Добавлено через 33 минуты
Вот еще вариант попробовал, но он тоже не работает(((
C++
1
2
3
4
5
if ((year > year1) && (year < year2)) return true;
    else if ((year == year1) && (month > month1)) return true;
    else if ((year == year1) && (month == month1) && (day >= day1)) return true;
    else if ((year == year2) && (month < month2)) return true;
    else if ((year == year2) && (month == month2) && (day <= day2)) return true;
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.06.2020, 15:49
Помогаю со студенческими работами здесь

Определить, попадает ли дата и время в требуемый интервал даты и времени
Есть 2 столбца: с датой и временем. В некоторых ячейках написан необходимый диапазон даты/времени....

Как проверить, попадает ли какая-нибудь заданная дата в диапазон?
Привет. В текстовой(текстовый формат) ячейке есть текст вида 08.10.05 - 22.10.05. Не можете...

Проверка попадает ли дата в интервал и перенос на другой лист этой строки
Всем доброго времени суток! В наличии код обхода листов книги Excel и сбора всей информации с них...

Ошибка в уловии ( if ). выбрать из списка только тех, чья дата рождения попадает в вводимый с клавиатуры промежуток.
Задача состояла в том, чтобы из списка выбрать только тех, чья дата рождения попадает в вводимый с...

Определить попадает ли дата, указанная в столбце comm3, в диапазон, заданный с помощью comm2, comm3
Помогите, пожалуйста, cформировать запрос. Имеется одна таблица, например tbl1, в ней есть 3...

Excel. Проверить включена ли дата в период (число-месяц(1)-число-месяц(2)
В общем суть такая:есть таблица. В этой таблице нужно рассчитать значение столбца Сезонность по...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru