Масиви: Обов'язкове домашнє завдання з дисципліни «Програмування та алгоритмічні мови», страница 3

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++)  {