![]() |
|
Модераторы: bsa |
![]()
|
|
| Снежанна |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 12 Регистрация: 4.12.2008 Репутация: нет Всего: нет |
Здравствуйте, Уважаемые программисты! Я открыла для себя удивительный язык С++ совсем недавно. Да некоторых пор проблем не возникало (язык легко дается). Но вот задали задачку, к которой я не знаю, с какой стороны подобраться... Звучит она так: Найти такую точку заданного на плоскости множества точек, сумма расстояний от которой до остальных минимальна! Единственное, что я точно знаю, без многомерных массивов здесь не обойтись. Очень надеюсь на вашу помощь в решении этого вопроса! Заранее благодарна!
|
|||
|
||||
| kosmonaFFFt |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 538 Регистрация: 14.4.2008 Где: Иннополис Репутация: нет Всего: 5 |
Можно и без многомерных, обычного вектора (который std::vector) хватит.
-------------------- ![]() |
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
В принципе, действительно нет необходимости в многомерном массиве... Достаточно 2 одномерных:
1. массив координат точек (на N элементов) 2. массив сумм расстояний для каждой точки (на N элементов) Что делать - идешь по первому массиву и считаешь сумму расстояний для i-ой точки и записываешь в i-ый элемент второго массива. Затем находишь во втором массиве минимальный элемент - его индекс позволит узнать точку, которой он соответствует. |
|||
|
||||
| Garcian |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 125 Регистрация: 5.11.2008 Репутация: нет Всего: нет |
А, мы такое делали.. Ток не вышло ничего)
Это сообщение отредактировал(а) Garcian - 10.12.2008, 20:11 --------------------
Неродивый студент |
|||
|
||||
| Снежанна |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 12 Регистрация: 4.12.2008 Репутация: нет Всего: нет |
Впринципе понятно... Только с геометрией не все хорошо,
|
|||
|
||||
| GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 6 Всего: 26 |
случай клинический...
есть множество точек {(x,y)} искомая точка это (Xсредн,Yсредн) какие многомерные массивы... какие std::vector.... математику учить в школе надо было Добавлено через 1 минуту и 20 секунд бред какой %) |
|||
|
||||
| Снежанна |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 12 Регистрация: 4.12.2008 Репутация: нет Всего: нет |
Может и бред... раздел для новичков)
|
|||
|
||||
| GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 6 Всего: 26 |
Снежанна, какой пример? как среднее арифметическое считать? я как-то забыл как это делается, потому не могу написать, и учебника за 5й класс под рукой нету =\
|
|||
|
||||
| Снежанна |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 12 Регистрация: 4.12.2008 Репутация: нет Всего: нет |
Мне понять как это в программе осущетвить. А среднее арифмитическое могу напомнить
|
|||
|
||||
| J0ker |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 986 Регистрация: 17.9.2008 Репутация: 9 Всего: 14 |
а может он не просто так что-то мне это видится более чем не очевидно Добавлено через 8 минут и 28 секунд или вы имели ввиду средневзвешенное? |
|||
|
||||
| bsa |
|
||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
расстояние между двумя точками считается, как квадратный корень из суммы квадратов разностей координат:
Добавлено через 2 минуты и 31 секунду
|
||||||
|
|||||||
| Dmi3ev |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1698 Регистрация: 28.11.2007 Репутация: 13 Всего: 41 |
когда-то писал, может пригодится:
тут класс точки и класс прямой, прямая может возвращать расстояние между точками, которыми задана, tg угла наклона и смещение, те короче y=kx+b, она может вернуть k, b, а также расстояние между точками, которыми задана... <myline.h>
а это <mypoint.h>
-------------------- |
||||
|
|||||
| GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 6 Всего: 26 |
Признаю я был не прав. Среднее арифметическое там не подходит хотя бы потому что оно выдает точку не обязательно принадлежащую к множеству заданных точек.
Однако я заметил что C++ убило мозг участников форума, т.к. никто так и не попытался решить задачу математически. При беглом анализе, очевидно что для вырожденного случая с 2я точками обе точки являются решениями, также точки могут совпадать друг с другом. Для вырожденного случая когда все точки находятся на одной прямой, если число точек нечетно, решением является "средняя" точка, если четно - две "средние" точки. Я не проверял, но с большой долей вероятности "средней" точкой является точка ближайшая к центру масс, т.е. к среднему арифметическому координат точек. |
|||
|
||||
| Dmi3ev |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1698 Регистрация: 28.11.2007 Репутация: 13 Всего: 41 |
Наоборот. Мозг ищет более рациональное решение. Мне, допустим, легче сначала решить эту задачу программно в лоб, а потом, если время позволит произвести анализ решения. -------------------- |
|||
|
||||
| GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 6 Всего: 26 |
Модератор: Сообщение скрыто. |
|||
|
||||
| J0ker |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 986 Регистрация: 17.9.2008 Репутация: 9 Всего: 14 |
||||
|
||||
| GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 6 Всего: 26 |
J0ker, при одинаковых массах совпадают. Я привел такую формулировку для удобного перехода от более очевидного физического подхода к формулировке задачи к менее очевидному математическому.
upd: убрал очипятку) поспешишь.... Это сообщение отредактировал(а) GoldFinch - 11.12.2008, 21:00 |
|||
|
||||
| Снежанна |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 12 Регистрация: 4.12.2008 Репутация: нет Всего: нет |
Спасибо, bsa, Dmi3ev (хотя я не совсем представляю, как воспользоваться <mypoint.h>). Также, мне необхадимо указать все некорректные ситуации. Что это значит?
|
|||
|
||||
| J0ker |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 986 Регистрация: 17.9.2008 Репутация: 9 Всего: 14 |
при одинаковых массах точек тогда да Добавлено через 1 минуту и 55 секунд но это интуитивное решение... надо-бы как-то подкрепить док-вом... впрочем я думаю оно легко выводится и так оно и будет |
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
Это значит, что ты должна указать все ситуации, когда твоя программа будет работать некорректно. Например, если есть более одной искомой точки (частные варианты: все точки в одном месте, всего 2 точки, все точки в вершинах правильных N-угольков), или всего одна точка в массиве. |
|||
|
||||
| Dmi3ev |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1698 Регистрация: 28.11.2007 Репутация: 13 Всего: 41 |
Столько споров, давайте посмотрим, я набросал решение (оно не идеально, но...):
Центр масс имеет место быть ))) По-моему мнению. А вото mypoint.h
Добавлено через 7 минут и 27 секунд хотя алгоритм нахождения центра масс фигуры, а потом сравнивание этого центра с каждой точкой (какая ближе)... хз, по-моему, так проще, хотя, может, прав не я... -------------------- |
||||
|
|||||
| Dmi3ev |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1698 Регистрация: 28.11.2007 Репутация: 13 Всего: 41 |
Вообщем, как говорится, ЧТД
Решил двумя способами, 1-сумма расстояний, 2-расстояние до центра масс, ответы совпадают )))
-------------------- |
|||
|
||||
| J0ker |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 986 Регистрация: 17.9.2008 Репутация: 9 Всего: 14 |
||||
|
||||
| Dmi3ev |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1698 Регистрация: 28.11.2007 Репутация: 13 Всего: 41 |
J0ker, Вы не юрист? или математик? просто эти люди любят к словам докапываться. Хорошо, не чтд. Скажу так, данная программа выдает из 10(0) раз одинаковые решения обоими способами, я задавал множество и побольше размером, точно все также... Вобщем, на доказательство не претендую, но ... Мне кажется все стало ясно... Себе я доказал, что хотел... Решил поделиться с другими своими изысканиями... Но другие слишком умные... Можно еще не только целые координаты задавать(у меня они только целые в программе)... Я согласен с тем, что это доказательство не может считаться неопровержимым. Да я и не в том смысле говорил чтд. Я имел в виду, что догадки GoldFinch да и ваши тоже оказались подкреплены и программой...
-------------------- |
|||
|
||||
| J0ker |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 986 Регистрация: 17.9.2008 Репутация: 9 Всего: 14 |
я бы на месте препода точно-бы докопался
Добавлено через 1 минуту и 12 секунд ну звиняйте для меня чтд означает "что и требовалось доказать" |
|||
|
||||
| Dmi3ev |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1698 Регистрация: 28.11.2007 Репутация: 13 Всего: 41 |
я ж говорю, шибко умный ВЫ -------------------- |
|||
|
||||
| GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 6 Всего: 26 |
||||
|
||||
| Kallikanzarid |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 240 Регистрация: 9.11.2008 Репутация: 2 Всего: 3 |
Добавлю, что лучше в таком случае считывать x- и y-координаты в бинарные деревья, чтобы потом быстро найти точку, ближе всего лежащую к среднему арифметическому.
|
|||
|
||||
| Dmi3ev |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1698 Регистрация: 28.11.2007 Репутация: 13 Всего: 41 |
GoldFinch! Докажи обратное))) Если бы ты сидел со мной рядом и я бы тебе сказал, что точки принадлежащие одной прямой не лежат в одной плоскости, или, что шар квадратный, ты вряд ли бы стал спорить))) А кричать о том, что ты умный, не значит быть умным))) Скорее это значит обратное))) Что конкретно в программной реализации тебя не устраивает??? По делу говори, а не посты зарабатывай...))) заметно, незаметно... Удачи... -------------------- |
|||
|
||||
| Ln78 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 274 Регистрация: 25.11.2006 Репутация: нет Всего: 15 |
Dmi3ev, это инженерное доказательство, но не математическое. Если математическое, то примерно так: ![]() В производной здесь опечатка, понятно, что если дифференцируем по x, то игрековой части не будет. Лень перерисовывать. Это сообщение отредактировал(а) Ln78 - 12.12.2008, 20:28 |
|||
|
||||
| Dmi3ev |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1698 Регистрация: 28.11.2007 Репутация: 13 Всего: 41 |
Ln78, да я не претендовал на доказательство математическое. Просто пока разводились базары, решил быстренько написать программку, которая собственно и являлась целью вопроса автора. Но когда я её написал, опять начались базары, только уже по поводу того, что я не совсем правильно выразился, сказал чтд, ***ны в рот. Но я так сказал, всего лишь потому, что решил двумя способами, они давали, как предполагалось одинаковое решение. И тут вдруг опять споры... Ненавижу эти споры... Всё, доказывайте, спорьте, делайте, что хотите, для меня все ясно с самого начала... Всем удачи...
-------------------- |
|||
|
||||
| GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 6 Всего: 26 |
||||
|
||||
| J0ker |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 986 Регистрация: 17.9.2008 Репутация: 9 Всего: 14 |
||||
|
||||
| Снежанна |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 12 Регистрация: 4.12.2008 Репутация: нет Всего: нет |
а что за функция рандом? Компилятор не распознает.
|
|||
|
||||
| J0ker |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 986 Регистрация: 17.9.2008 Репутация: 9 Всего: 14 |
|
||||
|
|||||
| Снежанна |
|
||||
![]() Новичок Профиль Группа: Участник Сообщений: 12 Регистрация: 4.12.2008 Репутация: нет Всего: нет |
Вообщем выдает 2 ошибки...
В чем проблема? |
||||
|
|||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
for (int i=1; i<n; i++) и в самом конце текста добавьте пустую строку. |
|||
|
||||
| Dmi3ev |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1698 Регистрация: 28.11.2007 Репутация: 13 Всего: 41 |
mes, спасибо, а то она в личку пишет, почему не работает??? а я не знаю, у меня на компе рабочая версия этой проги, я же не знаю, что она видоизменяет после моего написания
Снежанна, то, что после // можно и убрать, я просто тебе отослал с ними, потому, что быстро исправлял... а ты могла бы и навести красоту, ты же девушка... -------------------- |
|||
|
||||
| bsa |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
Снежанна, вот это:
|
||||
|
|||||
| Снежанна |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 12 Регистрация: 4.12.2008 Репутация: нет Всего: нет |
уж извините, что в универе на компах 90х приходится с Борландом работать
Это сообщение отредактировал(а) Снежанна - 24.12.2008, 20:40 |
|||
|
||||
| Снежанна |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 12 Регистрация: 4.12.2008 Репутация: нет Всего: нет |
Да и еще, до этого я составляла только входные и выходные файлы. А как сделать файл протокола, который содержал бы в себе оба этих файла, так и еще показывал все промежуточные рассчеты и неккоректные ситуации (с которыми, собственно говоря, тоже не успеваю разобраться), покажите, пожалуйста
|
|||
|
||||
![]()
|
| Правила форума "C/C++: Для новичков" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |