/*
 * arquivo: produto_escalar.c
 * --------------------------
 * Este programa determina o produto escalar de
 * dois vetores dados.
 */
#include <stdio.h>
#define NMAX 100

/**********************************************************************/
/*
 * leia_vetor():
 * =============
 * Recebe um vetor de double v[] e um inteiro n.
 * Le n reais e os coloca em em v[], isto 'e, em
 * v[0],...,v[n-1].
 */

void leia_vetor(double v[], int n);

/*
 * imprima_vetor():
 * ================
 * Recebe um vetor de n doubles v[] e o inteiro n
 * e imprime v[], isto 'e, imprime v[0],...,v[n-1].
 */

void imprima_vetor(double v[], int n);

/*
 * prod_escalar()
 * ==============
 * Recebe dois vetores v[] e w[] e um inteiro n,
 * que 'e a dimensao dos vetores e devolve o produto
 * escalar de v[] e w[].
 */

double prod_escalar(double v[], double w[], int n);

/**********************************************************************/

int main()
{
  double a[NMAX], b[NMAX];
  int n;

  printf("Forneca o valor de n: ");
  scanf("%d", &n);

  printf("Forneca o primeiro vetor (%d doubles): ", n);
  leia_vetor(a, n);

  printf("Forneca o segundo vetor (%d doubles): ", n);
  leia_vetor(b, n);

  printf("O produto escalar dos vetores\n");
  imprima_vetor(a, n);
  imprima_vetor(b, n);
  printf("'e %g\n", prod_escalar(a, b, n));

  return 0;
}

/**********************************************************************/

void leia_vetor(double v[], int n)
{
  int i;

  for (i=0; i<n; i++) 
    scanf("%lf", &v[i]);
}

void imprima_vetor(double v[], int n)
{
  int i;

  for (i=0; i<n; i++) 
    printf("%g ", v[i]);
  printf("\n");
}

double prod_escalar(double v[], double w[], int n)
{
  int i;
  double p=0;

  for (i=0; i<n; i++)
    p += v[i]*w[i];

  return p;
}
