Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.01.2014, 16:23   #1
Valera
Пользователь
 
Регистрация: 23.06.2008
Сообщений: 86
По умолчанию Пересечение числовых диапазонов

Добрый день.
Есть текстовый файл:
красные,501-1000
желтые,701-1000
красные,2001-3000 и т.д., где цифры - это номера на картах.
Задача: поступил заказ на карты - красные,701-1000. Нужно узнать есть ли уже карты с такой нумерацией?
Т.е. есть ли пересечение диапазонов?
Подскажите логику как искать это пересечение.
Valera вне форума Ответить с цитированием
Старый 20.01.2014, 16:38   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Т.е. есть ли такие в файле, или есть ли в файле повторы?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 20.01.2014, 17:43   #3
Valera
Пользователь
 
Регистрация: 23.06.2008
Сообщений: 86
По умолчанию

Да. Т.е. были ли уже карты с такой нумерацией?
Valera вне форума Ответить с цитированием
Старый 20.01.2014, 17:50   #4
VIK_aka_TOR
Участник клуба
 
Аватар для VIK_aka_TOR
 
Регистрация: 30.01.2011
Сообщений: 1,578
По умолчанию

Обозначим проверяемый диапазон как а1 и b1, а то что считываем из файла как а и b ( начало диапазона и конец соответственнр) тогда
Читаем файл пока не закончен
Если ( а1 >=а и а1 <= б) или ( b1 >= a и b1 <= b)
Вхождение есть
Иначе продолжаем смотреть файликз

Если сработало на Вхождение диапазона - прерывает цикл и выводим сообщение, если все отработали второй ветке - вхождений нет
пишу код не только за печеньки
VIK_aka_TOR вне форума Ответить с цитированием
Старый 20.01.2014, 17:57   #5
Valera
Пользователь
 
Регистрация: 23.06.2008
Сообщений: 86
По умолчанию

Мне кажется, что такое решение не описывает случай, когда проверяемый диапазон, например, шире того, что есть в файле. (в файле 500-600, а проверяемый 400-700).
Valera вне форума Ответить с цитированием
Старый 20.01.2014, 17:58   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Ну тады загружать файл в память и делать поиск. Зависит от языка программирования.
Скажем на Делфи:
Код:
With TStringList.Create do begin
 if Lines.IndexOf('красные,701-1000')<>-1 then Были такие
 free;
end;
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 20.01.2014, 18:06   #7
VIK_aka_TOR
Участник клуба
 
Аватар для VIK_aka_TOR
 
Регистрация: 30.01.2011
Сообщений: 1,578
По умолчанию

Цитата:
Сообщение от Valera Посмотреть сообщение
Мне кажется, что такое решение не описывает случай, когда проверяемый диапазон, например, шире того, что есть в файле. (в файле 500-600, а проверяемый 400-700).
Что ж... Верное замечание, тогда еще добавить через или и обратную проверку аналогично мной приведенную, но уже будет а1 на месте а и наоборот, аналогично с b и b1
пишу код не только за печеньки
VIK_aka_TOR вне форума Ответить с цитированием
Старый 20.01.2014, 18:06   #8
Valera
Пользователь
 
Регистрация: 23.06.2008
Сообщений: 86
По умолчанию

Язык Делфи. Уровень моей подготовки не позволяет быстро понять или мне достаточен такой ответ.

Цитата:
Сообщение от Stilet Посмотреть сообщение
Ну тады загружать файл в память и делать поиск. Зависит от языка программирования.
Скажем на Делфи:
Код:
With TStringList.Create do begin
 if Lines.IndexOf('красные,701-1000')<>-1 then Были такие
 free;
end;
Мне кажется, что таким способом мы определяем или есть точно такая же строка в заданом текстовом файле. если это так,, то это неправильный ответ.

Последний раз редактировалось Stilet; 20.01.2014 в 18:45.
Valera вне форума Ответить с цитированием
Старый 20.01.2014, 18:33   #9
VIK_aka_TOR
Участник клуба
 
Аватар для VIK_aka_TOR
 
Регистрация: 30.01.2011
Сообщений: 1,578
По умолчанию

Код:
flag := true;
while not f.eof do // читаем покуда не конец файла
begin
// тут считываем а и b из файла
if (((a1 >= a) and (a1<= b)) or ((b1 >= a) and (b1<= b))) or (((a >= a1) and (a<= b1)) or ((b >= a1) and (b<= b1))) then
  begin
    flag := false;
    break;
  end;

end;

if flag then
 showmessage('Не пересекаются')
else
 showmessage('Пересекаются');
пишу код не только за печеньки
VIK_aka_TOR вне форума Ответить с цитированием
Старый 20.01.2014, 18:39   #10
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

Хорошо..
Код:
for i := 1 to n do
   if (a[i].name = t.nm) and (p.lw >= a[i].lw) and (p.hg <= a[i].hg) then {}

Последний раз редактировалось Poma][a; 20.01.2014 в 18:45.
Poma][a вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Выбор значений из диапазонов Piano_Dreamer Microsoft Office Excel 5 26.09.2012 22:37
Сравнение 3-х диапазонов Severny Microsoft Office Excel 0 13.01.2012 12:23
Вычитание диапазонов gsg Microsoft Office Excel 7 23.06.2011 15:37
Сложение Диапазонов valerij Microsoft Office Excel 19 02.04.2009 13:52
Выбор диапазонов диаграмм apfu00 Microsoft Office Excel 4 03.02.2009 17:04