You are on page 1of 7

INTRODUCCIÓN AL SOFTWARE

Desarrollo de un programa
secuencial con expresiones

INTRO_SW

Objetivos

• Practicar con la creación de un programa secuencial


que utiliza expresiones
• Realizar operaciones básicas de entrada/salida por el
terminal
• Uso de librerías externas
3

INTRO_SW

Descripción general del problema


• Una tienda nos ha pedido desarrollar un programa que facilite a los
dependientes el cálculo del cambio que deben devolver a los
clientes tras realizar una compra
• El programa presenta los siguientes requisitos:
▫ el cambio siempre se devuelve con monedas
▫ se busca minimizar el número de monedas a devolver para agilizar el
trabajo de los dependientes
▫ el programa es estrictamente secuencial
• Ejemplo: un cliente realiza una compra de 7,40€ y paga con 10€
▫ el cambio sería de 2,60 € repartidos como sigue

2€ 1€ 50c 20c 10c 5c 2c 1c


1 0 1 0 1 0 0 0

INTRO_SW

Planteamiento
• Etapas del algoritmo a desarrollar

solicitar el precio del calcular el número de


calcular el cambio
artículo y la cantidad monedas de cada tipo
que debe entregarse
de dinero entregada que hay que entregar
al cliente
por el cliente al cliente

mostrar por pantalla mostrar por pantalla


mostrar por pantalla
el número de el identificador del
el número de
monedas de cada tipo dependiente y el
monedas totales
a entregar cambio a entregar
5

INTRO_SW

Organización

Parte 1: Software simplificado para una caja registradora

Parte 2: Software para una caja registradora (v 1.0)

Parte 3: Software para una caja registradora (v 1.1)

INTRO_SW

Parte 1: Versión simplificada del software


• Crea un fichero cambio_simplificado.c que implemente cada
una de las etapas del algoritmo propuesto
▫ utilizar vuestras iniciales como identificador del dependiente
▫ crear las variables y constantes que se consideren necesarias
 p.ej., añadir constantes para los valores de las monedas disponibles
• Esta versión preliminar requiere:
▫ que todas las entradas y los pagos de los clientes se realicen en
euros como números enteros
 esto es, un cliente paga 20€ un artículo que cuesta 5€
▫ que el cambio siempre se devuelva exclusivamente con monedas
de 1 o 2 euros
7

INTRO_SW

Parte 1: Ejemplo de salida del programa

INTRO_SW

Parte 2: Versión 1.0 del software

• Crea un fichero cambio.c que implemente cada una de


las etapas del algoritmo propuesto
▫ se puede partir del programa implementado en el apartado
anterior
• Esta versión requiere:
▫ que todas las entradas y los pagos de los clientes se realizan
en euros como números reales
 esto es, un cliente paga 20.0€ un artículo que cuesta 5.75€
▫ que el cambio siempre se devuelva con monedas:
 2 euros, 1 euro, 50 céntimos, 20 céntimos, 10 céntimos, 5 céntimos,
2 céntimos y 1 céntimo
9

INTRO_SW

Parte 2: Ejemplo de salida del programa

10

INTRO_SW

Parte 2: Comprobación del programa

• Comprueba si tu programa funciona correctamente con


los siguientes datos
▫ precio del artículo: 10.1 €
▫ pago del cliente: 20.0 €
• En caso de que la salida no sea la esperada, ¿podrías
indicar el motivo del error?
▫ Ayuda: muestra el cambio en € con 10 decimales
▫ añade la explicación como comentario en el código
▫ una posible solución se muestra en la parte 3 (opcional)
11

INTRO_SW

Parte 3: Versión 1.1 del software (opcional)


• Crea un fichero cambio_rebajas.c que implemente cada
una de las etapas del algoritmo propuesto con las
siguientes modificaciones:
▫ al precio del artículo se le aplica una rebaja del 10%
▫ se muestra por pantalla el precio rebajado del artículo con
dos decimales de precisión
• Comprueba que el programa funciona correctamente
con los siguientes datos
▫ precio del artículo: 20.5 €
▫ pago del cliente: 30.0 €
▫ una posible salida se muestra a continuación

12

INTRO_SW

Parte 3: Ejemplo de salida del programa


13

INTRO_SW

Parte 3: Corrección de los problemas de precisión


• Si la salida de tu programa para el ejemplo anterior no es la
esperada, puede deberse a un problema de precisión
▫ podría solucionarse haciendo uso de la función round
double round (double a);
 esta función devuelve el número entero más cercano al número
pasado como parámetro
▫ ejemplo:
num_entero = (int) (round (4.9)); // num_entero vale 5
 definido en la librería matemática estándar:
▫ fichero de cabecera: math.h
▫ librería: libm
• Modifica tu código para que utilice la función round y
comprueba la salida con el ejemplo anterior

14

INTRO_SW

Práctica 4: Entrega
• Incluir en un único fichero zip:
▫ el código fuente (ficheros con extensión .c) con cada una
de las versiones desarrolladas
▫ una captura de pantalla de la salida de cada una de las
versiones desarrolladas
▫ una captura de pantalla de la salida del ejemplo propuesto
en el apartado comprobación del programa de la parte 2
 no olvides incluir la respuesta a la pregunta planteada como
comentario en el código

You might also like