Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.54/13: Рейтинг темы: голосов - 13, средняя оценка - 4.54
1 / 1 / 0
Регистрация: 13.10.2019
Сообщений: 70
.NET 4.x

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

19.02.2020, 19:33. Показов 2486. Ответов 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
1845 / 1187 / 501
Регистрация: 14.10.2018
Сообщений: 3,207
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
1845 / 1187 / 501
Регистрация: 14.10.2018
Сообщений: 3,207
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
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru