#include<iostream>
#include<math.h>
#include<stdlib.h>
using namespace std;

/* Vecteur unitaire */

int unitaire(const double* v, double* u, const int n){
  int i, r;
  double s2;

  s2 = 0.;
  for (i = 0; i < n; i++)
    s2 += v[i]*v[i];
  if (s2 == 0.){
    r = 0;
    for (i = 0; i < n; i++)
      u[i] = 0.;
  }
  else{
    r = 1;
    for (i = 0; i < n; i++)
      u[i] = v[i]/sqrt(s2);
  }
  return r;
}

int main(){
  const int n1 = 3;
  const int n2 = 4;
  double *v1, *v10, *v2, *u1, *u10, *u2;
  int i, r;

  v1 = (double*)malloc(n1 * sizeof(double));
  v1[0] = 1.; v1[1] = 1.; v1[2] = 1.;
  v10 = (double*)malloc(n1 * sizeof(double));
  v10[0] = 0.; v10[1] = 0.; v10[2] = 0.;
  v2 = (double*)malloc(n2 * sizeof(double));
  v2[0] = -3.; v2[1] = -4.; v2[2] = -5.; v2[3] = -6.;
  u1 = (double*)malloc(n1 * sizeof(double));
  u10 = (double*)malloc(n1 * sizeof(double));
  u2 = (double*)malloc(n2 * sizeof(double));

  r = unitaire(v1, u1, n1);
  cout << r << " -- ";
  for (i = 0; i < n1; i++)
    cout << u1[i] << " ";
  cout << endl;
  r = unitaire(v10, u10, n1);
  cout << r << " -- ";
  for (i = 0; i < n1; i++)
    cout << u10[i] << " ";
  cout << endl;
  r = unitaire(v2, u2, n2);
  cout << r << " -- ";
  for (i = 0; i < n2; i++)
    cout << u2[i] << " ";
  cout << endl;
  free(v1); free(v10); free(v2);
  free(u1); free(u10); free(u2);
  return 0;
}
