Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: indict en 25 Junio 2013, 19:09 pm



Título: ejercicio esperanza c++
Publicado por: indict en 25 Junio 2013, 19:09 pm
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 :)

Código:
#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;}


Título: Re: ejercicio esperanza c++
Publicado por: engel lex en 25 Junio 2013, 21:13 pm
mira la variable "s" de tu codigo, solo ubicaré donde está en orden de ejecucion
Código:
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...


Título: Re: ejercicio esperanza c++
Publicado por: amchacon en 25 Junio 2013, 21:44 pm
mira la variable "s" de tu codigo, solo ubicaré donde está en orden de ejecucion
Código:
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.


Título: Re: ejercicio esperanza c++
Publicado por: indict en 26 Junio 2013, 00:33 am
Gracias por la ayuda :D

He pasado el vector como parámetro en la función booleana pero sigue sin funcionar.  :S

Código:
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;}
     }


Título: Re: ejercicio esperanza c++
Publicado por: amchacon en 26 Junio 2013, 01:11 am
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


Título: Re: ejercicio esperanza c++
Publicado por: indict en 26 Junio 2013, 18:03 pm
La inicializo a 0 y sigue sin funcionar bien :/.


Título: Re: ejercicio esperanza c++
Publicado por: engel lex en 26 Junio 2013, 18:09 pm
postea tu código hasta este punto (recomiendo usar para mostrar no el símbolo de numeral, sino donde dice GeSHi buscas el lenguaje)


Título: Re: ejercicio esperanza c++
Publicado por: indict en 27 Junio 2013, 19:25 pm
Código
  1. #include<iostream>
  2. #include<vector>
  3. using namespace std;
  4.  
  5.  
  6. bool es_esperan(vector<double>v){
  7.     double s=0;
  8.     for(int i=0;i<v.size();i++){
  9.             s=s+v[i];
  10.  
  11.             }
  12.     if(s==1){return true;}
  13.     else{return false;}
  14.     }
  15.  
  16.  
  17. int main(){int n;
  18. double esperanza=0,e,s=0;
  19. bool t;
  20.    cout<<"introduzca el tamañp de los x_i"<<endl;
  21.    cin>>n;
  22.    vector<double>v(n);
  23.  
  24.    for(int i=0;i<n;i++){
  25.            cout<<"introduzca el elemento"<<i<<endl;
  26.            cin>>e;
  27.            v[i]=e;
  28.            }
  29.    for(int i=0;i<n;i++){
  30.  
  31.            esperanza=esperanza+(i*v[i]);
  32.            }
  33.       t=es_esperan(v);    
  34.    if(t){cout<<"La esperanza existe i es"<<" "<<esperanza<<endl;}
  35.    else{cout<<"La esperanza no existe"<<endl;}
  36.  
  37.  
  38. system("pause"); return 0;}


Título: Re: ejercicio esperanza c++
Publicado por: engel lex en 27 Junio 2013, 19:49 pm
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
  1. #include<iostream>
  2. #include<vector>
  3. using namespace std;
  4. bool es_esperan(vector<double>v);
  5.  
  6. int main(){
  7. int n=0, i=0;
  8. double esperanza=0, e=0, s=0;
  9. bool t=false;
  10.    cout<<"introduzca el tamañp de los x_i"<<endl;
  11.    cin>>n;
  12.    vector<double>v(n);
  13.  
  14.    for(i=0;i<n;i++){
  15.            cout<<"introduzca el elemento"<<i<<endl;
  16.            cin>>e;
  17.            v[i]=e;
  18.            }
  19.    for(i=0;i<n;i++){
  20.  
  21.            esperanza=esperanza+(i*v[i]);
  22.            cout << "esperanza: " <<esperanza << "\n";//agregado para visualizar
  23.            }
  24.       t=es_esperan(v);    
  25.    if(t){cout<<"La esperanza existe i es"<<" "<<esperanza<<endl;}
  26.    else{cout<<"La esperanza no existe"<<endl;}
  27.  
  28.  
  29. system("pause");
  30. return 0;
  31. }
  32.  
  33. bool es_esperan(vector<double>v){
  34.     double s=0;
  35.     int i=0;
  36.     for(i=0;i<v.size();i++){
  37.             s=s+v[i];
  38.             cout << "s: " << s << "\n";//agregado para visualizar
  39.             }
  40.     if(s==1){return true;}
  41.     else{return false;}
  42. }

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"?


Título: Re: ejercicio esperanza c++
Publicado por: indict en 27 Junio 2013, 21:37 pm
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 :)