Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: Программирование на языке Pascal


РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / Pascal

Выпуск № 239
от 02.11.2006, 09:05

Администратор:Калашников О.А.
В рассылке:Подписчиков: 207, Экспертов: 49
В номере:Вопросов: 1, Ответов: 1


Вопрос № 60301: Здравствуйте! Помогите плз, что называется, как можете. Теряюсь в мыслях и не знаю как подойти к задаче. Зарание здоровенное спасибо! Задача: Дано n (2<n<20) прямоугольников, стороны которых параллельны осям координат. Кажд...

Вопрос № 60.301
Здравствуйте!
Помогите плз, что называется, как можете. Теряюсь в мыслях и не знаю как подойти к задаче. Зарание здоровенное спасибо!

Задача:
Дано n (2<n<20) прямоугольников, стороны которых параллельны осям координат. Каждый прямоугольник характирезуется кординатами верхнего левого и ему противополжного углами.

Прямоугольники могут пересекаться. Если они пересекаются, то их пересечением может быть одна точка, отрезок или прямоугольник (в некоторых случаях квадрат). Напишите прогу, которая определила бы пересечение прямоугольников , если оно существует.

Начальные данные читаются из файла dano.txt. На первой строчке написано число n. В остальных n строчках написано по четыре целых числа из интервала [-1000; 1000], разделенных пробелами: первое число – х координата верхнего левого угла прямоугольника, второе – тогоже угла у координата, третье – противоположного угла x координата, четвертое – противоположного угла у координата.

Результат заносится в файл rez.txt.
Если не пересикаются, пишется НЕ ПЕРЕСЕКАЮТСЯ.
Если пересекаются в точке, пишется ТОЧКА_х_у (координаты)
Если место пересечения отрезок, пишется ОТРЕЗОК, координаты точки,верхнего или левого конца отрезка (x ir y) и координаты другого конца отрезка (x, y). Все числа, просто, через пробел.
Если площадь пересечения квадрат или прямоугольник: пишется КВАДРАТ или ПРЯМОУГОЛЬНИК, координаты верхнего левого угла и координаты противоположного угла, через пробел.

Приложение:

Отправлен: 26.10.2006, 22:32
Вопрос задал: Dr1m (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Сухомлин Кирилл Владимирович
Здравствуйте, Dr1m!
Кроме того, что числа означают координаты вершин, они означают координаты сторон. И если порисовать пересекающихся (и не только) прямоугольников, то можно заметить, что при пересечении двух прямоугольников левая сторона имеет горизонтальную координату максимальной из координат левых сторон этих двух прямоугльников. И аналогично для остальных сторон. Т.е. для прямоугольников:
(x1a, y1a, x2a, y2a)
(x1b, y1b, x2b, y2b)
пересечением будет:
(max(x1b,x1a), max(y1b,y1a), min(x2b,x2a), min(y2b,y2a))
На всякий случай напомню, что в программировании ось Oy направлена вниз.
Остается осознать два факта:
1) Эта формула верна для любого кол-ва прямоугольников (тогда функции надо брать на всех интервалах)
2) (x1 > x2) или (y1 > y2) тогда и только тогда, когда пересечение пустое.
Здесь x1=max(x1a, x1b, ...) x2=min(x2a, x2b, ...) и аналогично для y.
Итого:
1. Прочитать данные в 4 массива (или в один двумерный)
2. Найти на них максимумы/минимумы и записать это в 4 переменных
3. На основе сравнения этих переменных выдать ответ.
Последний пункт я вам даже в виде кода приведу (см. приложение)
Разумеется, там надо еще добавить разделители между числами при выводе и вообще, всю программу написать. Но я итак достаточно подробно все разжевал.
ЗЫ: У нас была точно такая же задача на какой-то олимпиаде по программированию. Совершенно не помню, ни класс, (9,10,11), ни этап (рай., гор., обл.) Хотя по сложности тянет на районную. Даже для 9-го.

Приложение:

---------
Не узнаешь - не попробуешь.

Ответ отправил: Сухомлин Кирилл Владимирович (статус: Практикант)
Ответ отправлен: 27.10.2006, 02:24
Оценка за ответ: 5
Комментарий оценки:
Очень доходчево_объяснили, спасибо


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2006, Портал RusFAQ.ru, Россия, Москва.
Идея, дизайн, программирование: Калашников О.А.
Email: adm@rusfaq.ru, Тел.: +7 (926) 535-23-31
Авторские права | Реклама на портале
Версия системы: 4.37 от 04.10.2006
Яндекс Rambler's Top100

В избранное