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

  1. Añade una función para eliminar libros del sistema.
  2. 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

  1. Añade una función para calcular el tiempo de espera promedio de los clientes.
  2. 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

  1. Mejora el juego para que permita múltiples rondas y mantenga un puntaje total.
  2. 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

  1. Añade funciones para operaciones trigonométricas como seno, coseno y tangente.
  2. 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!

© Copyright 2024. Todos los derechos reservados