Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
0 / 0 / 0
Регистрация: 28.11.2010
Сообщений: 25
1

Множество точек.Найти множество треугльники

11.12.2010, 09:34. Показов 1309. Ответов 5
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
ДАно 3n точек на плоскости , причем не какие три не лежат на одной прямой. Построить множество треугольников с вершинами в этих точках так что бы не какие 2 треугольника не пересекались и не содержали друг друга.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
11.12.2010, 09:34
Ответы с готовыми решениями:

На плоскости заданы множество точек А и множество прямых В (каждая прямая задается значениями коэффициентов ур
На плоскости заданы множество точек А и множество прямых В (каждая прямая задается значениями...

На плоскости заданы множество точек А и множество прямых B
На плоскости заданы множество точек А и множество прямых B. Найти две такие различные точки из А,...

На плоскости задано множество точек. Выбрать три различные точки так, чтобы проходящая через них окружность делила это множество на группы
На плоскости задано множество точек. Выбрать три различные точки так, чтобы проходящая через них...

Задано множество точек в трехмерном пространстве. Найти минимум радиусов шаров с центрами в этих точках, содержащих ровно n точек этого множества
Задано множество точек в трехмерном пространстве. Найти минимум радиусов шаров с центрами в этих...

5
1080 / 1007 / 106
Регистрация: 28.02.2010
Сообщений: 2,889
11.12.2010, 10:12 2
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
/*
    Задача:
    Дано 3n точек на плоскости, причем не какие три не лежат на одной прямой.
    Построить множество треугольников с вершинами в этих точках так что бы не какие 2 треугольника не пересекались и не содержали друг друга. 
    
*/
 
#include <stdio.h>
#include <stdlib.h>
 
// Структура - точка
typedef struct _point
{
    float x;
    float y;
} point, *ppoint;
 
int compare (const void * a, const void * b)
{
    point p, q;
    p = *(point*)a;
    q = *(point*)b;
    if ( p.x > q.x ) return 1; else return -1;
}
 
int main()
{
    unsigned int n, i;
    point *a; // указатель на массив точек
    
    // Ввод n
    printf("n=");
    scanf("%u", &n);
    
    // Выделение массива для координат точек
    a = (point*)malloc(3*n*sizeof(point));
    for (i=0; i<3*n; i++)
    {
        printf("Vvedite koordinatu tochki #%u: ", i+1);
        scanf("%f %f", &a[i].x, &a[i].y);
    }
        
    qsort (a, 3*n, sizeof(point), compare);
    
    for (i=0; i<3*n; i+=3)
    {
        printf("Treugolnik #%u\n", i/3+1);
        printf("(%f,%f) ", a[i].x, a[i].y);
        printf("(%f,%f) ", a[i+1].x, a[i+1].y);
        printf("(%f,%f) ", a[i+2].x, a[i+2].y);
        printf("\n");
    }
}
Выводит координаты точек треугольников. Вроде алгоритм верный. Берет левые точки для образования треугольников.
0
0 / 0 / 0
Регистрация: 28.11.2010
Сообщений: 25
11.12.2010, 10:32  [ТС] 3
подскажи а что "qsort" делает???
0
1080 / 1007 / 106
Регистрация: 28.02.2010
Сообщений: 2,889
11.12.2010, 11:46 4
Сортирует массив точек так, чтобы сначала шли точки с меньшим значением координаты x.
0
0 / 0 / 0
Регистрация: 28.11.2010
Сообщений: 25
11.12.2010, 14:31  [ТС] 5
а можно это как то без структуры сделать??
0
1080 / 1007 / 106
Регистрация: 28.02.2010
Сообщений: 2,889
12.12.2010, 12:10 6
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
#include <stdio.h>
#include <stdlib.h>
 
float *x, *y;
 
int compare (const void * a, const void * b)
{
    unsigned int p, q;
    p = *(unsigned int*)a;
    q = *(unsigned int*)b;
    if ( x[p] > x[q] ) return 1; else return -1;
}
 
int main()
{
    unsigned int n, i;
    
    unsigned int *a;
    
    // Ввод n
    printf("n=");
    scanf("%u", &n);
    
    // Выделение массива для координат точек
    x = (float *)malloc(3*n*sizeof(float));
    y = (float *)malloc(3*n*sizeof(float));
    a = (unsigned int *)malloc(3*n*sizeof(unsigned int));
    for (i=0; i<3*n; i++)
    {
        printf("Vvedite koordinatu tochki #%u: ", i+1);
        scanf("%f %f", &x[i], &y[i]);
        a[i]=i;
    }
    
    // Сортировка массива точек
    qsort (a, 3*n, sizeof(unsigned int), compare);
    
    // Вывод координат точек треугольников
    for (i=0; i<3*n; i+=3)
    {
        printf("Treugolnik #%u\n", i/3+1);
        printf("(%f,%f) ", x[a[i]], y[a[i]]);
        printf("(%f,%f) ", x[a[i+1]], y[a[i+1]]);
        printf("(%f,%f) ", x[a[i+2]], y[a[i+2]]);
        printf("\n");
    }
    
    free(x);
    free(y);
    free(a);
}
Добавлено через 1 минуту
Кстати, в коде со структурами я забыл написать
C
1
free(a);
0
12.12.2010, 12:10
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.12.2010, 12:10
Помогаю со студенческими работами здесь

Дано множество точек. Найти медиану.
Учусь на первом курсе. Получил вот такое задание:&quot;Медианой множества, состоящего из четного числа...

Найти координаты точек пересечения окружности с экспонентой и сформировать из них множество А
С клавиатуры вводится радиус окружности с центром в начале координат. Найти координаты точек...

Заданное множество точек на плоскости. Найти выпуклую оболочку этого множества
Заданное множество точек на плоскости. Найти выпуклую оболочку этого множества, то есть выпуклый...

Дано множество точек на плоскости. Необходимо найти 4 точки (с максимальными и минимальными значениями x и y)
Собственно, как я понял здесь нужна структура и динамический массив. но как это реализовать, я не...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru