En este módulo, aplicaremos todo lo aprendido en los módulos anteriores a través de estudios de caso y proyectos prácticos. Estos ejercicios están diseñados para consolidar tus conocimientos y darte experiencia práctica en la resolución de problemas reales utilizando ALGOL.
Objetivos del Módulo
- Aplicar conceptos de programación en ALGOL a problemas del mundo real.
- Desarrollar habilidades de resolución de problemas y pensamiento crítico.
- Ganar experiencia en la implementación de proyectos completos desde el diseño hasta la ejecución.
Contenido
Estudio de Caso 1: Sistema de Gestión de Biblioteca
Descripción
Desarrollar un sistema básico de gestión de biblioteca que permita a los usuarios realizar las siguientes operaciones:
- Añadir nuevos libros.
- Buscar libros por título o autor.
- Prestar y devolver libros.
Requisitos
- Utilizar registros para almacenar la información de los libros.
- Implementar funciones para cada operación (añadir, buscar, prestar, devolver).
- Manejar errores como intentos de prestar un libro que ya está prestado.
Ejemplo de Código
begin record Book string title; string author; boolean isBorrowed; end; array books[1:100] of Book; integer bookCount := 0; procedure addBook(string title, string author); begin bookCount := bookCount + 1; books[bookCount].title := title; books[bookCount].author := author; books[bookCount].isBorrowed := false; end; procedure borrowBook(string title); begin for i := 1 step 1 until bookCount do if books[i].title = title then if books[i].isBorrowed then print("Book already borrowed."); else books[i].isBorrowed := true; print("Book borrowed successfully."); end if; end if; end for; end; procedure returnBook(string title); begin for i := 1 step 1 until bookCount do if books[i].title = title then if not books[i].isBorrowed then print("Book was not borrowed."); else books[i].isBorrowed := false; print("Book returned successfully."); end if; end if; end for; end; procedure searchBook(string title); begin for i := 1 step 1 until bookCount do if books[i].title = title then print("Book found: ", books[i].title, " by ", books[i].author); return; end if; end for; print("Book not found."); end; addBook("The Great Gatsby", "F. Scott Fitzgerald"); addBook("1984", "George Orwell"); borrowBook("1984"); searchBook("1984"); returnBook("1984"); end;
Ejercicio
- Añade una función para eliminar libros del sistema.
- Mejora el sistema para que permita buscar libros por autor.
Estudio de Caso 2: Simulación de un Sistema de Colas
Descripción
Simular un sistema de colas en una tienda donde los clientes llegan, esperan en la cola y son atendidos por un cajero.
Requisitos
- Utilizar una estructura de datos dinámica para la cola.
- Implementar funciones para añadir clientes a la cola y atenderlos.
- Simular el tiempo de espera y el tiempo de servicio.
Ejemplo de Código
begin record Customer string name; integer arrivalTime; end; array queue[1:100] of Customer; integer front := 1; integer rear := 0; procedure enqueue(string name, integer arrivalTime); begin rear := rear + 1; queue[rear].name := name; queue[rear].arrivalTime := arrivalTime; end; procedure dequeue(); begin if front > rear then print("Queue is empty."); else print("Serving customer: ", queue[front].name); front := front + 1; end if; end; procedure simulate(); begin enqueue("Alice", 1); enqueue("Bob", 2); dequeue(); dequeue(); dequeue(); end; simulate(); end;
Ejercicio
- Añade una función para calcular el tiempo de espera promedio de los clientes.
- Mejora la simulación para que incluya múltiples cajeros.
Proyecto 1: Juego de Adivinanza de Números
Descripción
Desarrollar un juego en el que el programa elige un número aleatorio y el usuario tiene que adivinarlo.
Requisitos
- Generar un número aleatorio entre 1 y 100.
- Permitir al usuario hacer intentos y proporcionar retroalimentación (más alto, más bajo).
- Contar el número de intentos y mostrarlo al final.
Ejemplo de Código
begin integer secretNumber, guess, attempts; secretNumber := random(1, 100); attempts := 0; while true do print("Enter your guess: "); read(guess); attempts := attempts + 1; if guess = secretNumber then print("Congratulations! You guessed the number in ", attempts, " attempts."); break; else if guess < secretNumber then print("Too low. Try again."); else print("Too high. Try again."); end if; end while; end;
Ejercicio
- Mejora el juego para que permita múltiples rondas y mantenga un puntaje total.
- Añade una opción para que el usuario pueda salir del juego en cualquier momento.
Proyecto 2: Calculadora Científica
Descripción
Desarrollar una calculadora científica que pueda realizar operaciones básicas y avanzadas como suma, resta, multiplicación, división, y funciones trigonométricas.
Requisitos
- Implementar funciones para cada operación.
- Permitir al usuario seleccionar la operación y proporcionar los operandos.
- Manejar errores como división por cero.
Ejemplo de Código
begin real a, b, result; integer choice; procedure add(real x, real y); begin result := x + y; print("Result: ", result); end; procedure subtract(real x, real y); begin result := x - y; print("Result: ", result); end; procedure multiply(real x, real y); begin result := x * y; print("Result: ", result); end; procedure divide(real x, real y); begin if y = 0 then print("Error: Division by zero."); else result := x / y; print("Result: ", result); end if; end; procedure menu(); begin print("Select operation:"); print("1. Add"); print("2. Subtract"); print("3. Multiply"); print("4. Divide"); read(choice); print("Enter first number: "); read(a); print("Enter second number: "); read(b); if choice = 1 then add(a, b); else if choice = 2 then subtract(a, b); else if choice = 3 then multiply(a, b); else if choice = 4 then divide(a, b); else print("Invalid choice."); end if; end; menu(); end;
Ejercicio
- Añade funciones para operaciones trigonométricas como seno, coseno y tangente.
- Mejora la calculadora para que permita realizar múltiples operaciones en una sola ejecución.
Conclusión
En este módulo, hemos trabajado en estudios de caso y proyectos prácticos que te han permitido aplicar tus conocimientos de ALGOL a problemas del mundo real. Estos ejercicios no solo refuerzan los conceptos aprendidos, sino que también desarrollan tus habilidades de resolución de problemas y pensamiento crítico. ¡Felicidades por completar este módulo y sigue practicando para mejorar aún más tus habilidades en programación con ALGOL!
Curso de Programación en ALGOL
Módulo 1: Introducción a ALGOL
- ¿Qué es ALGOL?
- Historia y Evolución de ALGOL
- Configuración del Entorno ALGOL
- Primer Programa en ALGOL
Módulo 2: Sintaxis y Estructura Básica
- Estructura del Programa ALGOL
- Variables y Tipos de Datos
- Entrada y Salida Básica
- Operadores y Expresiones
Módulo 3: Estructuras de Control
Módulo 4: Funciones y Procedimientos
- Definición de Funciones
- Parámetros de Función y Valores de Retorno
- Funciones Recursivas
- Procedimientos en ALGOL
Módulo 5: Estructuras de Datos
Módulo 6: Temas Avanzados
Módulo 7: Aplicaciones Prácticas
- Métodos Numéricos
- Implementación de Algoritmos
- Construcción de un Compilador Simple
- Estudios de Caso y Proyectos