elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Arreglado, de nuevo, el registro del warzone (wargame) de EHN


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  ejercicio esperanza c++
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: ejercicio esperanza c++  (Leído 2,817 veces)
indict

Desconectado Desconectado

Mensajes: 78


Ver Perfil
ejercicio esperanza c++
« 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;}


En línea

engel lex
Moderador Global
***
Desconectado Desconectado

Mensajes: 15.514



Ver Perfil
Re: ejercicio esperanza c++
« Respuesta #1 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...


En línea

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


Desconectado Desconectado

Mensajes: 1.211



Ver Perfil
Re: ejercicio esperanza c++
« Respuesta #2 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.
En línea

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

Desconectado Desconectado

Mensajes: 78


Ver Perfil
Re: ejercicio esperanza c++
« Respuesta #3 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;}
     }
En línea

amchacon


Desconectado Desconectado

Mensajes: 1.211



Ver Perfil
Re: ejercicio esperanza c++
« Respuesta #4 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
En línea

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

Desconectado Desconectado

Mensajes: 78


Ver Perfil
Re: ejercicio esperanza c++
« Respuesta #5 en: 26 Junio 2013, 18:03 pm »

La inicializo a 0 y sigue sin funcionar bien :/.
En línea

engel lex
Moderador Global
***
Desconectado Desconectado

Mensajes: 15.514



Ver Perfil
Re: ejercicio esperanza c++
« Respuesta #6 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)
En línea

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

Desconectado Desconectado

Mensajes: 78


Ver Perfil
Re: ejercicio esperanza c++
« Respuesta #7 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;}
En línea

engel lex
Moderador Global
***
Desconectado Desconectado

Mensajes: 15.514



Ver Perfil
Re: ejercicio esperanza c++
« Respuesta #8 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"?
En línea

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

Desconectado Desconectado

Mensajes: 78


Ver Perfil
Re: ejercicio esperanza c++
« Respuesta #9 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 :)
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines