Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 36, средняя оценка - 4.69
ejk
0 / 0 / 0
Регистрация: 14.05.2012
Сообщений: 81
#1

Разбиения множества - C++

18.05.2012, 19:38. Просмотров 4981. Ответов 82
Метки нет (Все метки)

Добрый вечер.
У меня есть множество точек в трехмерном пространстве, которые я считала и занесла в двухмерный массив. Задача состоит в том, чтобы рассмотреть все разбиения этого множества на два и сравнить их центры тяжести. Но как сравнить я знаю, а вот как разбить понятия не имею.
Например, если у меня три точки, то должно получится три варианта разбиения. Программирую на Си.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.05.2012, 19:38
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Разбиения множества (C++):

Число изъять из множества А, если оно является элементом множества А, но не является элементом множества В - C++
Введено с клавиатуры число изъять из множества А, если оно является элементом множества А, но не является элементом множества В. ...

Функция разбиения матрицы на две - C++
Доброго времени суток уважаемые форумчане. Столкнулся с проблемой. Необходимо написать функцию разбиения матрицы на две матрицы, в качестве...

Алгоритм разбиения массива на подмассивы - C++
Здравствуйте, помогите написать алгоритм есть массив элементов А вычисляются значения А10 А21 А20 ...

Программа разбиения строк на слова - C++
Привет всем. Прошу объяснить фрагмент когда строк 23-26 в данной программе #include<iostream> #include<cstdio> #include<locale> ...

Функция разбиения строки в части [C++] - C++
Всем доброго времени суток. Нужно написать условие, который разделит (через точки) строку line на lname, fname, mname Например: ...

Множества. Вычислить количество элементов множества Q, связанного c исходными множествами - C++
В общем задание звучит так : Заданы 3 упорядоченных множества F, G и H, представленные файлами f, g и h соответственно. Вычислить...

82
ejk
0 / 0 / 0
Регистрация: 14.05.2012
Сообщений: 81
20.05.2012, 13:38  [ТС] #31
Цитата Сообщение от UFO94 Посмотреть сообщение
fscanf(file,"%f%f%f",&pt[i][0],&pt[i][1],&pt[i][2]);
Да, я изначально хотела эту функцию брать, только не могла понять, как ее правильно использовать

Добавлено через 1 минуту
А вот там, где нужно рассчитать центр тяжести, нужны координаты точек в множестве. Как из извлекать?
0
UFO94
264 / 253 / 13
Регистрация: 04.04.2012
Сообщений: 546
20.05.2012, 13:40 #32
Цитата Сообщение от ejk Посмотреть сообщение
fscanf(file,"%d",&M[i][j]);
Ну так у вас эта функция и была использована....

Координаты точек хранятся в массиве pt(у вас он M). В массиве num лежат только номера точек, которые вошли в 1-ю группу.
0
ejk
0 / 0 / 0
Регистрация: 14.05.2012
Сообщений: 81
20.05.2012, 13:44  [ТС] #33
Цитата Сообщение от UFO94 Посмотреть сообщение
только номера точек
Которые являются номерами строк в двумерном массиве, так?

Добавлено через 1 минуту
Еще вопрос: откуда в вашем коде появляется m1?
0
UFO94
264 / 253 / 13
Регистрация: 04.04.2012
Сообщений: 546
20.05.2012, 13:50 #34
Цитата Сообщение от ejk Посмотреть сообщение
Которые являются номерами строк в двумерном массиве, так?
Да, все правильно.

