Módulo 1: Fundamentos de Programación

Proyecto Final

Lección 6 de 33 del Curso Roadmap Learning Laravel

Duración: 2 horas
Nivel: Principiante (requiere conocimientos de variables, condicionales, bucles y funciones, como en Lecciones 1-5)
Objetivo: Integrar los conceptos del módulo para crear un programa en PSeInt que gestione una lista de tareas, usando arrays, condicionales, bucles y funciones, desarrollando habilidades de diseño y organización de código.
Materiales necesarios: Computadora con PSeInt instalado (descarga gratuita desde pseint.sourceforge.net). Alternativa: Papel o editor de texto para esbozar pseudocódigo si no puedes usar PSeInt.
Entregable: Código funcional en PSeInt con al menos tres funciones (por ejemplo, agregar tarea, listar tareas, marcar como completa), capaz de gestionar una lista de tareas.
Nota: Usamos PSeInt para mantener la coherencia, y los conceptos son directamente aplicables a PHP (base de Laravel).

Introducción al proyecto (15 minutos)

Explicación:

El proyecto final consiste en crear un programa que simule un gestor de tareas básico. El programa permitirá:

  • Agregar una nueva tarea a una lista.
  • Listar todas las tareas.
  • Marcar una tarea como completada.

Conceptos a usar:

  • Arrays: Para almacenar la lista de tareas y su estado (completada o no).
  • Condicionales: Para validar entradas y manejar opciones del menú.
  • Bucles: Para mostrar tareas y controlar el flujo del programa.
  • Funciones: Para organizar el código en bloques reutilizables (al menos tres: agregar, listar, completar).

Estructura del programa:

  • Un menú principal que ofrezca opciones (agregar, listar, completar, salir).
  • Un array para almacenar tareas (nombres) y otro para su estado (completada o no).
  • Funciones específicas para cada acción.

Analogía: Es como un cuaderno de tareas donde puedes añadir notas, verlas todas o tachar las que terminas, pero automatizado con código.

Punto clave: Este proyecto te prepara para Laravel, donde usarás estructuras similares para gestionar datos (por ejemplo, listas de usuarios o productos en una base de datos).

Actividad rápida (3 minutos):

Piensa en cómo organizarías una lista de tareas en la vida real. Escribe en papel:

  • ¿Qué datos necesitas por tarea? (Ejemplo: nombre, estado).
  • ¿Qué acciones quieres realizar? (Ejemplo: añadir, listar).
    Solución sugerida:
  • Datos: Nombre (texto), Completada (sí/no).
  • Acciones: Agregar, Mostrar, Marcar como hecha.

Diseño del programa (20 minutos)

Explicación:

Antes de escribir código, diseñemos la lógica del programa. Esto ayuda a evitar errores y organiza el trabajo.

Requisitos del programa:

  • Almacenamiento:
    • Un array para los nombres de las tareas (tipo Caracter).
    • Un array para el estado de las tareas (tipo Lógico, Verdadero para completada, Falso para pendiente).
    • Un contador para el número de tareas (para no exceder el tamaño del array).
  • Funciones:
    • AgregarTarea: Añade una tarea al array si hay espacio.
    • ListarTareas: Muestra todas las tareas con su estado.
    • MarcarTareaCompletada: Cambia el estado de una tarea a completada según su número.
  • Menú:
    • Opciones: 1 (agregar), 2 (listar), 3 (completar), 4 (salir).
    • Un bucle Mientras para mantener el programa activo hasta que el usuario elija salir.

Límites del proyecto:

  • Para simplificar, usaremos un array de tamaño fijo (por ejemplo, 5 tareas).
  • No manejaremos eliminación de tareas ni almacenamiento permanente (esto vendrá con bases de datos en módulos futuros).

Pseudocódigo inicial (esqueleto):

