Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ Вершины квадрата

Автор: Софа 7.05.2007 18:52

Узнала о Вашем форуме и хочу, чтобы мне помогли решить такую задачу. Пожалуйста, помогите!!!

На плоскости заданы N точек с координатами (х1, у1), (х2, у2), ... , (хN, yN). Написать программу, которая из этих точек выделяет вершины квадрата, содержащего максимальное число заданных точек. (Предполагается, что точки, расположенные на сторонах квадрата принадлежат ему.)

Софа

Автор: klem4 9.05.2007 13:52

1) Именно квадрат, не прямоугольник ?
2) Ну первое что приходит в голову - перебор всех пар точек, берем очередные две точки, (проверяем являются ли стороны построенные по этим точкам равными по длине (для прямоугольника проверка не нужна)), затем идем по оставшимся точкам, и смотрим входит ли данная точка в наш прямоугольник (квадрат), затем если количество вошедших точке больше текущего максимума, запоминаем новый максимум и точки на которых был построен прямоугольник (квадрат)

Автор: Софа 10.05.2007 12:39

Теоретически я все понимаю, а как это реализовать конкретно в программе? Если можно, то напишите полностью программу. Буду очень признательна. Софа

Автор: Lapp 10.05.2007 14:39

Цитата(Софа @ 10.05.2007 9:39) *

Теоретически я все понимаю ... Софа

Софа, пожалуйста, изложи алгоритм - или в любом другом виде - то, что ты понимаешь

klem4, я не совсем тебя понял.. Что значит:
Цитата
берем очередные две точки, (проверяем являются ли стороны построенные по этим точкам равными по длине

?

Автор: Софа 10.05.2007 15:26

Честно, я сама не понимаю условия. Речь все-таки идет о квадрате. Я так думаю, на плоскости есть множество точек. Может надо привести к квадратной матрице? А как вы думаете? Софа

Автор: klem4 10.05.2007 17:54

Цитата
klem4, я не совсем тебя понял.. Что значит:


2 точки

Левая верхняя: (0; 2)
Правая нижняя: (2; 0)

- годится, эти точки образуют квадрат

Левая верхняя: (0; 2)
Правая нижняя: (3; 0)

Не годится, это не квадрат.

Автор: Lapp 11.05.2007 4:32

Klem4, как я понял, ты предполагаешь, что стороны квадрата параллельны осям координат.. Почему? В условии этого нет. Поэтому любая пара точек годится, если строить на ней квадрат, как на диагонали. После этого следует проверить остальные две вершины на принадлежность множеству. И еще нужно проверить возможность построения квадрата по этим точкам, как вершинам на одной стороне..
Короче, я бы не стал, пожалуй, рассматривать пары точек - я бы сразу рассмотрел четверки. Даже рассмотрение троек будет сложнее алгоритмически.. В любом случае, нахождение условия, являются ли данные 4 точки вершинами квадрата - отдельная песня smile.gif.

Софа, как совместить эти два твои высказывания:

Цитата(Софа @ 10.05.2007 9:39) *
Теоретически я все понимаю
и
Цитата(Софа @ 10.05.2007 12:26) *
я сама не понимаю условия
- а?..
Написание программы - это на 90% - ясное понимание и алгоритм, и лишь на 10% - написание самой программы с отладкой. И если ты не можешь помочь с главным, то хотя бы не торопи с второстепенным. Внося путаницу, ты просто мешаешь нам помочь тебе.
Если ты действительно хочешь помочь, проясни, пожалуйста, условие. Выясни, в каком виде задаеются координаты точек: это integer или real? Если окажется real, то узнай, с какой точностью производить сравнение чисел. Если ты это выяснишь (как я понимаю, у преподавателя), то будет реальная польза.
Сигналь, поняла ли ты меня, или я колебал воздух впустую..

Автор: Софа 11.05.2007 11:55

Я сегодня постараюсь узнать

Автор: Софа 11.05.2007 12:58

Координаты точек должны задаваться integer. Софа

Автор: klem4 11.05.2007 19:49

Цитата
Klem4, как я понял, ты предполагаешь, что стороны квадрата параллельны осям координат..


Да, я так предполагал ... ошибочно.