Test Foro de elhacker.net SMF 2.1

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

#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

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
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.
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

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 (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;}
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 (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"?
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 :)