Algoritmo GestorTareas
    // Declarar arrays y variables
    Definir tareas Como Caracter
    Dimension tareas[5]
    Definir estados Como Logico
    Dimension estados[5]
    Definir numTareas Como Entero
    Definir opcion Como Entero
    
    // Inicializar
    numTareas <- 0
    
    // Menú principal
    Mientras Verdadero Hacer
        Escribir "1. Agregar tarea"
        Escribir "2. Listar tareas"
        Escribir "3. Marcar tarea como completada"
        Escribir "4. Salir"
        Leer opcion
        
        Segun opcion Hacer
            1: // Llamar función para agregar
            2: // Llamar función para listar
            3: // Llamar función para completar
            4: // Salir
        FinSegun
    FinMientras
FinAlgoritmo

Punto clave: Diseñar primero la lógica (arrays, funciones, menú) hace el código más claro, una práctica que usarás en Laravel para planificar controladores y rutas.

Actividad rápida (5 minutos):

En papel o PSeInt, escribe el pseudocódigo de una función que muestre un mensaje simple como "Lista vacía" si no hay tareas. Solución sugerida:

SubProceso MostrarVacio()
    Escribir "No hay tareas en la lista"
FinSubProceso

Implementación de las funciones (45 minutos)

Explicación:

Ahora escribiremos las tres funciones requeridas y las integraremos en el programa. Cada función usará conceptos previos (arrays, condicionales, bucles).

Función 1: AgregarTarea

  • Propósito: Añade una nueva tarea al array si no está lleno.
  • Parámetros: Arrays de tareas y estados, contador de tareas, nombre de la tarea.
  • Lógica: Verifica si hay espacio, agrega la tarea y actualiza el contador.

Código:

SubProceso AgregarTarea(tareas, estados, numTareas Por Referencia, nuevaTarea)
    Si numTareas < 5 Entonces
        numTareas <- numTareas + 1
        tareas[numTareas] <- nuevaTarea
        estados[numTareas] <- Falso
        Escribir "Tarea agregada: ", nuevaTarea
    Sino
        Escribir "Error: Lista de tareas llena"
    FinSi
FinSubProceso

Función 2: ListarTareas

  • Propósito: Muestra todas las tareas con su número y estado.
  • Parámetros: Arrays de tareas y estados, contador de tareas.
  • Lógica: Usa un bucle para recorrer el array y muestra "Completada" o "Pendiente".

Código:

SubProceso ListarTareas(tareas, estados, numTareas)
    Definir i Como Entero
    Si numTareas = 0 Entonces
        Escribir "No hay tareas en la lista"
    Sino
        Escribir "Lista de tareas:"
        Para i <- 1 Hasta numTareas Hacer
            Si estados[i] Entonces
                Escribir i, ". ", tareas[i], " (Completada)"
            Sino
                Escribir i, ". ", tareas[i], " (Pendiente)"
            FinSi
        FinPara
    FinSi
FinSubProceso

Función 3: MarcarTareaCompletada

  • Propósito: Cambia el estado de una tarea a completada según su número.
  • Parámetros: Array de estados, contador de tareas, número de la tarea.
  • Lógica: Valida que el número sea válido y actualiza el estado.

Código:

SubProceso MarcarTareaCompletada(estados, numTareas, numeroTarea)
    Si numeroTarea >= 1 Y numeroTarea <= numTareas Entonces
        estados[numeroTarea] <- Verdadero
        Escribir "Tarea ", numeroTarea, " marcada como completada"
    Sino
        Escribir "Error: Número de tarea inválido"
    FinSi
FinSubProceso

Punto clave: Cada función es modular y reutilizable, un principio que aplicarás en Laravel para separar lógica en métodos y controladores.

Actividad rápida (5 minutos):

Prueba escribir en papel una función que valide si una tarea no está vacía antes de agregarla. Solución sugerida:

SubProceso esValida <- ValidarTarea(tarea)
    Definir esValida Como Logico
    Si tarea <> "" Entonces
        esValida <- Verdadero
    Sino
        esValida <- Falso
    FinSi
FinSubProceso

Código completo y prueba (30 minutos)

Explicación:

Ahora integramos las funciones en un programa completo con un menú interactivo.

Código completo:

