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

 

 


Tema destacado: Guía actualizada para evitar que un ransomware ataque tu empresa


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

Desconectado Desconectado

Mensajes: 108


Ser loco es pensar diferente.


Ver Perfil
[SOLUCIONADO] Problema en un ejercicio de C++
« en: 15 Agosto 2014, 17:31 pm »

 Hola gente, disculpen las molestias; tengo un ejercicio que me pide que haga un programa en el cual mediante una instucción for se ingresen valores, y si el usuario ingresa el valor: 9999, el programa no tome ese valor, sume todos los otros valores y los divida por la cantidad de valores ingresados, osea, que saque el promedio de la suma de todos los valores menos el valor 9999..

 Quisiera que me digan donde estaría el error para poder solucionarlo, después de estar solucionado si alguién desea poner su propio código, o el código editado que lo ponga, cuando mi problema este solucionado en su título aparecerá [SOLUCIONADO].

 Bueno sin más que hablar, dejo el código que hice :)

main.cpp
Código
  1. #include <iostream>
  2. using std::cin;
  3. using std::cout;
  4.  
  5. #include <string>
  6. using std::string;
  7. using std::getline;
  8.  
  9. #include "encabezado.h"
  10.  
  11. int main()
  12. {
  13. string nombre;
  14.  
  15. cout <<"Escriba su nombre: ";
  16. getline(cin,nombre);
  17.  
  18. promedio promedio1(nombre);
  19. promedio1.calcularPromedio();
  20. return 0;
  21. }
encabezado.h
Código
  1. #include <string>
  2. using std::string;
  3.  
  4. class promedio
  5. {
  6. public:
  7. promedio(string);
  8. //Funciones establecer;
  9. void establecerNombre(string);
  10. void calcularPromedio();
  11. //Funciones obtener
  12. string obtenerNombre();
  13. int obtenerPromedio();
  14. private:
  15. int promedio1;
  16. string nombreUsuario;
  17. };
encabezado.cpp
Código
  1. #include <iostream>
  2. using std::cout;
  3. using std::cin;
  4. using std::endl;
  5.  
  6. #include <string>
  7. using std::string;
  8.  
  9. #include "encabezado.h"
  10.  
  11. promedio::promedio(string nombre)
  12. {
  13. establecerNombre(nombre);
  14. }
  15.  
  16. //Funciones establecer
  17.  
  18. void promedio::establecerNombre(string nombre)
  19. {
  20. if (nombre.length() > 5)
  21. {
  22. nombreUsuario = nombre.substr(0,5);
  23. cout <<"el nombre " <<nombre <<" excede los caracteres maximos(5)" <<endl
  24. <<"Se demilito el nombre a los primero 5 caracteres " <<obtenerNombre() <<endl;
  25. }
  26. else
  27. {
  28. nombreUsuario= nombre;
  29. cout <<"Bienvenido! " <<obtenerNombre();
  30. }
  31. }
  32.  
  33. //Funciones Calcular
  34.  
  35. void promedio::calcularPromedio()
  36. {
  37. int suma=0;
  38. int valor=0;
  39. int numeroValores=0;
  40.  
  41. for (valor; valor != 9999;numeroValores+= 1)
  42. {
  43. cout <<"Escriba el valor: ";
  44. cin >> valor;
  45. if (valor=9999)
  46. {
  47. continue;
  48. }
  49. else
  50. {
  51. suma+=valor;
  52. }
  53.  
  54. }
  55.  
  56. cout <<"\nEl promedio es: " << static_cast<double>(suma) / numeroValores <<endl;
  57. }
  58. //Funciones obtener
  59.  
  60. string promedio::obtenerNombre()
  61. {
  62. return nombreUsuario;
  63. }
  64.  
  65.  


« Última modificación: 16 Agosto 2014, 03:20 am por 718208 » En línea

leosansan


Desconectado Desconectado

Mensajes: 1.314


Ver Perfil
Re: Problema en un ejercicio de C++
« Respuesta #1 en: 15 Agosto 2014, 17:57 pm »

"Creo que en:

Código
  1. if (valor=9999)
  2. {
  3. continue;
  4. }


deberías poner ("=" no, es para asignar,  "==" sí, es para comparar):

Código
  1.  for (  numeroValores  = 0 ; ; numeroValores ++ )
  2. ------------------------------------------------
  3.  if ( valor == 9999 )
  4.    break;
  5. ------------------------------------------------
  6.  

