[SOLUCIONADO] Problema en un ejercicio de C++

Iniciado por Mario Olivera, 15 Agosto 2014, 17:31 PM

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

Mario Olivera

 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 (cpp) [Seleccionar]
#include <iostream>
using std::cin;
using std::cout;

#include <string>
using std::string;
using std::getline;

#include "encabezado.h"

int main()
{
string nombre;

cout <<"Escriba su nombre: ";
getline(cin,nombre);

promedio promedio1(nombre);
promedio1.calcularPromedio();
return 0;
}

encabezado.h
Código (cpp) [Seleccionar]
#include <string>
using std::string;

class promedio
{
public:
promedio(string);
//Funciones establecer;
void establecerNombre(string);
void calcularPromedio();
//Funciones obtener
string obtenerNombre();
int obtenerPromedio();
private:
int promedio1;
string nombreUsuario;
};

encabezado.cpp
Código (cpp) [Seleccionar]
#include <iostream>
using std::cout;
using std::cin;
using std::endl;

#include <string>
using std::string;

#include "encabezado.h"

promedio::promedio(string nombre)
{
establecerNombre(nombre);
}

//Funciones establecer

void promedio::establecerNombre(string nombre)
{
if (nombre.length() > 5)
{
nombreUsuario = nombre.substr(0,5);
cout <<"el nombre " <<nombre <<" excede los caracteres maximos(5)" <<endl
<<"Se demilito el nombre a los primero 5 caracteres " <<obtenerNombre() <<endl;
}
else
{
nombreUsuario= nombre;
cout <<"Bienvenido! " <<obtenerNombre();
}
}

//Funciones Calcular

void promedio::calcularPromedio()
{
int suma=0;
int valor=0;
int numeroValores=0;

for (valor; valor != 9999;numeroValores+= 1)
{
cout <<"Escriba el valor: ";
cin >> valor;
if (valor=9999)
{
continue;
}
else
{
suma+=valor;
}

}

cout <<"\nEl promedio es: " << static_cast<double>(suma) / numeroValores <<endl;
}
//Funciones obtener

string promedio::obtenerNombre()
{
return nombreUsuario;
}


leosansan

#1
"Creo que en:

Código (cpp) [Seleccionar]
if (valor=9999)
{
continue;
}



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

Código (cpp) [Seleccionar]
 for (  numeroValores  = 0 ; ; numeroValores ++ )
------------------------------------------------
 if ( valor == 9999 )
   break;
------------------------------------------------


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

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



Mario Olivera

Cita de: leosansan en 15 Agosto 2014, 17:57 PM
"Creo que en:

Código (cpp) [Seleccionar]
if (valor=9999)
{
continue;
}



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

Código (cpp) [Seleccionar]
 for (  numeroValores  = 0 ; ; numeroValores ++ )
------------------------------------------------
 if ( valor == 9999 )
   break;
------------------------------------------------


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 (cpp) [Seleccionar]
#include <iostream>
using std::cout;
using std::cin;
using std::endl;

#include <string>
using std::string;

#include "encabezado.h"

promedio::promedio(string nombre)
{
establecerNombre(nombre);
}

//Funciones establecer

void promedio::establecerNombre(string nombre)
{
if (nombre.length() > 5)
{
nombreUsuario = nombre.substr(0,5);
cout <<"el nombre " <<nombre <<" excede los caracteres maximos(5)" <<endl
<<"Se demilito el nombre a los primero 5 caracteres " <<obtenerNombre() <<endl;
}
else
{
nombreUsuario= nombre;
cout <<"Bienvenido! " <<obtenerNombre();
}
}

//Funciones Calcular

void promedio::calcularPromedio()
{
int suma=0;
int valor=0;
int numeroValores=0;

for (valor; valor != 9999;numeroValores+= 1)
{
cout <<"Escriba el valor: ";
cin >> valor;
if (valor==9999)
{
numeroValores--;
continue;
}
else
{
suma+=valor;
}

}

cout <<numeroValores <<endl;

cout <<"\nEl promedio es: " << static_cast<double>(suma) / numeroValores <<endl;
}
//Funciones obtener

string promedio::obtenerNombre()
{
return nombreUsuario;
}


rir3760

Revisando el bucle de la funcion miembro "calcularPromedio":
Código (cpp) [Seleccionar]
int suma=0;
int valor=0;
int numeroValores=0;

for (valor; valor != 9999;numeroValores+= 1){
   cout <<"Escriba el valor: ";
   cin >> valor;
   
   if (valor==9999){
      numeroValores--;
      continue;
   }else {
      suma+=valor;
   }
}

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 (cpp) [Seleccionar]
int suma = 0;
int valor;
int numeroValores = 0;

while (true){
   cout << "Escriba el valor: ";
   cin >> valor;
   
   if (valor == 9999)
      break;
   
   suma += valor;
   numeroValores++;
}


Un saludo
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