Algoritmo GestorTareas
    // Declarar arrays y variables
    Definir tareas Como Caracter
    Dimension tareas[5]
    Definir estados Como Logico
    Dimension estados[5]
    Definir numTareas Como Entero
    Definir opcion Como Entero
    Definir nuevaTarea Como Caracter
    Definir numeroTarea Como Entero
    
    // Inicializar
    numTareas <- 0
    
    // Menú principal
    Mientras Verdadero Hacer
        Escribir "=== Gestor de Tareas ==="
        Escribir "1. Agregar tarea"
        Escribir "2. Listar tareas"
        Escribir "3. Marcar tarea como completada"
        Escribir "4. Salir"
        Escribir "Seleccione una opción: "
        Leer opcion
        
        Segun opcion Hacer
            1: 
                Escribir "Ingrese el nombre de la tarea: "
                Leer nuevaTarea
                Llamar AgregarTarea(tareas, estados, numTareas, nuevaTarea)
            2:
                Llamar ListarTareas(tareas, estados, numTareas)
            3:
                Escribir "Ingrese el número de la tarea a completar: "
                Leer numeroTarea
                Llamar MarcarTareaCompletada(estados, numTareas, numeroTarea)
            4:
                Escribir "¡Gracias por usar el gestor de tareas!"
                Salir
            De Otro Modo:
                Escribir "Opción inválida, intente de nuevo"
        FinSegun
    FinMientras
FinAlgoritmo

// Definición de funciones
SubProceso AgregarTarea(tareas, estados, numTareas Por Referencia, nuevaTarea)
    Si numTareas < 5 Entonces
        numTareas <- numTareas + 1
        tareas[numTareas] <- nuevaTarea
        estados[numTareas] <- Falso
        Escribir "Tarea agregada: ", nuevaTarea
    Sino
        Escribir "Error: Lista de tareas llena"
    FinSi
FinSubProceso

SubProceso ListarTareas(tareas, estados, numTareas)
    Definir i Como Entero
    Si numTareas = 0 Entonces
        Escribir "No hay tareas en la lista"
    Sino
        Escribir "Lista de tareas:"
        Para i <- 1 Hasta numTareas Hacer
            Si estados[i] Entonces
                Escribir i, ". ", tareas[i], " (Completada)"
            Sino
                Escribir i, ". ", tareas[i], " (Pendiente)"
            FinSi
        FinPara
    FinSi
FinSubProceso

SubProceso MarcarTareaCompletada(estados, numTareas, numeroTarea)
    Si numeroTarea >= 1 Y numeroTarea <= numTareas Entonces
        estados[numeroTarea] <- Verdadero
        Escribir "Tarea ", numeroTarea, " marcada como completada"
    Sino
        Escribir "Error: Número de tarea inválido"
    FinSi
FinSubProceso

Cómo ejecutarlo:

  1. Abre PSeInt.
  2. Copia el código completo en un nuevo archivo.
  3. Ejecuta con F9.
  4. Prueba las opciones:
    • Agrega tareas (por ejemplo, "Comprar leche", "Estudiar").
    • Lista las tareas.
    • Marca una como completada (por ejemplo, tarea 1).
    • Sal del programa.

Salida de ejemplo:

=== Gestor de Tareas ===
1. Agregar tarea
2. Listar tareas
3. Marcar tarea como completada
4. Salir
Seleccione una opción: 
1
Ingrese el nombre de la tarea: 
Comprar leche
Tarea agregada: Comprar leche
=== Gestor de Tareas ===
...
Seleccione una opción: 
1
Ingrese el nombre de la tarea: 
Estudiar
Tarea agregada: Estudiar
=== Gestor de Tareas ===
...
Seleccione una opción: 
2
Lista de tareas:
1. Comprar leche (Pendiente)
2. Estudiar (Pendiente)
=== Gestor de Tareas ===
...
Seleccione una opción: 
3
Ingrese el número de la tarea a completar: 
1
Tarea 1 marcada como completada
=== Gestor de Tareas ===
...
Seleccione una opción: 
2
Lista de tareas:
1. Comprar leche (Completada)
2. Estudiar (Pendiente)
=== Gestor de Tareas ===
...
Seleccione una opción: 
4
¡Gracias por usar el gestor de tareas!

