Hola,
quiero hacer un programa que le des una serie de elementos en tan por uno y calcule la esperanza. La esperanza será la suma de cada elemento introducido multiplicado por el valor del contador correspondiente.
Si la suma de valores introducidos no es igual a 1 se imprimirá por pantalla que no existe la esperanza en cambio si la suma de valores es igual a 1 se mostrará por pantalla que sí existe la esperanza y es ...
ejemplo: introduzco los elementos: 0.1 , 0.5 , 0.3, 0.1 la suma de estos 4 elementos es 1 luego si existe la esperanza.
Y será: 0.1 * 0 + 0.5 * 1 + 0.3 *2 + 0.1 * 3 = 1.4
Mi problema es que este mismo caso que he ejemplificado el programa me devuele que la esperanza no existe :SS
Si pudieras decirme donde está el fallo os lo agradeceria
Muchas gracias :)
#include<iostream>
#include<vector>
using namespace std;
bool es_esperan(double s){
vector<double>v;
for(int i=0;i<v.size();i++){
s=s+v[i];
}
if(s==1){return true;}
else{return false;}
}
int main(){int n;
double esperanza,e,s=0;
bool t;
cout<<"introduzca el tamañp de los x_i"<<endl;
cin>>n;
vector<double>v(n);
for(int i=0;i<n;i++){
cout<<"introduzca el elemento"<<i<<endl;
cin>>e;
v[i]=e;
}
for(int i=0;i<n;i++){
esperanza=esperanza+(i*v[i]);
}
t=es_esperan(s);
if(t){cout<<"La esperanza existe i es"<<" "<<esperanza<<endl;}
else{cout<<"La esperanza no existe"<<endl;}
system("pause"); return 0;}
mira la variable "s" de tu codigo, solo ubicaré donde está en orden de ejecucion
s=0
t=es_esperan(s);
es_esperan(double s)
s=s+v[i];
así que t depende de s... y aunque no soy realmente conocedor de "<vector>" estoy seguro que en "es_esperan" el vector es vacio... y la s es = 0 ya que lo declaraste al principio y la única modificación depende de un vector vacio... a "es_esperan" debes pasarle el vector, ya que "s" no tiene velas en ese entierro... puedes declararlo global o pasarlo como parametro, tu decides eso...
Cita de: engelx en 25 Junio 2013, 21:13 PM
mira la variable "s" de tu codigo, solo ubicaré donde está en orden de ejecucion
s=0
t=es_esperan(s);
es_esperan(double s)
s=s+v[i];
así que t depende de s... y aunque no soy realmente conocedor de "<vector>" estoy seguro que en "es_esperan" el vector es vacio... y la s es = 0 ya que lo declaraste al principio y la única modificación depende de un vector vacio... a "es_esperan" debes pasarle el vector, ya que "s" no tiene velas en ese entierro... puedes declararlo global o pasarlo como parametro, tu decides eso...
Ahí está la clave.
Tienes que pasar el vector como parámetro a la función.
Gracias por la ayuda :D
He pasado el vector como parámetro en la función booleana pero sigue sin funcionar. :S
bool es_esperan(vector<double>v){
double s=0;
for(int i=0;i<v.size();i++){
s=s+v[i];
}
if(s==1){return true;}
else{return false;}
}
Tienes que inicializar la variable "esperanza" a 0.
Mi propio compilador me ha avisado, deberías usar uno más moderno:
http://foro.elhacker.net/programacion_cc/iquestpor_que_no_deberias_usar_el_devcpp-t385150.0.html
La inicializo a 0 y sigue sin funcionar bien :/.
postea tu código hasta este punto (recomiendo usar para mostrar no el símbolo de numeral, sino donde dice GeSHi buscas el lenguaje)
#include<iostream>
#include<vector>
using namespace std;
bool es_esperan(vector<double>v){
double s=0;
for(int i=0;i<v.size();i++){
s=s+v[i];
}
if(s==1){return true;}
else{return false;}
}
int main(){int n;
double esperanza=0,e,s=0;
bool t;
cout<<"introduzca el tamañp de los x_i"<<endl;
cin>>n;
vector<double>v(n);
for(int i=0;i<n;i++){
cout<<"introduzca el elemento"<<i<<endl;
cin>>e;
v[i]=e;
}
for(int i=0;i<n;i++){
esperanza=esperanza+(i*v[i]);
}
t=es_esperan(v);
if(t){cout<<"La esperanza existe i es"<<" "<<esperanza<<endl;}
else{cout<<"La esperanza no existe"<<endl;}
system("pause"); return 0;}
practicas recomendadas...
inciializa toda variable...
no declares variables en el for (i la tienes declarada como 4 veces)
declara las funciones
main primero
#include<iostream>
#include<vector>
using namespace std;
bool es_esperan(vector<double>v);
int main(){
int n=0, i=0;
double esperanza=0, e=0, s=0;
bool t=false;
cout<<"introduzca el tamañp de los x_i"<<endl;
cin>>n;
vector<double>v(n);
for(i=0;i<n;i++){
cout<<"introduzca el elemento"<<i<<endl;
cin>>e;
v[i]=e;
}
for(i=0;i<n;i++){
esperanza=esperanza+(i*v[i]);
cout << "esperanza: " <<esperanza << "\n";//agregado para visualizar
}
t=es_esperan(v);
if(t){cout<<"La esperanza existe i es"<<" "<<esperanza<<endl;}
else{cout<<"La esperanza no existe"<<endl;}
system("pause");
return 0;
}
bool es_esperan(vector<double>v){
double s=0;
int i=0;
for(i=0;i<v.size();i++){
s=s+v[i];
cout << "s: " << s << "\n";//agregado para visualizar
}
if(s==1){return true;}
else{return false;}
}
los cambio que le hice al codigo son esteticos, y le agregué 2 cout para visualizar como se movian las variables, el código funciona aparentemente bien... con cuales valores eso debe dar "1"?
con la suma de todos los los elementos del vector, es decir la suma de todos los e debe dar 1.
Gracias por toda la ayuda y aportaciones :)