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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 26.04.2015, 21:40   #1
Neostat
Пользователь
 
Регистрация: 19.10.2014
Сообщений: 49
По умолчанию Задача Delphi на мн-ва

Пусть заданы n отрезков с целочисленными координатами концов.Координаты концов находятся в диапазоне от 0 до 100 включительно.Определите существует ли такая точка с целочисленными координатами,которая принадлежит всем этим отрезкам.

Уважаемые форумчане,помогите пожалуйста решить эту задачу.Дело в том,что я не совсем понимаю,как задать отрезки на множестве.

В голове крутится только одна мысль:
-создать тип Отрезок(запись с коорд. отрезка)
- и мн-во типа Отрезок.

Наверное это полные бред,покажите пожалуйста как правильно надо.Мне не нужно решать задачу,а просто как задать эти отрезки на мн-ве(я так понимаю отрезки мы будем с клавиатуры вводить)
Neostat вне форума Ответить с цитированием
Старый 26.04.2015, 21:46   #2
Вадим Мошев

Старожил
 
Аватар для Вадим Мошев
 
Регистрация: 12.11.2010
Сообщений: 8,568
По умолчанию

Цитата:
-создать тип Отрезок(запись с коорд. отрезка)
Вот это правильно
Цитата:
- и мн-во типа Отрезок.
Вот это сделать у вас не получится. Лучше делайте массив записей-отрезков.
Вадим Мошев вне форума Ответить с цитированием
Старый 26.04.2015, 21:47   #3
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

Дык тут наипростецкий случай сканирующей прямой, не?
Poma][a вне форума Ответить с цитированием
Старый 26.04.2015, 21:48   #4
Neostat
Пользователь
 
Регистрация: 19.10.2014
Сообщений: 49
По умолчанию

Цитата:
Сообщение от Вадим Мошев Посмотреть сообщение
Вот это правильно

Вот это сделать у вас не получится. Лучше делайте массив записей-отрезков.
Я сделал через массив записей,препод сказал через мн-ва делать(
Neostat вне форума Ответить с цитированием
Старый 26.04.2015, 21:50   #5
Вадим Мошев

Старожил
 
Аватар для Вадим Мошев
 
Регистрация: 12.11.2010
Сообщений: 8,568
По умолчанию

Множество не может содержать записи.
Вадим Мошев вне форума Ответить с цитированием
Старый 26.04.2015, 21:51   #6
Neostat
Пользователь
 
Регистрация: 19.10.2014
Сообщений: 49
По умолчанию

Цитата:
Сообщение от Вадим Мошев Посмотреть сообщение
Множество не может содержать записи.
А как тогда по-другому сделать? Я просто не знаю как можно решить эту задачу используя мн-ва
Neostat вне форума Ответить с цитированием
Старый 26.04.2015, 21:55   #7
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,429
По умолчанию

"Прикрутить" множества можно.
Взять два пустых множества. Найти минимальное и максимальное значение для начал и концов отрезков. Заполнить одно множество числами от минимального начала до максимального начала, а другое - от минимального конца до максимального конца. Затем найти пересечение множеств и проверить его на пустоту.

Второй подход:
Взять множество, содержащее все точки от 0 до 100. Преобразовывать каждый отрезок во множество точек, которое он покрывает, и находить пересечение с этим множеством (накапливать пересечения). В конце проверить полученное множество на пустоту.

ПС Это первое, что пришло в голову. Могут быть и более элегантные способы применения множеств.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )

Последний раз редактировалось BDA; 26.04.2015 в 22:00.
BDA вне форума Ответить с цитированием
Старый 26.04.2015, 21:56   #8
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

Цитата:
Сообщение от Вадим Мошев Посмотреть сообщение
Множество не может содержать записи.
А и не будем. Преп - умница! Прально он все говорит
Делаем так :
Код:
s := [];
for i := 1 to n do begin
     Read(a, b);
     for j := 1 to a-1 do
          s :=s-[j];
     for j := b+1 to 100 do
          s :=s-[j];
end;
for i := 1 to 100 do
   if i in s then begin
       WriteLn(i); Break
   end
Poma][a вне форума Ответить с цитированием
Старый 26.04.2015, 21:58   #9
Neostat
Пользователь
 
Регистрация: 19.10.2014
Сообщений: 49
По умолчанию

Цитата:
Сообщение от Poma][a Посмотреть сообщение
А и не будем. Преп - умница! Прально он все говорит
Делаем так :
Код:
s := [];
for i := 1 to n do begin
     Read(a, b);
     for j := 1 to a-1 do
          s :=s-[j];
     for j := b+1 to 100 do
          s :=s-[j];
end;
for i := 1 to 100 do
   if i in s then begin
       WriteLn(i); Break
   end

Спасибо огромное,выручили)

Последний раз редактировалось Poma][a; 26.04.2015 в 22:01.
Neostat вне форума Ответить с цитированием
Старый 26.04.2015, 22:02   #10
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

Только я наврал чуть-чуть.. Должно быть идти нужно от 0
Poma][a вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
задача в Delphi Elena21 Помощь студентам 0 15.10.2013 23:54
Задача на Delphi UnoMain Помощь студентам 1 24.04.2011 16:20
Задача в Delphi Oksana11 Помощь студентам 3 22.12.2007 00:12