Autor
|
Tema: calcular producto escalar (Leído 12,240 veces)
|
indict
Desconectado
Mensajes: 78
|
Calcular producto escalar de dos vectores dados. ¿Qué debo rectificar para que me funcione? #include<iostream> #include<vector> #include<cmath> using namespace std;
double producto_escalar(vector<double>v1,vector<double>v2){ int i, s=0; for(i=0;i<v1.size and i<v2.size ();i=i+1){ s=s+v1[i]*v2[i]; } return s;}
int main(){ int i, k, e,n,s=0; vector<int>v1; vector<int>v2; cout<<"introduzca el tamaño del vector 1"<<endl; cin>>n; for(i=0;i<n;i=i+1){ cout<<"este es el elemento"<<i<<"..."; cin>>e; v1[i]=e;} cout<<"introduzca el tamaño del vector 2"<<endl; cin>>n; for(i=0;i<n;i=i+1){ cout<<"este es el elemento"<<i<<"..."; cin>>e; v2[i]=e;} producto_escalar (s=s+v1[i]*v2[i]; ){ cout<<"el producto escalar es"<<s<<endl;}
system ("pause"); return 0;
}
|
|
|
En línea
|
|
|
|
Ferno
Desconectado
Mensajes: 375
|
Primero algunas cuestiones del álgebra. No podés realizar un producto escalar entre 2 vectores de diferente dimensión (tamaño), por ende, podés simplificar el programa pidiendo una sola vez el tamaño y pedir los valores con el mismo tamaño para ambos vectores. En tu code, lo siguiente no está bien: producto_escalar (s=s+v1[i]*v2[i]; ){ cout<<"el producto escalar es"<<s<<endl;}
Como parámetro deben ir los vectores como bien declaras al principio: double producto_escalar(vector<double>v1,vector<double>v2)
Lo que debes hacer es: s = producto_escalar (v1,v2); cout<<"el producto escalar es"<<s<<endl;
Por último, dentro de la función "producto_escalar", la condición en el for no es correcta. Esto: for(i=0;i<v1.size and i<v2.size ();i=i+1) No compila, porque el compilador no entiende el "and". Las relaciones lógicas, se reemplazan por ciertos caracteres, por ejemplo, para AND y OR: AND = && OR = || Además, utiliza paréntesis siempre que las uses, para evitar confusiones: for(i=0;(i<v1.size()) && (i<v2.size());i=i+1)
Corrige esto y avisanos como te fue.
|
|
|
En línea
|
|
|
|
rir3760
Desconectado
Mensajes: 1.639
|
Por último, dentro de la función "producto_escalar", la condición en el for no es correcta. Esto:
for(i=0;i<v1.size and i<v2.size ();i=i+1)
No compila, porque el compilador no entiende el "and". Las relaciones lógicas, se reemplazan por ciertos caracteres, por ejemplo, para AND y OR:
AND = && OR = || En C++ las palabras reservadas (para ser exactos "alternative tokens") "and", "or" y "not" tienen el mismo efecto que los operadores "&&", "||" y "!" pero raramente se usan (supongo es una costumbre derivada de C donde, eventualmente, se implementaron como macros). Un saludo
|
|
|
En línea
|
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly. -- Kernighan & Ritchie, The C programming language
|
|
|
Ferno
Desconectado
Mensajes: 375
|
En C++ las palabras reservadas (para ser exactos "alternative tokens") "and", "or" y "not" tienen el mismo efecto que los operadores "&&", "||" y "!" pero raramente se usan (supongo es una costumbre derivada de C donde, eventualmente, se implementaron como macros).
Un saludo
Mirá, no tenía ni idea de eso. Tendría que dejar de responder cosas de C++ Perdón al autor y gracias rir!
|
|
|
En línea
|
|
|
|
indict
Desconectado
Mensajes: 78
|
Gracias por el aporte. He rectificado las erradas, pero sigue sin compilar bien. #include<iostream> #include<vector> #include<cmath> using namespace std;
int producto_escalar(vector<int>v1,vector<int>v2){ int i,s=0; for(i=0;(i<v1.size()) && (i<v2.size());i++){ s=s+v1[i]*v2[i]; } return s;}
int main(){ int i, k, e,n,s=0; cout<<"introduzca el tamaño del vector 1"<<endl; cin>>n; vector<int>v1(n); for(i=0;i<n;i=i+1){ cout<<"este es el elemento"<<i<<"..."; cin>>e; v1[i]=e;} cout<<"introduzca el tamaño del vector 2"<<endl; cin>>n; vector<int>v2(n); for(i=0;i<n;i=i+1){ cout<<"este es el elemento"<<i<<"..."; cin>>e; v2[i]=e;} s=producto_escalar(v1,v2){ cout<<"el producto escalar es"<<s<<endl;}
system ("pause"); return 0;
|
|
|
En línea
|
|
|
|
Ferno
Desconectado
Mensajes: 375
|
No has declarado las variables v1, v2 que representan a los vectores.
|
|
|
En línea
|
|
|
|
indict
Desconectado
Mensajes: 78
|
No has declarado las variables v1, v2 que representan a los vectores.
Si no me equivoco, están declaradas en la función producto_escalar
|
|
|
En línea
|
|
|
|
Ferno
Desconectado
Mensajes: 375
|
Si no me equivoco, están declaradas en la función producto_escalar
No, pero igual me confundí, ya están declarados en el main. ¿Qué error tira el compilador?
|
|
|
En línea
|
|
|
|
indict
Desconectado
Mensajes: 78
|
In function `int producto_escalar(std::vector<int, std::allocator<int> >, std::vector<int, std::allocator<int> >)':
Y este mensaje muchas veces reptido "stray '\160' in program "
|
|
|
En línea
|
|
|
|
naderST
|
Pon un espacio entre el tipo del parametro y el nombre, es decir: int producto_escalar(vector<int> v1,vector<int> v2)
Otra cosa, si sabes que para realizar el producto escalar entre dos vectores ambos tienen que tener el mismo tamaño, está demás que preguntes en el for por el tamaño de ambos.
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Escalar directorios
Programación Visual Basic
|
yeikos
|
5
|
3,345
|
7 Octubre 2005, 18:25 pm
por DarkMouth
|
|
|
Escalar privilegios con c99.txt
Nivel Web
|
xalupeao
|
4
|
5,435
|
22 Mayo 2009, 20:01 pm
por xalupeao
|
|
|
como calcular el costo e importe de un producto en java y mysql?
Java
|
hack-4-life
|
1
|
6,632
|
16 Mayo 2011, 19:38 pm
por NetJava
|
|
|
Escalar privilegios en Windows
Hacking
|
Sacre
|
1
|
5,699
|
9 Febrero 2012, 19:44 pm
por el-brujo
|
|
|
Nº de Serie y Nº de Producto
Hardware
|
B€T€B€
|
6
|
7,083
|
2 Junio 2024, 21:17 pm
por B€T€B€
|
|