1 / 1 / 0
Регистрация: 13.10.2019
Сообщений: 70
.NET 4.x

Временные промежутки

19.02.2020, 19:33. Показов 2537. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Даны даты бронирования номера в отеле. Пример:
14.09.2019 02.10.2019
18.10.2019 02.11.2019
Выяснить можно ли добавить период для нового бронирования. Например, для указанного выше примера период "01.10.2019 05.10.2019" добавлять нельзя, так как первые два дня уже забронированы.
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
19.02.2020, 19:33
Ответы с готовыми решениями:

Оптимизирует ли компилятор временные переменные?
Здравствуйте, способен ли компилятор преобразовать это var temp = one + two; return temp; в это? return one + two;

Удалить временные файлы после действия
Доброго времени суток! В процессе выполнения программы формируются временные файлы ("C:/temp/interim.pdf") как eго удалить...

PhantomJS где хранится временные данные ?
PhantomJS как пишется и как есть консольный браузер и логично что после выполнения нету никаких следов (файлов) но вот с web Telegram так...

7
 Аватар для Enifan
1849 / 1192 / 501
Регистрация: 14.10.2018
Сообщений: 3,228
19.02.2020, 20:34
Лучший ответ Сообщение было отмечено Th1stle как решение

Решение

Th1stle,
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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
using System;
using System.Collections.Generic;
 
class Program
{
    static void Main()
    {
        // 14.09.2019   02.10.2019
        // 18.10.2019   02.11.2019
        List<DateTime[]> listing = new List<DateTime[]>
        {
            new DateTime[] { new DateTime(2019, 09, 14), new DateTime(2019, 10, 02) },
            new DateTime[] { new DateTime(2019, 10, 19), new DateTime(2019, 11, 02) }
        };
 
        // 01.10.2019   05.10.2019
        DateTime[] newData = new DateTime[] { new DateTime(2019, 10, 01), new DateTime(2019, 10, 05) };
        bool check = true;
 
        /*
         * Если дата бронируется включительно, используем сравнения >= и <=
         * Если в один день возможно снять бронь и поставить новую, используем сравнения > и <
         */
        foreach (var lst in listing)
        {
            if (newData[0] >= lst[0] && newData[0] <= lst[1] ||
                newData[1] >= lst[0] && newData[1] <= lst[1] ||
                newData[0] <= lst[0] && newData[1] >= lst[1])
            {
                Console.WriteLine("Мест нет. Бронь не возможна.");
                check = false;
                break;
            }
        }
 
        if (check)
        {
            Console.WriteLine("Есть свободное место. Происходит бронь.");
            listing.Add(newData);
        }
 
        Console.ReadKey();
    }
}
1
3566 / 2507 / 1174
Регистрация: 14.08.2016
Сообщений: 8,219
19.02.2020, 20:55
я бы предложил нечто такое
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
    struct Period
    {
        public DateTime Start { get; set; }
        public DateTime End { get; set; }
        public bool IsIntersect(Period other) => (Start < other.End & End > other.End) || (End < other.Start & Start > other.End);
        public Period(DateTime start, DateTime end)
        {
            Start = start > end ? start : end;
            End = start > end ? end : start;
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            var per1 = new Period(new DateTime(2019, 9, 14), new DateTime(2019, 10, 2));
            var per2 = new Period(new DateTime(2019, 10, 1), new DateTime(2019, 10, 5));
            Console.WriteLine(per1.IsIntersect(per2));
        }
    }
1
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
19.02.2020, 21:31
Цитата Сообщение от Diamante Посмотреть сообщение
C#
1
(Start < other.End & End > other.End) || (End < other.Start & Start > other.End);
Цитата Сообщение от Enifan Посмотреть сообщение
C#
1
2
3
(newData[0] >= lst[0] && newData[0] <= lst[1] ||
                newData[1] >= lst[0] && newData[1] <= lst[1] ||
                newData[0] <= lst[0] && newData[1] >= lst[1])
Малость с проверками перемудрили.
Два временных промежутка A и B не пересекаются, если A заканчивается раньше, чем начинается B или A начинается позже, чем заканчивается B:
C#
1
bool doNotIntersect = A.End < B.Start || A.Start > B.End;
Пересекаются, следовательно — обратное этому, или по Де Моргану:
C#
1
bool intersect = A.End >= B.Start && A.Start <= B.End;
Строгость проверок — в зависимости от условий задачи.
2
 Аватар для Enifan
