//---------------------------------------------------------------------------

#pragma hdrstop

#include "norma.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#include <math.h>
#include "ListConst.h"

/* Функции для программ БКЭ */
double absol(double a) {
  if (a>0) return a;
  else return -a;
}
/* норма вектора a */
double norma(double *a, int n)
{
   int i;
   double nor;

   nor=0e0;
   for (i=0; i<n; i++)
      nor +=  a[i]*a[i];
   return(sqrt(nor));
} /* norm */
/* сумма элементов вектора */
double sum(double *a, int n)
{
   int i;
   double nor;

   nor=0e0;
   for (i=0; i<n; i++)
      nor +=  a[i];
   return(nor);
}  /* sum */
double atand(double x, double y) {
double fi;
  if (ABS(y)<1e-10){
     if (y<0   ) fi=-90;
     else fi=90;
  }
  else
     fi = atan(x/y)*RADIAN;
  return fi;
}
/* скалярное произведение векторов a1 и a2 */
double sumv(double *a1, int n1, double *a2, int n2)
{
   int i;
   double nor;

   nor=0e0;
   for (i=0; i<n1; i++)
      nor +=  a1[i]*a2[i];
   return(nor);
} /* sumv */
/* умножение вектора a2 на скаляр c ->a1 */
void vsmult(double *a1, int n1, double *a2, int n2, double c)
{
   int i;

   for (i=0; i<n1; i++)
      a1[i] = c*a2[i];
} /* vsmult */
/* деление вектора a2 на скаляр c ->a1 */
int vsdev(double *a1, int n1, double *a2, int n2, double c)
{
   int i;

   if ((ABS(c))<EPS_ZERO) return 1;
   c=1/c;
   for (i=0; i<n1; i++)
      a1[i] = c*a2[i];
   return 0;
} /* vsdev */
/* деление матрицы a2 на скаляр c ->a1 */
int vsdev2(double* a1, int n1, int m1, double *a2, int n2, int m2, double c)
{
   int i,j;

   if ((ABS(c))<EPS_ZERO) return 1;
   c=1/c;
   j=n1*m1;
   for (i=0; i<j; i++)
      a1[i] = c*a2[i];
   return 0;
} /* vsdev2 */
/* умножение матрицы a2 на скаляр c ->a1 */
void vsmult2(double* a1, int n1, int m1, double *a2, int n2, int m2, double c)
{
   int i,j;

   j=n1*m1;
   for (i=0; i<j; i++)
      a1[i] = c*a2[i];
} /* vsmul2 */
/* вычитание из вектора a2 вектора a3 ->a1 */
void vvsubs(double* a1, int n1, double* a2, int n2, double *a3, int n3)
{
   int i;

   for (i=0; i<n1; i++)
      a1[i] = a2[i] - a3[i];
} /* vvsubs */
/* сложение вектора a2  и вектора a3 ->a1 */
void vvadd(double* a1, int n1, double* a2, int n2, double *a3, int n3)
{
   int i;

   for (i=0; i<n1; i++)
      a1[i] = a2[i] + a3[i];
} /* vvadd */
/* вычитание из матрицы a2 матрицы a3 ->a1 */
void vvsubs2(double* a1, int n1, int m1, double*a2, int n2, int m2, double* a3, int n3, int m3)
{
   int i,j;

   j=n1*m1;
   for (i=0; i<j; i++)
      a1[i] = a2[i] - a3[i];
} /* vvsubs2 */
/* сложение a2 c матрицей a3 ->a1 */
void vvadd2(double* a1, int n1, int m1, double*a2, int n2, int m2, double* a3, int n3, int m3)
{
   int i,j;

   j=n1*m1;
   for (i=0; i<j; i++)
      a1[i] = a2[i] + a3[i];
} /* vvadd2 */
