Находится ли выбранная дата в определённом диапазоне
Мне нужно узнать находится ли выбранная дата в определённом диапазоне дат(таких диапазонов 12). Можно ли это как-то сделать не создавая 25 переменных?
Само задание: создайте проект, позволяющий по дате рождения определить знак зодиака и увидеть картинку этого знака (использовать перечисление).
Ответы (2 шт):
Вот пример с числами:
int[][] ranges = new int[][] {
new int[] {1, 5},
new int[] {6, 10},
new int[] {11, 15},
new int[] {16, 20},
new int[] {21, 25},
new int[] {26, 30},
new int[] {31, 35}
};
int number = 17;
if (number < ranges[0][0] || number > ranges[ranges.GetLength (0) - 1][1])
System.Console.WriteLine ("Неверное число.");
else
foreach (var range in ranges)
if (number >= range[0] && number <= range[1]) {
System.Console.WriteLine ($"Число {number} находится в диапазоне [{range[0]};{range[1]}].");
break;
}
System.Console.ReadKey ();
Пример результата работы программы с числом 17:
Число 17 находится в диапазоне [16;20].
Таким образом можно проверять и даты. К примеру, есть диапазоны дней в году для знаков зодиака. Переводим дату в день года (05.01 в 5, к примеру) и проверяем таким кодом на соответствие какому-либо диапазону.
Предлагаю весьма необычное решение для такой задачи.
Возьмем входные данные и обьявим все нужные данные для фильтрации:
var monthToSearch = 01;
var dateToSearch = 23;
string zodiakName; //result
var startDates = ["01.22","02.19","03.21"];// дальше заполнишь сам
var zodiaks = new Dictionary<int, String>() {
{ 1, "Водолей" },
{ 2, "Рыбы" },
{ 3, "Овен" }
// дальше заполнишь сам
};
Обрати внимание что номер знака зодиака в половине случаев соответствует номеру из ключа дикшнари и номеру месяца который мы ищем.
И того весь наш поиск сводится к:
var startDate = startDates[ monthToSearch - 1];
startDay = startDate.split(".")[2];// здесь нужно привести к Int - не помню как єто делается, сейчас работаю с другим языком
zodiakName = (dateToSearch > startDay) ? zodiaks[monthToSearch] : monthToSearch[monthToSearch - 1]
Единственное что этот код не учитывает - это поиск Козерога. То есть если мы будем искать 1 месяц 21 число оно выдаст ошибку). Исправление этого поведения на тебе будет :) Это + 1 строка
Код не проверял а просто писал из головы, потому могут быть мелкие синтаксические ошибки. Возможны и мелкие логические, но их тоже будет просто найти в 3х строках кода.
Так же желательно переназвать переменные, их имена у меня кривые, влом придумывать хорошие.
Что бы полностью соответствовать задаче нужно заменить название знака в дикшинари на картинку -- Но тестить лучше с названиями.
Прошу заметить что решение без переборов и циклов. Вероятнее всего это одно из самых оптимальных по скорости решений. Хотя в этой задаче это абсолютно бесполезно
И да, тебя могут спалить что писала не ты если покажешь этот код)