/* This code calculates the dot product and the cross product 
   of two 3-vectors. 
   Two functions are called - one returns the dotprod ie a number and the
   second function returns the cross product ie a vector with three elements.
*/

#include <stdio.h>
#include <math.h>

#define N 3

double dotproduct( double X[], double Y[]);
void crossproduct( double Z[], double X[], double Y[] );

main()
{

  double x[N],y[N],z[N], dotprod;
  int i;

  printf("enter each component of vectors x and y, separated by a space,
          then hit return\n");

  for(i = 0; i < N; i++)
    {
      if(scanf( "%lf %lf", &x[i], &y[i] != 2)
	{
	  printf(" you must enter 2 numbers as the vector components\n");
	  exit(1);
	}

  /* now calculate the dot product of x and y */

  dotprod = dotproduct( x, y);

  /* now calculate the cross product of x and y */

  crossproduct(z,x,y);

  printf("\nthe dot product of the 2 vectors you entered is \n 
         %lf\n\n ", dotprod);
  printf("\nthe vector cross product of the 2 vector you entered is \n
          (%lf, %lf, %lf)\n\n ", z[0],z[1],z[2]);
}

double dotproduct( double X[], double Y[])
{
  int i;
  double sum = 0.0;

  for( i = 0; i<N; i++){
    sum += X[i]*Y[i];}

  return sum;
}

void crossproduct( double Z[], double X[], double Y[])
{

  Z[0] = X[1]*Y[2] - X[2]*Y[1];
  Z[1] = -( X[0]*Y[2] - X[2]*Y[0]);
  Z[2] = X[0]*Y[1] - X[1]*Y[0];
}