Форум программистов, компьютерный форум CyberForum.ru

Найти все подмножества точек, лежащих на одной прямой - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Функция вычисляющая N!! http://www.cyberforum.ru/cpp-beginners/thread619955.html
Задача: Описать функцию Fact2(N)вещественного типа, вычисляющую двойной факториал: N!!=135...N, если N - нечетное; N!!=246...N, если N - четное (N>0 - параметр целого типа;вещественное возращаемое значение используется для того, чтобы избежать целлочисленного переполнения при больших значениях N).С помощью этой функции найти двойные факториалы пяти данных целых чисел....
C++ Возвести любое число в любой степени от 1 до 10 Заранее спасибо! Возвести любое число в любой степени от 1 до 10 http://www.cyberforum.ru/cpp-beginners/thread619951.html
Одномерный массив, найти минимальное и максимальное значение C++
Помогите друзья очень прошу это задание на экзамен? Дан одномерный массив найти минимальное и максимальное значение?
C++ Геометрическая задача
Задано множество точек на плоскости . Выбрать из них четыре разные точки, которые являются вершинами квадрата наибольшего периметра. Алгоритм понятен. Нужно взять четыре точки,допустим A,В,С и D. Проверить на равенство сторон AB,BC,CD,DA. Потом проверить равенство диагоналей AC и BD. Но как это сделать функцию и как ее потом использовать. Может кто-то подскажет другой алгоритм, более...
C++ Найти наибольшую цифру в заданном числе http://www.cyberforum.ru/cpp-beginners/thread619931.html
Заранее спасибо! Найти наибольшее цифру в заданном числе N
C++ Найти площадь фигуры, ограниченную линиями, заданными функцией у=х^2 и у=5+х/2 Условие: найти приблизительную площадь фигуры, ограниченную линиями, заданными функцией у=х^2 и у=5+х/2, разбивая отрезок измерения x на 10 частей и суммируя площади прямоугольников с основаниями равными 1/10 и высотой определямой значениями функциями в середи основания. высота прямоугольника в точки х = 5+х/2-х^2. я ничего не понимая в этих функциях помогите если не сложно подробнее

Показать сообщение отдельно
Catstail
Модератор
 Аватар для Catstail
21504 / 10257 / 1670
Регистрация: 12.02.2012
Сообщений: 17,143
06.07.2012, 12:55     Найти все подмножества точек, лежащих на одной прямой
Вот программа... Но с одним НО: она будет работать только для таких множеств, в которых число точек, лежащих на одной прямой, не превышает 32. В противном случае нужны доработки. Пойдет?

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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
#include "iostream.h"
#include "math.h"
 
int main(int argc, char* argv[])
{
 
    int n,i,j,k,p=0,kb,q;
 
    unsigned long *SetP,CurrSet;
 
    double *X,*Y;
 
    cout << "n=";
    cin >> n;
 
    X=new double[n];
    Y=new double[n];
 
        SetP=new unsigned long[n];
 
       for (i=0; i<n; i++)
    {
        cout << "X[" << i << "]= ";
        cin >> X[i];
        cout << "Y[" << i << "]= ";
        cin >> Y[i];
    }
    
    for (i=0; i<n; i++) SetP[i]=0;
 
    for (i=0; i<n-1; i++)
        for (j=i+1; j<n; j++)
        {
            CurrSet=0;
            CurrSet=CurrSet | (1 << i);
            CurrSet=CurrSet | (1 << j);
            kb=2;
 
            for (k=0; k<n; k++)
            {
 
                if ((k != i) && (k != j))
                    if (fabs((X[k]-X[i])*(Y[j]-Y[i])-(X[j]-X[i])*(Y[k]-Y[i])) <= 1.0E-9)
                    {
                                           CurrSet=CurrSet | (1 << k); 
                       kb++;
                    }
 
            }
 
            if (kb > 2)
            {
               q=0;
               for (k=0; k<p; k++)
                    if (CurrSet == SetP[k])
                    {
                      q=-1;
                      break;
                    }
                           if (q == 0) SetP[p++]=CurrSet;
            }
 
        }
 
    for (i=0; i<p; i++) 
    {
        for (j=0; j <= 31; j++)
            if (SetP[i] & (1 << j)) cout << j << " ";
        cout << endl;
    }
 
    delete [] X;
        delete [] Y;
    delete [] SetP;
 
    return 0;
}
Да, поскольку любые две точки лежат на одной прямой, программа не выводит двухэлементные множества. И ещё: не следует задавать
одинаковые точки (впрочем, это легко распознать программно).
Миниатюры
Найти все подмножества точек, лежащих на одной прямой  
 
Текущее время: 09:45. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru