Resolviendo Desafíos Avanzados
Bienvenido a otra emocionante entrega de nuestro curso de programación en LPP. En esta ocasión, nos sumergiremos en un ejercicio más complejo que pondrá a prueba y fortalecerá los conocimientos que hemos adquirido hasta ahora. En este desafío, combinaremos conceptos clave, como registros, funciones, procedimientos y condicionales, para crear un programa integral.
Material Audiovisual
Te animamos a explorar nuestro video tutorial. En este material, profundizamos en cada concepto y ejercicio que abordamos en este artículo, ofreciendo una comprensión más detallada. Este video se presenta como un complemento valioso para consolidar tu aprendizaje. ¡No dudes en sumergirte en el contenido visual y fortalecer tus habilidades!
Código Fuente
En el siguiente link podrás descargar el código de los ejemplos vistos en el vídeo.
Ejercicio Propuesto
En esta ocasión, nos sumergiremos en una mejora del ejercicio presentado en el artículo anterior (puedes revisarlo aquí si aún no lo has visto). En ese ejercicio, utilizamos registros para gestionar información relacionada con una línea específica de vehículos en un concesionario o tienda (Marca, línea, color, cantidad y valor unitario). Ahora, ampliaremos este concepto y mejoraremos la funcionalidad del programa.
Creamos un registro que relaciona la Marca, línea, color, cantidad y valor unitario de un tipo específico de vehículo vendido por la tienda.
Al ejecutar el programa, se solicitará al usuario que cargue el inventario actual. Por ejemplo: Marca=’Ford’, Línea=’Fiesta’, Color=’Gris’, Cantidad=’5′, Valor Unitario=’25,000′.
Con el inventario cargado, Presentamos un menú con las siguientes opciones:
Ingreso de Producto (Opción 1): Permite al usuario aumentar la cantidad en el inventario.
Venta de Producto (Opción 2): Permite al usuario disminuir la cantidad en el inventario.
Cambio de Valor Unitario (Opción 3): Permite al usuario modificar el valor unitario del vehículo.
Mostrar Información del Inventario Actual (Opción 4): Muestra en pantalla la información actual almacenada en el registro.
Salir (Opción 5): Cierra el programa.
Después de cada acción del usuario, el programa presenta nuevamente el menú, permitiéndole ejecutar nuevas operaciones en el inventario. Este ciclo continúa hasta que el usuario selecciona la opción 5, para salir.
Te alentamos a ver el vídeo explicativo y a intentar resolver el ejercicio por ti mismo antes de revisar nuestra solución detallada en este artículo.
¿Estás preparado para explorar la solución? ¡Continuemos!
1. Declaración del Registro:
Se define un registro llamado rVehiculo
que tiene campos para la marca, línea, color, cantidad (entero) y valor unitario (real) de un vehículo.
/* Registros */
registro rVehiculo
cadena[100] marca
cadena[100] linea
cadena[50] color
entero cantidad
real valorUnidad
fin registro
2. Declaración de Variables Globales:
vAuto
: Es una variable del tipo rVehiculo
que almacenará la información del inventario de un vehículo.continuar
: Es una variable booleana que controla si el programa debe continuar ejecutándose.menu
: Es una variable entera que almacenará la opción seleccionada por el usuario en el menú.
/* variables globales */
rVehiculo vAuto
booleano continuar
entero menu
3. Procedimientos:
CrearTitulo
: Genera un título con formato para mejorar la presentación en pantalla.CargueInicialInventario
: Solicita al usuario cargar información inicial del inventario, como marca, línea, color, cantidad y valor unitario.IngresarInventario
: Permite al usuario ingresar nuevos vehículos al inventario, aumentando la cantidad.VenderVehiculo
: Permite al usuario vender vehículos, disminuyendo la cantidad en el inventario.CambiarValorUnitario
: Permite al usuario cambiar el valor unitario de un vehículo.MostrarInventario
: Muestra en pantalla la información actual del inventario.
/* procedimientos */
/* procedimiento encargado de generar títulos con formato */
procedimiento CrearTitulo(cadena[100] vTitulo)
inicio
llamar nueva_linea
escriba "********** " + vTitulo + " **********"
llamar nueva_linea
llamar nueva_linea
fin
/* procedimiento encargado de solicitar al usuario el cargue inicial de inventario */
procedimiento CargueInicialInventario
inicio
llamar nueva_linea
llamar CrearTitulo("Cargue Inicial de Inventario")
escriba "Ingrese la MARCA del vehículo: "
lea vAuto.marca
escriba "Ingrese la LINEA del vehículo: "
lea vAuto.linea
escriba "Ingrese el COLOR del vehículo: "
lea vAuto.color
escriba "Ingrese la CANTIDAD inicial de inventario: "
lea vAuto.cantidad
escriba "Ingrese el VALOR unitario inicial del vehículo: "
lea vAuto.valorUnidad
llamar nueva_linea
fin
/* Procedimiento para realizar un ingreso de inventario */
procedimiento IngresarInventario
entero nuevos
inicio
llamar nueva_linea
llamar CrearTitulo("Ingreso de Inventario")
escriba "Cuantos vehículos nuevos desea ingresar: "
lea nuevos
/* realizar la suma */
vAuto.cantidad <- vAuto.cantidad + nuevos
escriba "Ingreso realizado correctamente!"
llamar nueva_linea
fin
/* procedimiento para venta de inventario */
procedimiento VenderVehiculo
entero vendidos
inicio
llamar nueva_linea
llamar CrearTitulo("Venta de vehículos")
escriba "Cuantos Vehículos fueron vendidos: "
lea vendidos
/* resta al inventario */
vAuto.cantidad <- vAuto.cantidad - vendidos
escriba "Venta realizada correctamente!"
llamar nueva_linea
fin
/* procedimiento para cambiar valor unitario */
procedimiento CambiarValorUnitario
real nuevoValor
inicio
llamar nueva_linea
llamar CrearTitulo("Cambio de Valor Unitario")
escriba "Ingrese el nuevo valor del vehículo: "
lea nuevoValor
/* asignación nuevo valor al registro */
vAuto.valorUnidad <- nuevoValor
escriba "Se realizo el cambio correctamente!"
llamar nueva_linea
fin
/* procedimiento para mostrar en pantalla estado de inventario actual */
procedimiento MostrarInventario
real valorTotal
inicio
llamar nueva_linea
llamar CrearTitulo("Informacion de Inventario Actual")
escriba "Marca: " + vAuto.marca
llamar nueva_linea
escriba "Linea: " + vAuto.linea
llamar nueva_linea
escriba "Color: " + vAuto.color
llamar nueva_linea
escriba "Cantidad: "
escriba vAuto.cantidad
llamar nueva_linea
escriba "Valor Unitario: $ "
escriba vAuto.valorUnidad
llamar nueva_linea
/* total inventario */
valorTotal <- (vAuto.cantidad * vAuto.valorUnidad)
escriba "Valor Total Inventario: $ "
escriba valorTotal
llamar nueva_linea
fin
4. Funciones:
CargarMenu
: Presenta un menú de opciones al usuario y retorna la opción seleccionada.
/* funciones */
/* funcion para carga de menu en pantalla */
funcion CargarMenu : entero
entero opcion
inicio
llamar nueva_linea
llamar CrearTitulo("Menu de Opciones")
escriba "1. Ingresar Producto."
llamar nueva_linea
escriba "2. Vender Producto."
llamar nueva_linea
escriba "3. Cambiar Valor Unitario."
llamar nueva_linea
escriba "4. Mostrar Informacón del Inventario Actual."
llamar nueva_linea
escriba "5. Salir"
llamar nueva_linea
escriba "Que opción desea realizar?: "
lea opcion
retorne opcion
fin
5. Programa Principal:
Se inicializan las variables y se carga la información inicial del inventario.
Se inicia un bucle que permite al usuario seleccionar opciones del menú hasta que decida salir.
Dependiendo de la opción seleccionada, se invoca el procedimiento correspondiente para realizar la acción deseada.
El programa se repite hasta que el usuario elige salir.
/* programa principal */
inicio
/* inicialización de variables */
continuar <- verdadero
/* ingresar información inicial del inventario */
llamar CargueInicialInventario()
Repita
/* cargar el menu */
menu <- CargarMenu()
/* toma decisiones */
Si (menu = 1) Entonces
/* ingresar inventario */
llamar IngresarInventario()
Sino
Si (menu = 2) Entonces
/* vender producto */
llamar VenderVehiculo()
Sino
Si (menu = 3) Entonces
/* cambiar valor unitario */
llamar CambiarValorUnitario()
Sino
Si (menu = 4) Entonces
/* mostrar información del inventario */
llamar MostrarInventario()
Sino
Si (menu = 5) Entonces
/* salir */
continuar <- falso
Sino
escriba "Por favor ingrese una opción entre 1 y 5."
Fin Si
Fin Si
Fin Si
Fin Si
Fin Si
Hasta (continuar = falso)
escriba "Gracias por utilizar nuestro programa!"
fin
6. Fin del Programa:
Se agradece al usuario por utilizar el programa al salir.
escriba "Gracias por utilizar nuestro programa!"
Resultado Final:
Habiendo analizado minuciosamente cada componente del programa es hora de ensamblarlo por completo. A continuación, te presentamos la estructura completa del programa, integrando cada una de las partes previamente explicadas.
/* Registros */
registro rVehiculo
cadena[100] marca
cadena[100] linea
cadena[50] color
entero cantidad
real valorUnidad
fin registro
/* variables globales */
rVehiculo vAuto
booleano continuar
entero menu
/* procedimientos */
/* procedimiento encargado de generar títulos con formato */
procedimiento CrearTitulo(cadena[100] vTitulo)
inicio
llamar nueva_linea
escriba "********** " + vTitulo + " **********"
llamar nueva_linea
llamar nueva_linea
fin
/* procedimiento encargado de solicitar al usuario el cargue inicial de inventario */
procedimiento CargueInicialInventario
inicio
llamar nueva_linea
llamar CrearTitulo("Cargue Inicial de Inventario")
escriba "Ingrese la MARCA del vehículo: "
lea vAuto.marca
escriba "Ingrese la LINEA del vehículo: "
lea vAuto.linea
escriba "Ingrese el COLOR del vehículo: "
lea vAuto.color
escriba "Ingrese la CANTIDAD inicial de inventario: "
lea vAuto.cantidad
escriba "Ingrese el VALOR unitario inicial del vehículo: "
lea vAuto.valorUnidad
llamar nueva_linea
fin
/* Procedimiento para realizar un ingreso de inventario */
procedimiento IngresarInventario
entero nuevos
inicio
llamar nueva_linea
llamar CrearTitulo("Ingreso de Inventario")
escriba "Cuantos vehículos nuevos desea ingresar: "
lea nuevos
/* realizar la suma */
vAuto.cantidad <- vAuto.cantidad + nuevos
escriba "Ingreso realizado correctamente!"
llamar nueva_linea
fin
/* procedimiento para venta de inventario */
procedimiento VenderVehiculo
entero vendidos
inicio
llamar nueva_linea
llamar CrearTitulo("Venta de vehículos")
escriba "Cuantos Vehículos fueron vendidos: "
lea vendidos
/* resta al inventario */
vAuto.cantidad <- vAuto.cantidad - vendidos
escriba "Venta realizada correctamente!"
llamar nueva_linea
fin
/* procedimiento para cambiar valor unitario */
procedimiento CambiarValorUnitario
real nuevoValor
inicio
llamar nueva_linea
llamar CrearTitulo("Cambio de Valor Unitario")
escriba "Ingrese el nuevo valor del vehículo: "
lea nuevoValor
/* asignación nuevo valor al registro */
vAuto.valorUnidad <- nuevoValor
escriba "Se realizo el cambio correctamente!"
llamar nueva_linea
fin
/* procedimiento para mostrar en pantalla estado de inventario actual */
procedimiento MostrarInventario
real valorTotal
inicio
llamar nueva_linea
llamar CrearTitulo("Informacion de Inventario Actual")
escriba "Marca: " + vAuto.marca
llamar nueva_linea
escriba "Linea: " + vAuto.linea
llamar nueva_linea
escriba "Color: " + vAuto.color
llamar nueva_linea
escriba "Cantidad: "
escriba vAuto.cantidad
llamar nueva_linea
escriba "Valor Unitario: $ "
escriba vAuto.valorUnidad
llamar nueva_linea
/* total inventario */
valorTotal <- (vAuto.cantidad * vAuto.valorUnidad)
escriba "Valor Total Inventario: $ "
escriba valorTotal
llamar nueva_linea
fin
/* funciones */
/* función para carga de menu en pantalla */
funcion CargarMenu : entero
entero opcion
inicio
llamar nueva_linea
llamar CrearTitulo("Menu de Opciones")
escriba "1. Ingresar Producto."
llamar nueva_linea
escriba "2. Vender Producto."
llamar nueva_linea
escriba "3. Cambiar Valor Unitario."
llamar nueva_linea
escriba "4. Mostrar Informacón del Inventario Actual."
llamar nueva_linea
escriba "5. Salir"
llamar nueva_linea
escriba "Que opción desea realizar?: "
lea opcion
retorne opcion
fin
/* programa principal */
inicio
/* inicialización de variables */
continuar <- verdadero
/* ingresar información inicial del inventario */
llamar CargueInicialInventario()
Repita
/* cargar el menu */
menu <- CargarMenu()
/* toma decisiones */
Si (menu = 1) Entonces
/* ingresar inventario */
llamar IngresarInventario()
Sino
Si (menu = 2) Entonces
/* vender producto */
llamar VenderVehiculo()
Sino
Si (menu = 3) Entonces
/* cambiar valor unitario */
llamar CambiarValorUnitario()
Sino
Si (menu = 4) Entonces
/* mostrar información del inventario */
llamar MostrarInventario()
Sino
Si (menu = 5) Entonces
/* salir */
continuar <- falso
Sino
escriba "Por favor ingrese una opcion entre 1 y 5."
Fin Si
Fin Si
Fin Si
Fin Si
Fin Si
Hasta (continuar = falso)
escriba "Gracias por utilizar nuestro programa!"
fin
Conclusión
Al llegar al final de este desafío, habrás fortalecido tus habilidades en LPP y te enfrentarás a problemas más complejos con confianza. Recuerda que cada ejercicio es una oportunidad para mejorar, y te animamos a explorar variaciones y agregar tus propias ideas.
Para un mejor entendimiento, te recomiendo ver el video tutorial relacionado en este artículo. En este video, se explica de forma práctica cada uno de los conceptos y teoría explicada en este artículo. ¡Saludos!