Цитата Сообщение от ejk Посмотреть сообщение
Еще вопрос: откуда в вашем коде появляется m1?
m1 -- это счетчик уже выбраных точек. Т.е., допустим нам надо выбрать 10 точек. Мы выполняем много раз функцию grouping (ну, она скорее сама себя выполняет), и уже выбрали 4 точки, выбираем 5-ю. Тогда m1=4. При этом первые 4 элемента массива num содержат номера точек, которые мы уже выбрали.
0
ejk
0 / 0 / 0
Регистрация: 14.05.2012
Сообщений: 81
20.05.2012, 13:54  [ТС] #35
UFO94, а m тогда что такое?
0
UFO94
264 / 253 / 13
Регистрация: 04.04.2012
Сообщений: 546
20.05.2012, 14:04 #36
Полное количество точек, которые нам нужно выбрать. Функция grouping заканчивает считать, когда m1==m. Число m мы перебираем в основной программе от 1 (выбор только одной точки) до, исправьте, не (N+1)/2, а просто N/2, т.е. до половины всего количества точек с округлением вниз. Т.е., если у нас 9 точек, то мы сперва рассмотрим все разбиения 1 на 8 (1 точку выбираем), потом 2 на 7 (выбираем 2 точки), 3 на 6 (выбираем 3 точки), 4 на 5 (выбираем 4 точки). Разбиения 5 на 4, 6 на 3 и т.д. нас не интересуют, потому что они будут повторять разбиения 4 на 5, 3 на 6 и т.д., только выбраные и невыбраные точки поменяются местами.
0
ejk
0 / 0 / 0
Регистрация: 14.05.2012
Сообщений: 81
20.05.2012, 14:09  [ТС] #37
А не будет получаться так, что мы будем брать 1 на 8 и первая точка всегда будет первая в списке. Ну то есть по идее мы же должны перебрать все точки и к каждой еще 8 в другой группе собрать, так? Эта функция так делает?
0
UFO94
264 / 253 / 13
Регистрация: 04.04.2012
Сообщений: 546
20.05.2012, 14:24 #38
Эта функция делает так (совсем пошагово):
Хотим выбрать 1 точку, вызываем функцию//Это еще в main
___Функция выбирает точку №1
___--- сделали свои подсчеты для этого разбиения ---
___Функция выбирает точку №2
___--- сделали свои подсчеты для этого разбиения ---
___....
___Функция выбирает точку №9
___--- сделали свои подсчеты для этого разбиения ---
Хотим выбрать 2 точки//опять таки, это еще в мейн
___Функция выбирает первой точкой №1
______Функция выбирает второй точкой №2
______--- Подсчеты ---
______Функция выбирает второй точкой №3
______--- Подсчеты ---
______Функция выбирает второй точкой №4
______--- Подсчеты ---
______....
______Функция выбирает второй точкой №9
______--- Подсчеты ---
___Функция выбирает первой точкой №2
______Функция выбирает второй точкой №3
______--- Подсчеты ---
______Функция выбирает второй точкой №4
______--- Подсчеты ---
______Функция выбирает второй точкой №5
______--- Подсчеты ---
______....
______Функция выбирает второй точкой №9
______--- Подсчеты ---
........
___Функция выбирает первой точкой №7
______Функция выбирает второй точкой №8
______--- Подсчеты ---
______Функция выбирает второй точкой №9
______--- Подсчеты ---
___Функция выбирает первой точкой №8
______Функция выбирает второй точкой №9
______--- Подсчеты ---
Хотим выбрать 3 точки
... аналогично....
Хотим выбрать 4 точки
... аналогично ...
0
ejk
0 / 0 / 0
Регистрация: 14.05.2012
Сообщений: 81
20.05.2012, 14:35  [ТС] #39
Так. Все. Вроде с функцией разобралась. Такой вопрос: как сделать, чтобы он просто вывел это разбиение? Ну чтобы проверить правильно ли работает.
0
UFO94
264 / 253 / 13
Регистрация: 04.04.2012
Сообщений: 546
20.05.2012, 14:53 #40
Там, где я в комментариях поставил кучу !, пишем
C++
1
2
3
for(int i=0; i<m; i++)
printf("%d  ",num[i]);
printf("\n");
0
ejk
0 / 0 / 0
Регистрация: 14.05.2012
Сообщений: 81
20.05.2012, 15:00  [ТС] #41
На вот это ругается
C
1
c=getc(f);
0
UFO94
264 / 253 / 13
Регистрация: 04.04.2012
Сообщений: 546
20.05.2012, 15:25 #42
Как именно?
0
ejk
0 / 0 / 0
Регистрация: 14.05.2012
Сообщений: 81
20.05.2012, 15:35  [ТС] #43
UFO94, неизвестный идентификатор f
0
UFO94
264 / 253 / 13
Регистрация: 04.04.2012
Сообщений: 546
20.05.2012, 15:37 #44
А, черт побери, там вместо f надо file
0
ejk
0 / 0 / 0
Регистрация: 14.05.2012
Сообщений: 81
20.05.2012, 15:43  [ТС] #45
Он еще ругался на маленький n, но я переправила его на большой.
Выдает несуразицу
1
-336860192
11966294743
18621
0
20.05.2012, 15:43
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.05.2012, 15:43
Привет! Вот еще темы с ответами:

Реализация разбиения числа с Динам. Прогр - C++
Доброго времени суток. Нужна помощь: как с помощью динамического программирования реализовать решение такой вот задачи: &quot;найти...

Функция разбиения строки на отдельные слова - C++
Подскажите, плиз, как написать функцию разбиения строки на отдельные слова. Параметр функции — исходная строка, результат работы —...

Квадрат с вершинами из первого множества накрывает все точки второго множества и имеет минимальную площадь - C++
Даны два множества точек на плоскости. Выбрать четыре различных точки первого множества так, чтобы квадрат с вершинами в этих точках...

Множества . Найти разность полученного множества с заданным - C++
Всем доброго времени суток! Необходима ваша помощь. Никак не могу сделать второй пункт задачи.Суть задачи-найти 1)объединение множества...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
45
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.