// Programación en C++ para Ingenieros, Ed. Thomson Paraninfo, 2006
// Capitulo 6: Tipos Estructurados

// Programa que lee dos vectores de dimensión N y calcula el producto escalar.

#include <iostream>
#include <vector>

using namespace std;

// Definición de constantes
const int N = 5;

// Declaración de acciones y funciones

// Leemos un vector de dimensión N
double LeerVector( vector<double> &v );

// Devolvemos el producto escalar de los vectores de dimensión N, v1 * v2
double prodEscalar( const vector<double> &v1, const vector<double> &v2 );

// Programa principal
int main ()
{
   // Declaramos dos vectores v1 y v2 de N reales
  vector<double> v1(N);
  vector<double> v2(N);

  cout << "Introduce las N=5 coordenadas del primer vector: ";
  LeerVector( v1 );
  cout << "Introduce las N=5 coordenadas del segundo vector: ";
  LeerVector( v2 );

  cout << "El producto escalar de los vectores dados es: ";
  cout << prodEscalar( v1, v2 ) << endl;

  return 0;
}

// Definición de acciones y funciones
double LeerVector( vector<double> &v )
{
  int    i;
  double x;

  for ( i = 0; i < N; i++ )
  {
    cin >> x;
    v.push_back(x);
  }
}

double prodEscalar( const vector<double> &v1, const vector<double> &v2 )
{
  int    i;
  double prod = 0.0;

  for ( i = 0; i < v1.size(); i++ )
    prod += v1[i] * v2[i];

  return prod;
}