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

Duda básica de C++... en la división se redondea

Estas en el tema de Duda básica de C++... en la división se redondea en el foro de C/C++ en Foros del Web. Hola, acabo de empezar hace un rato a aprender C++ y tengo un problemilla.. Escribí lo siguiente: Código: #include <iostream> #include <stdlib.h> using namespace std; ...
  #1 (permalink)  
Antiguo 23/01/2011, 18:15
 
Fecha de Ingreso: julio-2009
Mensajes: 77
Antigüedad: 14 años, 9 meses
Puntos: 5
Duda básica de C++... en la división se redondea

Hola, acabo de empezar hace un rato a aprender C++ y tengo un problemilla.. Escribí lo siguiente:

Código:
#include <iostream>
#include <stdlib.h>
using namespace std;

float Cambio, Taza, Resultado;

int main ()
{
    cout << "Introduza la cantidad de pesos que desea cambiar: ";
    cin >> Cambio;
    cout << "\nIntroduzca la tasa que usara para cambiar: ";
    cin >> Taza;
    Resultado = Cambio / Taza;
    cout << "\nSu cambio en dolares es: " << Resultado << " .\n";
    cout << "\n";
    
    system("PAUSE");
    return 0;
}
Cuando lo pruebo, noto que las cuentas se redondean. Es decir, la división 400 % 4,12 me da 100 y no 97,087, por ejemplo. ¿Cómo logro que me tire el número exacto y cómo manejo la cantidad de decimales?

Gracias.

*Por cierto, en vez del system("PAUSE") intenté usar el getchar () pero no me funciona. Ayer sí lo hacía... leí algo referido a que se pudo haber quedado algo guardado en el buffer, pero ni idea cómo solucionarlo...
  #2 (permalink)  
Antiguo 24/01/2011, 09:30
Avatar de Munire  
Fecha de Ingreso: julio-2010
Ubicación: en el ciberdespacio (España)
Mensajes: 150
Antigüedad: 13 años, 9 meses
Puntos: 4
Respuesta: Duda básica de C++... en la división se redondea

para escribir numeros con decimales se hace con el punto -> 4.12


tu lo estaras haciendo con la coma -> 4,12

entonces solo te coge el 4

400 / 4 = 100


si lo haces con el punto sale bien:
97.0874



Cita:
*Por cierto, en vez del system("PAUSE") intenté usar el getchar () pero no me funciona. Ayer sí lo hacía... leí algo referido a que se pudo haber quedado algo guardado en el buffer, pero ni idea cómo solucionarlo...
getchar no esta para c++, utiliza esto

cin.ignore();
cin.get();

y en vez de esto

cout << "\nSu cambio en dolares es: " << Resultado << " .\n";

cout << "\nSu cambio en dolares es: " << Resultado << endl;
  #3 (permalink)  
Antiguo 24/01/2011, 13:00
 
Fecha de Ingreso: enero-2008
Mensajes: 229
Antigüedad: 16 años, 3 meses
Puntos: 1
Respuesta: Duda básica de C++... en la división se redondea

el problema se deriva del echo de que introduces un 4,12, y lo tratas de almacenar en un entero. la solucion se daría con la primera propuesta de Munire. En cuanto si se queda algo en el buffer de entrada, entoces puedes utilizar la instruccion fflush(stdin).
  #4 (permalink)  
Antiguo 24/01/2011, 14:06
 
Fecha de Ingreso: julio-2009
Mensajes: 77
Antigüedad: 14 años, 9 meses
Puntos: 5
Respuesta: Duda básica de C++... en la división se redondea

Gracias a ambos por sus respuestas.

En cuanto al uso de endl en vez de \n, ¿por qué motivo sería?
  #5 (permalink)  
Antiguo 25/01/2011, 06:11
Avatar de Munire  
Fecha de Ingreso: julio-2010
Ubicación: en el ciberdespacio (España)
Mensajes: 150
Antigüedad: 13 años, 9 meses
Puntos: 4
Respuesta: Duda básica de C++... en la división se redondea

Cita:
En cuanto al uso de endl en vez de \n, ¿por qué motivo sería?
por que es mucho mas comodo y por que limpia el buffer de salida.

haz la prueba, escribe endl; y "\n"; a ver con que tardas menos...
  #6 (permalink)  
Antiguo 25/01/2011, 08:01
Avatar de nup_  
Fecha de Ingreso: noviembre-2010
Mensajes: 265
Antigüedad: 13 años, 5 meses
Puntos: 32
Respuesta: Duda básica de C++... en la división se redondea

Cita:
Iniciado por Munire Ver Mensaje
por que es mucho mas comodo y por que limpia el buffer de salida.

haz la prueba, escribe endl; y "\n"; a ver con que tardas menos...
De hecho, escribiendo "\n" tardas menos.
http://bytes.com/topic/c/answers/128995-std-endl

La mayoría de los programadores usan endl porq para ellos es mas "legible" o por problemas de costumbre o comodidad. Pero lo q no hay dudas es q escribir "\n", en vez de endl, es más rápido.


saludos;

Nup_
  #7 (permalink)  
Antiguo 25/01/2011, 12:08
Avatar de Munire  
Fecha de Ingreso: julio-2010
Ubicación: en el ciberdespacio (España)
Mensajes: 150
Antigüedad: 13 años, 9 meses
Puntos: 4
Respuesta: Duda básica de C++... en la división se redondea

gracias nup_ muy interesante la pagina.

cuando he dicho que se tarda menos en escribir endl; me referia unicamente al tiempo que te conlleva escribirlo, no al tiempo de ejecucion.

por lo que he leido en el enlace, endl es mas lento pero es mas robusto.

saludos
  #8 (permalink)  
Antiguo 25/01/2011, 13:02
 
Fecha de Ingreso: julio-2009
Mensajes: 77
Antigüedad: 14 años, 9 meses
Puntos: 5
Respuesta: Duda básica de C++... en la división se redondea

All crystal clear, muchas gracias :)

Etiquetas: Ninguno
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 05:43.