Condición o Decisión
En esta oportunidad se va a presentar una de las formas en las que se puede resolver un problema cotidiano haciendo usa de la herramienta DFD.Si se quiere conocer un poco más sobre esta herramienta y sobre conceptos básicos a la hora de resolver un algoritmo, pueden dirigirse a la sección "Conceptos" en el menú de inicio del blog.
Para este caso específico nos encontramos con el siguiente problema.
" Estando en un local de venta de servicios,Se requiere saber la cantidad de dinero que se debe devolver al cliente luego de que realiza una compra, teniendo en cuenta que se debe dar el cambio en billetes de la más alta denominación posible. En este local solo se aceptan billetes dado que el precio de los artículos son valores que tienen la forma : x*1000 , siendo x un entero menor que 50. Los billetes tienen la siguiente denominación:
Lo primero que se debe hacer es identificar las variables :
- Valor del artículo y Cantidad de dinero con la que se paga el artículo
- Denominación de los billetes
- Cambio que se debe dar
- La forma en la que se debe dar el cambio
1. Valor del artículo y Cantidad de dinero con la que se paga el artículo
Para empezar se debe inicializar las variables con las que vamos a trabajar, en este caso la solución pide:
- Declarar las variables que vamos a usar y le pedimos al usuario que ingrese el valor que van a tomar las variables - Precio del producto y - Pago.
En esta imagen se pueden ver dos formas de declarar las variables, como nota importante se debe decir que NO ES NECESARIO, declarar variables que van a tomar valores momentáneos, es decir, la variable a la que se le asigna :
cambio = pago-precio
"cambio" se puede o no, inicializar en 0, al comienzo del programa porque le daremos valores a lo largo del trabajo.
2. Denominación de los billetes
- Lo siguiente es ver si el pago ( un billete ) está definido dentro de la denominación que nos da el problema, es decir, si el billete es aceptado. Por ejemplo, se ingresa el pago como 30000 , en este caso el programa debería ser capaz de decir que no existe esa cantidad definida en un billete ( el billete es falso ) , por lo tanto no se acepta el pago y debe pedir al cliente que pagué nuevamente, esta vez con un billete que si se acepte.
En este ejemplo se ve como se va comparando, el pago ( BILLETE ) a cada denominación de uno de los que acepta el programa, pregunta si es igual al de 50000; si le respuesta es no, preguntará si igual a uno de 20000; así hasta que detecte que si es uno de ellos.
Encaso de que no pertenezca a ninguno, le pide al usuario que pague nuevamente porque el billete no es válido.
En este ejemplo se ve como en una sola condición se puede preguntar si el billete que se entregó pertenece a alguno de los que son aceptados por el programa. La premisa es usar la función " OR " que aquí se usa para expresar:
Billete = 50000 O si Billete=20000 O si Billete=10000 ..etc. Si no pertenece a ninguno, le pedirá que ingrese nuevamente el pago.
3. Cambio que se debe dar
- El tercer paso en la programación del trabajo es ver si el pago alcanza a cubrir el costo del producto, para eso se trabaja un condicional donde se pregunta si : " pago>=precio " . En caso de que la respuesta sea NO, se imprime un mensaje diciendo que el pago no es suficiente y que se debe pagar con un billete de mayor denominación.
- Si la respuesta es SI , se realiza la la operación " cambio= pago -precio ", para poder conocer mediante la variable cambio, la cantidad de dinero que se debe devolver al cliente.
- Aquí otro condicional para preguntar si " cambio = 0 ", porque si la respuesta es SI , solo resta imprimir que NO HAY CAMBIO, por otro lado si la respuesta es NO, se debe seguir con el desarrollo del algoritmo.
Hasta el momento, debería estar de la siguiente forma ( luego de este último bloque condicional)
4. Forma en la que se debe dar el cambio
Forma de respuesta # 1
- Bueno esta es la parte fundamental y que en realidad es el problema de este ejercicio.
Lo que hay que considerar para que el trabajo sea mucho más sencillo es :
- Dado que la compra mínima que se puede hacer es de 1.000 y que el valor máximo que recibe nuestro programa como forma de pago es UN BILLETE de 50.000 , es Lógico pensar que NUNCA se devolverá un billete de 50.000 y que no se permitirá un compra de valor 0.
- Para trabajar más fácil de ahora en más se considerará que todo se pagó con un billete de 50.000, esto para poder dar orden lógico a las respuestas y que un momento solo se necesite "copiar y pegar " ( más adelante se explica este procedimiento).
Primero se supondrá una compra de 1.000, entonces veamos como se debería dar el cambio:
resultado= pago - precio ; » resultado = 50000-1000 » » resultado = 49000.
cambio=resultado
Luego a la variable cambio le asignamos resultado, para que esta resta se mantenga fija y a la otro poder ir disminuyéndola.
cambio=resultado
Luego a la variable cambio le asignamos resultado, para que esta resta se mantenga fija y a la otro poder ir disminuyéndola.
Lo primero sería preguntar ( en un condicional ) si el cambio >= 20.000.
- En este caso sabemos que cambio es igual a 49000, por tanto iremos por la opción SI . Le restaremos a la variable "cambio" 20000 .. para conocer que resultado da. En este ejemplo quedaría así :
cambio= cambio -20000 ; de esta manera seguiremos usando la variable cambio en el resto del programa; y en este caso particular que se ha propuesto el resultado de esto será:
cambio = 49000 - 20000 »» cambio = 29000
Luego en otro condicional volveremos a hacer la pregunta si " cambio>=20000 ,
- En este caso sabemos que cambio es igual a 29000, por tanto iremos por la opción SI . Le restaremos a la variable "cambio" 20000 .. para conocer que resultado da. En este ejemplo quedaría así :
cambio = 29000 - 20000 »» cambio = 9000
Todo lo anterior quedaría de la siguiente forma en nuestro algoritmo:
Otra conjetura lógica aplica en este caso ( el de el ejemplo planteado = compra de 1.000 ), si ya tenemos un resultado donde le hemos restado DOS veces 20.000, y por lo menos se hizo una compra de 1.000, es lógico pensar que la variable cambio NO tomara valores mayores a 9.000
Por lo tanto la siguiente acción más lógica sera preguntar " cambio>=5000 " ( en este ejemplo sabemos que si ) por eso iremos por la opción SI, Le restaremos a la variable "cambio" 5.000 .. para conocer que resultado da. En este ejemplo quedaría así :
Por lo tanto la siguiente acción más lógica sera preguntar " cambio>=5000 " ( en este ejemplo sabemos que si ) por eso iremos por la opción SI, Le restaremos a la variable "cambio" 5.000 .. para conocer que resultado da. En este ejemplo quedaría así :
cambio = 9000 - 5000 »» cambio = 4000
( En este instante podemos preguntar si cambio es igual a 0, porque de ser así se imprimiría " EL cambio es ",resultado, " y se debe entregar con DOS billetes de 20000 y uno de 5000" ).
Luego se sabe, por lógica, que si cambio <10.000 y le restamos 5.000, se deduce que cambio va a ser menor que 5.000, por tanto se puede pasar directamente a preguntar si " cambio>= 2000". Para la opción NO, significa que al restarle 5000 a cambio el resultado es menor que 2000, con lo que se obtiene que cambio necesita un billete de 1.000.
Y se imprime : "EL cambio es ",resultado, " y se debe entregar con DOS billetes de 20000 y uno de 1000" ).
Todo o anterior quedaría así :
En esta imagen se puede apreciar como se debería imprimir si la variable resultado es = 45000, es decir si se hizo una compra de 5.000. Con esto ya se puede deducir que a medida que se va resolviendo el programa, se puede dar respuesta a otras condiciones.
En la opción SI , del último condicional, se le restará a cambio 2000 y quedará asi :
cambio = cambio- 2000 »» en el ejemplo para este caso es:
cambio = 4000-2000 »» cambio = 2000.
Para finalizar el ejemplo propuesto solo resta preguntar si cambio=2000.
En la opción SI , se imprime : "EL cambio es ",resultado, " y se debe entregar con DOS billetes de 20000 UN billete de 5000 y dos de 2000"
En la opción NO , se imprime :"EL cambio es ",resultado, " y se debe entregar con DOS billetes de 20000 UN billete de 2000 UN billete de 5000 y UN billete de 1000"
En resumen con el algoritmo trabajado hasta este momento se puede responder por compras de 1000, 2000 , 3000 , 4000 y 5000, pagando con un billete de 50000.
Para el resto del programa si se decide seguir, solo se trata de copiar y pegar para las diferentes condiciones , modificando claro las impresiones ( respuestas que se muestran al usuario ).
Hasta el momento el resultado de nuestro último segmento queda así:
( En este instante podemos preguntar si cambio es igual a 0, porque de ser así se imprimiría " EL cambio es ",resultado, " y se debe entregar con DOS billetes de 20000 y uno de 5000" ).
Luego se sabe, por lógica, que si cambio <10.000 y le restamos 5.000, se deduce que cambio va a ser menor que 5.000, por tanto se puede pasar directamente a preguntar si " cambio>= 2000". Para la opción NO, significa que al restarle 5000 a cambio el resultado es menor que 2000, con lo que se obtiene que cambio necesita un billete de 1.000.
Y se imprime : "EL cambio es ",resultado, " y se debe entregar con DOS billetes de 20000 y uno de 1000" ).
Todo o anterior quedaría así :
En esta imagen se puede apreciar como se debería imprimir si la variable resultado es = 45000, es decir si se hizo una compra de 5.000. Con esto ya se puede deducir que a medida que se va resolviendo el programa, se puede dar respuesta a otras condiciones.
En la opción SI , del último condicional, se le restará a cambio 2000 y quedará asi :
cambio = cambio- 2000 »» en el ejemplo para este caso es:
cambio = 4000-2000 »» cambio = 2000.
Para finalizar el ejemplo propuesto solo resta preguntar si cambio=2000.
En la opción SI , se imprime : "EL cambio es ",resultado, " y se debe entregar con DOS billetes de 20000 UN billete de 5000 y dos de 2000"
En la opción NO , se imprime :"EL cambio es ",resultado, " y se debe entregar con DOS billetes de 20000 UN billete de 2000 UN billete de 5000 y UN billete de 1000"
En resumen con el algoritmo trabajado hasta este momento se puede responder por compras de 1000, 2000 , 3000 , 4000 y 5000, pagando con un billete de 50000.
Para el resto del programa si se decide seguir, solo se trata de copiar y pegar para las diferentes condiciones , modificando claro las impresiones ( respuestas que se muestran al usuario ).
Hasta el momento el resultado de nuestro último segmento queda así:
No hay comentarios:
Publicar un comentario