Foros del Web » Programación para mayores de 30 ;) » C/C++ »

[SOLUCIONADO] Por que mi codigo multiplica en lugar de sumar?

Estas en el tema de Por que mi codigo multiplica en lugar de sumar? en el foro de C/C++ en Foros del Web. buenas, soy nuevo programando y tengo un problema con mi codigo, se supone que deberia sumar pero multiplica el resultado, a la hora de escribir ...
  #1 (permalink)  
Antiguo 16/08/2015, 23:13
 
Fecha de Ingreso: agosto-2015
Mensajes: 10
Antigüedad: 8 años, 7 meses
Puntos: 0
Por que mi codigo multiplica en lugar de sumar?

buenas, soy nuevo programando y tengo un problema con mi codigo, se supone que deberia sumar pero multiplica el resultado, a la hora de escribir el primer numero tendria que asignarle el valor escrito a la variable tal como el usuario lo escribio, pero por alguna razon la cual soy incapaz de comprender el primer numero se multiplica por dos y es hasta la segunda vez que se ingresa un valor cuando suma.

agradezco su ayuda

Código C++:
Ver original
  1. #include<iostream>
  2. using namespace std;
  3.  
  4. class ClaseCuenta
  5. {
  6. public:
  7.     int obtenerSaldo ()
  8.     {
  9.         return saldoTotal;
  10.     }
  11.  
  12.     void agregarSaldo (int saldo)
  13.     {
  14.         if(saldoTotal == 0)
  15.         saldoTotal =  saldo;
  16.  
  17.         if(saldoTotal > 0)
  18.         saldoTotal = saldo + saldoTotal;
  19.     }
  20.  
  21.     void retirarSaldo (int saldo)
  22.     {
  23.         saldoTotal = saldoTotal - saldo;
  24.     }
  25.  
  26. private:
  27.     int saldoTotal = 0;
  28. };
  29.  
  30. int main()
  31. {
  32.     ClaseCuenta Cuenta1;
  33.     int valor = 0;
  34.  
  35.     cout<<"el saldo es : ";
  36.     Cuenta1.obtenerSaldo();
  37.  
  38.     cout<<"\ncuanto desea agreagar : ";
  39.     cin>>valor;
  40.     Cuenta1.agregarSaldo(valor);
  41.     cout<<"\nel saldo actual es : ";
  42.     cout<<Cuenta1.obtenerSaldo();
  43.  
  44.  
  45.     cout<<"\ncuanto desea agreagar : ";
  46.     cin>>valor;
  47.     Cuenta1.agregarSaldo(valor);
  48.     cout<<"\nel saldo actual es : ";
  49.     cout<<Cuenta1.obtenerSaldo();
  50.  
  51. }
  #2 (permalink)  
Antiguo 17/08/2015, 01:51
 
Fecha de Ingreso: septiembre-2010
Mensajes: 494
Antigüedad: 13 años, 6 meses
Puntos: 10
Respuesta: Por que mi codigo multiplica en lugar de sumar?

Hola, esto te pasa porque has puesto dos if en la función agregarSaldo(float) que no son excluyentes. Es decir, cuando entras en esa función se evalúan los dos if.
La primera vez, cuando no hay saldo, esto es lo que sucede:
Código C++:
Ver original
  1. if(saldoTotal == 0)
  2.         saldoTotal =  saldo;

Como saldoTotal es 0, se añade saldo al total....pero se evalúa el siguiente if:
Código C++:
Ver original
  1. if(saldoTotal > 0)
  2.             saldoTotal = saldo + saldoTotal;

Como ahora saldoTotal ya es >0 por la sentencia anterior, se le vuelve a añadir el valor de saldo

En las sucesivas llamadas a la función ya no se cumple e primer if, porque saldoTotal ya es mayor que 0, luego sólo se ejecuta el segundo.

Para solucionarlo has de hacer que los dos if sean excluyentes :
Código C++:
Ver original
  1. if{}
  2. else if{}

Aún así no le veo mucha lógica a la función propiamente dicha. Se debería limitar a sumar la cantidad deseada a saldoTotal, sin hacer distinciones si saldoTotal es = a 0 o mayor.
__________________
Mi calculadora en Qt
  #3 (permalink)  
Antiguo 17/08/2015, 10:26
 
Fecha de Ingreso: agosto-2015
Mensajes: 10
Antigüedad: 8 años, 7 meses
Puntos: 0
Respuesta: Por que mi codigo multiplica en lugar de sumar?

entonces crees que seria mas eficiente poner el codigo de la siguiente manera?

otra cosa, me podrias explicar de una forma no muy tecnica pero concisa, que es un if excluyente?

Código C++:
Ver original
  1. void agregarSaldo (int saldo)
  2.     {
  3.         saldoTotal = saldo + saldoTotal;
  4.     }

Última edición por godeffuffeff; 17/08/2015 a las 10:43
  #4 (permalink)  
Antiguo 17/08/2015, 13:51
 
Fecha de Ingreso: septiembre-2010
Mensajes: 494
Antigüedad: 13 años, 6 meses
Puntos: 10
Respuesta: Por que mi codigo multiplica en lugar de sumar?

Hola:

Respecto a lo primero, pues si, no tiene mucho sentido distinguir si el saldoTotal es 0 o no.
Porque esto:
Código C++:
Ver original
  1. saldoTotal =  saldo;
y esto:
Código C++:
Ver original
  1. saldoTotal = saldo + saldoTotal;//saldoTotal = saldo + 0

Es lo mismo cuando saldoTotal es = a 0, luego no ha lugar la distinción.

Respecto a los if excluyentes....bueno, no sé si es muy correcto llamarlos así , pero más o menos:

Esta forma:
Código C++:
Ver original
  1. if(condicion)
  2. {
  3.     haz una cosa
  4. }
  5. if(otra condicion)
  6. {
  7.     haz otra cosa
  8. }

implica que lo que sea va a ser evaluado dos veces, primero para ver si cumple "condicion" y luego para ver si cumple "otra condicion". Es el caso de tu código.

Por otro lado, si hago así:
Código C++:
Ver original
  1. if(condicion)
  2. {
  3.     haz una cosa
  4. }
  5. else if(otra condicion)
  6. {
  7.     haz otra cosa
  8. }
La segunda condición no se evaluará si se ha cumplido la primera.
Y queda:
Código C++:
Ver original
  1. if(condicion)
  2. {
  3.     haz una cosa
  4. }
  5. else
  6. {
  7.     haz otra cosa
  8. }

En este caso se ejecutará el bloque después del else si no se cumple la primera condición.

Mira este ejemplo:
Código C++:
Ver original
  1. int main()
  2.     {
  3.         int num=100;
  4.         if (num==100)
  5.         {
  6.             cout<<"numero = 100"<<endl;
  7.         }
  8.         if (num>50)
  9.         {
  10.             cout<<"numero > 50"<<endl;
  11.         }
  12.     }

En este caso la variable num cumple la doble condición, es = 100 y es > 50
Tal como está el código va a evaluar las dos condiciones y si son ciertas va a ejecutar el bloque que hay dentro.
Pero si cambias la línea:
if (num>50)
por
else if (num>50)
verás que aún siendo cierta la segunda condición no se evalúa (y por tanto no se ejecuta) ya que al ser cierta la primera condición no se sigue evaluando.
__________________
Mi calculadora en Qt

Etiquetas: multiplicacion, resultado, suma
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 12:24.