Выбор плоскости или совокупности плоскостей, обладающих заданными свойствами. Тестирование программы UGOL, страница 3

UGOL1_MATR=ARRAY[1..300,1..2] OF INTEGER; {Тип для массива номеров плоскостей,между которыми измеряется угол}

UGOL2_MATR=ARRAY[1..300] OF REAL; {Тип для массива величин углов между плоскостями}

PAR_PL_MATR=ARRAY[1..MAX,1..2] OF INTEGER;{Тип для массива номеров паралл.плоскостей}

IDENT_MATR=ARRAY[1..150,1..2] OF INTEGER; {Тип для массива номеров пар плоскостей, между которыми равные углы}

var

inputFile:TEXT;                         {Входной файл}

outFile:TEXT;                              {Файл результатов}

i, j, N, PP: integer;                      {i,j–рабочие переменные,N-количество       плоскостей,PP-кол-во паралл.плоскостей}

EQU:EQUATION_MATR;                         {Коэф. одной плоскости}

COEF:COEF_MATR;                            {Коэф. всех плоскостей}

PAR_PL:PAR_PL_MATR;                        {Номера параллельных плоскостей}

UGOL1:UGOL1_MATR;                          {Номера плоскостей,между которыми определяется угол}

UGOL2:UGOL2_MATR;                          {Величины углов между плоскостями}

A, B, C, X:REAL;                           {A,B,C-коэфф.,X-косинус угла}

E:REAL;                                    {Погрешность оценки параллельных плоскостей}

IDENT:IDENT_MATR;                          {Номера пар плоскостей,углы между которыми равны }

UG:INTEGER;                                {Количество углов}

ID:INTEGER;                                {Кол-во равных углов}

CH : INTEGER;                              {Символ для ввода}

{-------УГОЛ МЕЖДУ ПЛОСКОСТЯМИ--------}

PROCEDURE UGOL_PL(COEF:COEF_MATR;N:INTEGER;VAR UGOL1:UGOL1_MATR;VAR UGOL2:UGOL2_MATR;VAR UG:INTEGER);

VAR

I,J,K:INTEGER;                             {Рабочие переменные}

ALFA:REAL;                                 {Величина угла}

BEGIN

J:=0;                                      {Установка начальных значений}

K:=0;

FOR I:=1 TO N-1 DO

    BEGIN

    FOR J:=I+1 TO N DO

        BEGIN

        K:=K+1;

        A:=SQRT( SQR(COEF[I,1])+ SQR(COEF[I,2])+ SQR(COEF[I,3]) );

        B:=SQRT( SQR(COEF[J,1])+ SQR(COEF[J,2])+ SQR(COEF[J,3]) );

        C:=SQRT( SQR( COEF[I,1]-COEF[J,1] )+ SQR( COEF[I,2]-COEF[J,2])+

                 SQR(COEF[I,3]-COEF[J,3]) );

        X:=( SQR(A)+ SQR(B)- SQR(C))/(2*A*B); {Вычисление косинуса угла}

        IF X = 0 THEN                      {Проверка перпендикулярности плоскостей}

        ALFA:=90

        ELSE

            BEGIN

            ALFA:=ARCTAN( (SQRT (1-X*X))/X );

            ALFA:=180*ALFA/PI;             {Вычисление величины угла}

            IF ALFA < 0 THEN

               ALFA:=ALFA*(-1)

            END;

        UGOL1[K,1]:=I;                     {Запись номеров пары плоскостей,содержащих данный угол}

        UGOL1[K,2]:=J;

        UGOL2[K]:=ALFA;

        END

    END;

UG:=K

END;

{------Подпрограмма поиска параллельных плоскостей--------}

PROCEDURE PARAL_PL(COEF:COEF_MATR;N:INTEGER;E:REAL;VAR PAR_PL:PAR_PL_MATR;VAR PP:INTEGER);

VAR

CONDITION, CONDITION1, CONDITION2: BOOLEAN; {Условия паралл-ти плоскостей}

I,J : INTEGER;

BEGIN

PP:=0;                                      {Установка начальных значений}

FOR I:=1 TO N-1 DO                          {Проверка параллельности плоскостей}

    BEGIN

    FOR J:=I+1 TO N DO

        BEGIN

        CONDITION1:=ABS(COEF[I,1]*COEF[J,2]-COEF[I,2]*COEF[J,1]) < E;                CONDITION2:=ABS(COEF[I,1]*COEF[J,3]-COEF[I,3]*COEF[J,1]) < E; 

        CONDITION:=CONDITION1 AND CONDITION2;                                  

        IF CONDITION THEN                    {Плоскости параллельны}

           BEGIN

           PP:=PP+1;

           PAR_PL[PP,1]:=I;                  {Запись номеров}

           PAR_PL[PP,2]:=J;                  {параллельных плоскостей}

           END

        END

    END

END;

{-----Подпрограмма поиска равных углов между плоскостями----}

PROCEDURE IDENTICAL_UGOL(UGOL2:UGOL2_MATR;E:REAL;UG:INTEGER;VAR IDENT:IDENT_MATR;VAR ID:INTEGER);