EDITADO: El for también había que corregirlo.  ;)

¡¡¡¡ Saluditos! ..... !!!!




« Última modificación: 15 Agosto 2014, 20:31 pm por leosansan » En línea

Mario Olivera

Desconectado Desconectado

Mensajes: 108


Ser loco es pensar diferente.


Ver Perfil
Re: Problema en un ejercicio de C++
« Respuesta #2 en: 16 Agosto 2014, 03:20 am »

"Creo que en:

Código
  1. if (valor=9999)
  2. {
  3. continue;
  4. }


deberías poner ("=" no, es para asignar,  "==" sí, es para comparar):

Código
  1.  for (  numeroValores  = 0 ; ; numeroValores ++ )
  2. ------------------------------------------------
  3.  if ( valor == 9999 )
  4.    break;
  5. ------------------------------------------------
  6.  

EDITADO: El for también había que corregirlo.  ;)

¡¡¡¡ Saluditos! ..... !!!!



 Hola leosansan, desde ya te agradezco siempre tus ayudas, no me di cuenta del error que había puesto el signo de aignación y no el de igualdad, con respecto al for no lo cambié, sino que en el if puse numeroValores--.
 Te vuelvo a decir muchas gracias y disculpa la molestia, dejo el código editado  ;-)

Código
  1. #include <iostream>
  2. using std::cout;
  3. using std::cin;
  4. using std::endl;
  5.  
  6. #include <string>
  7. using std::string;
  8.  
  9. #include "encabezado.h"
  10.  
  11. promedio::promedio(string nombre)
  12. {
  13. establecerNombre(nombre);
  14. }
  15.  
  16. //Funciones establecer
  17.  
  18. void promedio::establecerNombre(string nombre)
  19. {
  20. if (nombre.length() > 5)
  21. {
  22. nombreUsuario = nombre.substr(0,5);
  23. cout <<"el nombre " <<nombre <<" excede los caracteres maximos(5)" <<endl
  24. <<"Se demilito el nombre a los primero 5 caracteres " <<obtenerNombre() <<endl;
  25. }
  26. else
  27. {
  28. nombreUsuario= nombre;
  29. cout <<"Bienvenido! " <<obtenerNombre();
  30. }
  31. }
  32.  
  33. //Funciones Calcular
  34.  
  35. void promedio::calcularPromedio()
  36. {
  37. int suma=0;
  38. int valor=0;
  39. int numeroValores=0;
  40.  
  41. for (valor; valor != 9999;numeroValores+= 1)
  42. {
  43. cout <<"Escriba el valor: ";
  44. cin >> valor;
  45. if (valor==9999)
  46. {
  47. numeroValores--;
  48. continue;
  49. }
  50. else
  51. {
  52. suma+=valor;
  53. }
  54.  
  55. }
  56.  
  57. cout <<numeroValores <<endl;
  58.  
  59. cout <<"\nEl promedio es: " << static_cast<double>(suma) / numeroValores <<endl;
  60. }
  61. //Funciones obtener
  62.  
  63. string promedio::obtenerNombre()
  64. {
  65. return nombreUsuario;
  66. }
  67.  
  68.  
En línea

rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: [SOLUCIONADO] Problema en un ejercicio de C++
« Respuesta #3 en: 16 Agosto 2014, 17:42 pm »

Revisando el bucle de la funcion miembro "calcularPromedio":
Código
  1. int suma=0;
  2. int valor=0;
  3. int numeroValores=0;
  4.  
  5. for (valor; valor != 9999;numeroValores+= 1){
  6.   cout <<"Escriba el valor: ";
  7.   cin >> valor;
  8.  
  9.   if (valor==9999){
  10.      numeroValores--;
  11.      continue;
  12.   }else {
  13.      suma+=valor;
  14.   }
  15. }
No tiene caso utilizar "valor" como la primera expresión del bucle y en el comparas en dos ocasiones "valor" con 9999 y modificas el valor de la variable "numeroValores" en (también) dos ocasiones. Si se cambia este por un bucle while puedes reducir el numero de expresiones al minimo:
Código
  1. int suma = 0;
  2. int valor;
  3. int numeroValores = 0;
  4.  
  5. while (true){
  6.   cout << "Escriba el valor: ";
  7.   cin >> valor;
  8.  
  9.   if (valor == 9999)
  10.      break;
  11.  
  12.   suma += valor;
  13.   numeroValores++;
  14. }


Un saludo
En línea

C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

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