double factorial (float n)
{
int i;
double r = 1;
for (i = 1; i <= n; i++)
{
r *= i;
}
return (r);
}
int main()
{
//---- Define of variables ----//
register int i, j, k, g, s, counter, count1;
auto char S, answ;
auto double cds [N][M], vector [Q][M], A, B, C, total, pars;
//---- Infinite cycle ----//
do
{
clrscr ();
counter = 0;
s = 0;
count1 = 0;
//---- Enter of coordinats ----//
metka:
cout << "Enter, how much points should be investigated (max = "
<< N << " ): ";
cin >> k;
if (k > N || k < 2)
{
clrscr ();
goto metka;
};
/* Обчислення кількості площин при заданій кількості точок і їх можливих попарних комбінацій */
total = factorial (k)/(6*factorial(k-3));
pars = (total * (total - 1))/2;
init:
cout << "Initialize (A)utomatically or (M)anually: ";
answ = getche ();
cout << endl;
if (answ == 'a' || answ == 'A')
/* Автоматична ініціалізація масиву */
{
for (i = 0; i < k; i++)
{
for (j = 0; j < 3; j++)
{
srand(time(NULL));
cds [i][j] = pow((-1), ((i/(j+1)) + rand())) * (rand()%30)*(i+j)/k;
switch (j)
{
case 0: S = 'x'; break;
case 1: S = 'y'; break;
case 2: S = 'z'; break;
};
cout << "\tCoordinate: " << S << i + 1 << " = "
<< cds[i][j] << endl;
};
};
} else if (answ == 'm' || answ == 'M')
/* Введення координат тосок з клавіатури */
{
for (i = 0; i < k; i++)
{
cout << i + 1 << " - point: " << endl;
for (j = 0; j < 3; j++)
{
switch (j)
{
case 0: S = 'x'; break;
case 1: S = 'y'; break;
case 2: S = 'z'; break;
};
cout << "Enter " << S << i << " coordinate: ";
cin >> cds [i][j];
};
};
} else {
cout << "\b";
goto init;
};
/*********************CODE SEGMENT*************************//
/* Обчислення координат векторів нормалі та запис їх до масиву coord */
for (i = 0; i < k; i++) {
for (j = i + 1; j < k; j++) {
for (g = j + 1; g < k; g++)
{
vector[s][0]=coord(cds[i][1],cds[j][1],cds[g][1],cds[i][2],cds[j][2],cds[g][2]);
vector[s][1]=coord(cds[i][0],cds[j][0],cds[g][0],cds[i][2],cds[j][2],cds[g][2]);
vector[s][2]=coord(cds[i][0],cds[j][0],cds[g][0],cds[i][1],cds[j][1],cds[g][1]);
s++;
clrscr ();
cout << "Calculation of vectors"
<< endl << "Complete(percent): " << s/total * 100 << "%";
}; }; };
/* Порівняння координат нормальних векторів відповідних площин. І якщо координати пропорційні то до змінної counter додається 1 */
for (i = 0; i < s; i++) {
for (j = i + 1; j < s; j++) {
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.