Punto clave: Este programa simula una aplicación real, como las que construirás en Laravel con controladores y vistas para gestionar datos.


Reflexión y mejoras (10 minutos)

Explicación:

Ahora que el programa funciona, reflexionemos sobre lo aprendido y posibles mejoras:

  • Logros:
    • Usaste arrays para almacenar datos.
    • Aplicaste condicionales para validar entradas.
    • Usaste bucles para recorrer listas.
    • Organizaste el código con funciones.
  • Mejoras posibles:
    • Agregar una función para eliminar tareas.
    • Validar que las tareas no estén vacías antes de agregarlas.
    • Usar un array bidimensional para más datos (por ejemplo, fecha de creación).
    • Estas mejoras las explorarás en módulos futuros con PHP y bases de datos.

Actividad final (5 minutos):

Piensa en una mejora para el programa (por ejemplo, mostrar solo tareas pendientes). Escribe en papel la lógica de una nueva función. Ejemplo:

SubProceso ListarPendientes(tareas, estados, numTareas)
    Para i <- 1 Hasta numTareas Hacer
        Si estados[i] = Falso Entonces
            Escribir i, ". ", tareas[i]
        FinSi
    FinPara
FinSubProceso

Entregable: Código funcional con al menos 3 funciones

Requisitos:

  • Un programa en PSeInt que gestione una lista de tareas con:
    • Un array para nombres de tareas y otro para estados (completada/pendiente).
    • Al menos tres funciones:
      • AgregarTarea: Añade una tarea nueva.
      • ListarTareas: Muestra todas las tareas con su estado.
      • MarcarTareaCompletada: Cambia el estado de una tarea.
    • Un menú interactivo con opciones para usar las funciones.
  • El código debe ser funcional y manejar casos básicos (lista vacía, lista llena, entrada inválida).

Instrucciones para completar:

  1. Usa el código proporcionado como base.
  2. Prueba todas las opciones del menú para verificar que funcione:
    • Agrega al menos 3 tareas.
    • Lista las tareas.
    • Marca una como completada.
    • Intenta casos límite (agregar cuando la lista está llena, marcar una tarea inválida).
  3. Guarda el código en PSeInt o un editor de texto.
  4. Opcional: Añade una mejora sencilla (por ejemplo, un mensaje de bienvenida o validación de entradas).

Tiempo estimado: 1 hora dentro de la lección (implementación y pruebas) + 1 hora adicional si quieres personalizar o depurar.
Entregable: Código funcional en PSeInt. Puedes compartir el código o describirlo para que lo revise.

Ejemplo de uso: Como se mostró en la salida de ejemplo, el programa debe permitir agregar tareas, listarlas, marcarlas como completadas y salir, con mensajes claros y sin errores.

Consejo: Ejecuta el programa varias veces y prueba errores (por ejemplo, ingresar una opción inválida) para entender cómo responde.

VI Examen

1. ¿Cuál es el objetivo principal del proyecto final del módulo?

2. En el programa, ¿qué estructura se usa para almacenar los nombres de las tareas?

3. ¿Qué hace la función AgregarTarea en el proyecto?

4. En PSeInt, ¿cómo se asegura que el programa no exceda el límite de 5 tareas?

5. ¿Qué estructura usa el programa para mostrar el menú repetidamente?

6. En la función ListarTareas, ¿qué se muestra si no hay tareas?

7. ¿Cómo se marca una tarea como completada en el programa?

8. ¿Qué estructura en PSeInt maneja las opciones del menú (1, 2, 3, 4)?

9. Si el usuario selecciona la opción 4, ¿qué hace el programa?

10. ¿Qué tipo de dato usa el array estados para indicar si una tarea está completada?

© Copyright Cursos Laravel :: 2025 Términos y condiciones