| Ver tema anterior :: Ver siguiente tema | | Autor | Mensaje |
|---|
algodificil
Registrado: 08 Ago 2011 Mensajes: 3
| Publicado: 08/08/2011 11:33 am | | | Título: Duda algoritmo "dinero retirado cajero" |
| Buenas, antes de nada saludaros a todos y espero aprender en el foro muucho jaja
Bueno os presento mi problema, tengo que hacer un algoritmo para que un cajero calcule el numero optimo de billetes de 20,10,5 y 1 cuando pones una cantidad.
Mi pseudocodigo (se dice así verdad? ) está algo así:
#include <iostream> #include <cstdlib> using namespace std;
int main(){
unsigned int n,rt,v,d,c,u;// rt=resto total, v=billetes de 20, d=billetes de 10...
cout << "Introduzca la cantidad a retirar: "; cin >> n;
if(n>=20){ v=n/20; rt=n%20; cout << "Usted retirara "<< v << " billetes de 20euros"<< endl; }else if(n>=10 || rt>=10){ d=n/10; rt=n%10; cout << "Usted retirara "<< d << " billetes de 10euros" << endl; }else if(n>=5 || rt>=5){ c=n/5; rt=n%5; cout << "Usted retirara "<< c << " billetes de 5euros" << endl; }else{ u=n/1; cout << "Usted retirara "<< u << " monedas de 1euro" << endl; } system("PAUSE"); return 0; }
El programa no me da error, pero cuando lo ejecuto solo me ejecuta el primer if (n>=20) o el segundo (n>=10) si la cantida es menor que 20, aunque sea menor que 10. Bueno espero que lo entiendan y me orienten un poco. Por cierto estoy trabajando con Dev-c++ v4.9, aunque no creo que sea relevante jajaja Un saludo y gracias. |
| | Volver arriba | |  | rir3760

Registrado: 01 Oct 2004 Mensajes: 7517 Ubicación: Mexico
| Publicado: 08/08/2011 3:38 pm | | | Título: |
| Los errores en el programa son varios.
Uno de ellos es logico. En un bloque "if ... else if ... else if ..." solo se ejecuta el bloque de la primera condicion verdadera (en realidad solo hay una condicion verdadera ya que son "if ... else ..." anidados). En su lugar debes verificar cada uno de los casos (billetes de 20, 10, etc.) uno por uno de mayor a menor.
Otro error es no darle un valor inicial a la variable "rt" y se puede reducir el numero de estas.
Puedes utilizar el motor de busqueda de los foros para comparar tu solucion con otras para el problema de "cambio de billetes".
El programa corregido es:
| Código: | #include <iostream> #include <cstdlib>
using namespace std;
int main() { unsigned cantidad; unsigned num_billetes; cout << "Introduzca la cantidad a retirar: "; cin >> cantidad; if (cantidad >= 20){ num_billetes = cantidad / 20; cantidad = cantidad % 20; if (num_billetes > 0) cout << "Usted retirara "<< num_billetes << " billetes de 20 Euros"<< endl; } if (cantidad >= 10){ num_billetes = cantidad / 10; cantidad = cantidad % 10; if (num_billetes > 0) cout << "Usted retirara "<< num_billetes << " billetes de 10 Euros" << endl; } if (cantidad >= 5){ num_billetes = cantidad / 5; cantidad = cantidad % 5; if (num_billetes > 0) cout << "Usted retirara "<< num_billetes << " billetes de 5 Euros" << endl; } if (cantidad > 0){ cout << "Usted retirara "<< cantidad << " monedas de 1 Euro" << endl; } return 0; } |
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 |
| | Volver arriba | |  | | |
| No puede crear mensajes No puede responder temas No puede editar sus mensajes No puede borrar sus mensajes No puede votar en encuestas
|
|
| |