ejercicio esperanza c++

Iniciado por indict, 25 Junio 2013, 19:09 PM

0 Miembros y 1 Visitante están viendo este tema.

indict

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;}

engel lex

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...
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

amchacon

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.
Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar

indict

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;}
     }

amchacon

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
Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar

indict

La inicializo a 0 y sigue sin funcionar bien :/.

engel lex

postea tu código hasta este punto (recomiendo usar para mostrar no el símbolo de numeral, sino donde dice GeSHi buscas el lenguaje)
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

indict

Código (cpp) [Seleccionar]
#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;}

engel lex

practicas recomendadas...
inciializa toda variable...
no declares variables en el for (i la tienes declarada como 4 veces)
declara las funciones
main primero

Código (cpp) [Seleccionar]
#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"?
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

indict

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 :)