1849 / 1192 / 501
Регистрация: 14.10.2018
Сообщений: 3,228
19.02.2020, 21:39
Diamante, структура - идея хорошая, явно лучше массива.
Однако проходясь отладчиком заметил что Start и End должны быть наоборот. Или я что то путаю.
0
3566 / 2507 / 1174
Регистрация: 14.08.2016
Сообщений: 8,219
19.02.2020, 22:11
kolorotur, я с проверкой не особо заморачивался, я развернул решение в сторону ООП

Добавлено через 4 минуты
Enifan, ну да, запутался чуть-чуть, устал уже, глаза в кучу, но это уже нюансы

Добавлено через 21 минуту
kolorotur, ан нет, не перемудрил, сравнение может идти как с периодом до, так и после, и при проверке с периодом до, конец периода будет позже => true, но по факту пересечения не будет

Добавлено через 3 минуты
но допилить логику надо
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
19.02.2020, 22:56
Цитата Сообщение от Diamante Посмотреть сообщение
не перемудрил, сравнение может идти как с периодом до, так и после
Сравнение с периодом до — вторая проверка, сравнение с периодом после — первая.
В любом случае достаточно двух проверок.
0
3566 / 2507 / 1174
Регистрация: 14.08.2016
Сообщений: 8,219
20.02.2020, 08:23
ну как то так
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
    struct Period
    {
        public DateTime Start { get; set; }
        public DateTime End { get; set; }
        public bool IsIntersect(Period other) =>  End >= other.Start && Start <= other.End;
        public Period(DateTime start, DateTime end)
        {
            Start = start < end ? start : end;
            End = start > end ? start : end;
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            var per1 = new Period(new DateTime(2019, 9, 14), new DateTime(2019, 10, 2));
            var per2 = new Period(new DateTime(2019, 10, 8), new DateTime(2019, 10, 10));
            Console.WriteLine(per1.IsIntersect(per2));
        }
    }
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
20.02.2020, 08:23
Помогаю со студенческими работами здесь

Как воспроизводить mp3 через определенные промежутки времени
Допустим, есть кнопка button1. Как сделать так, что бы после нажатия на неё через определённые промежутки времени воспроизводился...

Отправка писем на почтовые ящики через определенные промежутки времени
Делаю программу которая будет отправлять емайлы через промежуток времени . вот код ; private void timer1_Tick(object sender,...

Прибавление к заданному числу единицы в цикле через определенные промежутки времени
помоги те пожалуйся решил попробовать цикл в C# не нашел то что мне нужно, помогите пожалуйся) Вот цель моя: я в текст...

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

МНК + Временные ряды
Сомневаюсь, что кому то это понадобится, но выложу. Реализованы: 1 метод МНК (линейная зависимость и $эластичность$) 2 анализ...


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

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

Новые блоги и статьи
Валидация и контроль данных табличной части документа перед записью
Maks 22.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в КА2. Задача: контроль и валидация данных табличной части документа перед записью с учетом регламента компании. . .
Отчёт о затраченных материалах за определенный период с макетом печатной формы
Maks 21.04.2026
Отчёт из решения ниже размещён в конфигурации КА2. Задача: разработка отчёта по затраченным материалам за определённый период, с возможностью вывода печатной формы отчёта с шапкой и подвалом. В. . .
Отчёт о спецтехнике находящейся в ремонте
Maks 20.04.2026
Отчёт из решения ниже размещен в конфигурации КА2. Задача: отобразить спецтехнику, которая на данный момент находится в ремонте. Есть нетиповой документ "Заявка на ремонт спецтехники" который. . .
Памятка для бота и "визитка" для читателей "Semantic Universe Layer (Слой семантической вселенной)"
Hrethgir 19.04.2026
Сгенерировано для краткого описания по случаю сборки и компиляции скелета серверного приложения. И пусть после этого скажут, что статьи сгенерированные AI - туфта и не интересно. И это не реклама -. . .
Запрет удаления строк ТЧ документа при определённом условии
Maks 19.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "Аккумуляторы", разработанного в конфигурации КА2. У данного документа есть ТЧ, в которой в зависимости от прав доступа. . .
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru