Descripción | Detalles |
---|---|
Profesores | Sergio Cavero y Salvador Sanchez |
Asignatura | Estructuras de Datos |
Universidad | Universidad Rey Juan Carlos |
Curso | 2024/2025 |
Sigue la siguiente secuencia de ejecución escribiendo código Pascal y a la vez dibuja en un papel lo que ocurre tras ejecutar cada instrucción:
- Declara variable entera (x)
- Declara una variable de tipo puntero a entero (p_ent)
- Da el valor 100 a x
- Crea un entero dinámicamente con p_ent y dale el valor que tiene actualmente x
- Imprime por pantalla el valor contenido en el entero al que apunta p_ent
- Crea con new un nuevo entero dinámicamente
- Imprime por pantalla el valor contenido en el entero al que apunta p_ent
- Pon el puntero p_ent a apuntar a x
- Súmale 100 al entero apuntado por el puntero p_ent
- Imprime por pantalla el valor de x y también del entero al que apunta p_ent
- Pon el puntero p_ent a NIL
- Libera la memoria asociada al nuevo entero
- Suma 100 a x pero sin usar x en la operación de suma (solo usando p_ent)
- Muestra por pantalla que son iguales
- Libera toda la memoria asociada a p_ent y termina
Sigue la siguiente secuencia de ejecución escribiendo código Pascal y a la vez dibuja en un papel lo que ocurre tras ejecutar cada instrucción:
- Crea un array de 3 enteros V e inicialízalo con números aleatorios.
- Muestra sus valores por pantalla
- Declara un puntero a entero p y ponlo a apuntar a la primera posición del array
- Pon el valor 100 en el entero apuntado por p
- Muestra los valores del array “V” por pantalla
- Recorre con p todas las posiciones del array para ponerlas todas a cero
(Nota: puedes sumar 1 a p para pasar a la siguiente)
Sigue la siguiente secuencia de ejecución escribiendo código Pascal y a la vez dibuja en un papel lo que ocurre tras ejecutar cada instrucción:
- Declara un tipo de registro llamado “nodo” con dos campos: un entero y un puntero a “nodo”.
- Declara una variable de tipo puntero a nodo
- Crea un nodo en memoria dinámica (heap)
- Dale valor 100 al campo entero de este nodo
- Pon a nil el campo puntero del nodo
- Pon ahora el puntero del nodo a apuntar al propio nodo
- En este punto hay dos instrucciones alternativas para liberar la memoria dinámica creada: identifícalas y escríbelas. Dibuja cómo quedarían las cosas tras cada una de ellas.
- Termina
Sigue la siguiente secuencia de ejecución escribiendo código Pascal y a la vez dibuja en un papel lo que ocurre tras ejecutar cada instrucción:
- Declarar un array de MAX punteros a enteros
- Crea un entero en cada una de las posiciones inicializado a un número aleatorio
- Implementa un procedimiento que muestre por pantalla el contenido de cada posición
- Implementa un procedimiento que ponga a cero todos los números
- Implementa un procedimiento que ponga todos los punteros que no lo estén, a NIL
- Implementa una función que calcule el máximo número del array (debes comprobar antes, pues puede que alguna posición no tenga un número y esté a NIL)
- Implementa una función que compute la suma de todos los enteros (de nuevo asegúrate de no intentar sumar los que estén a NIL)
- Declara un tipo coordenada_3D para puntos con coordenadas x,y,z
- Declara un array de MAX punteros a coordenadas_3D
- Crea una coordenada_3D en cada una de las posiciones inicializado todas las coordenadas con números aleatorios
- Implementa un procedimiento que libere la memoria asignada a una posición
- Implementa un función que sume todas las x
- (Opcional) Implementa un procedimiento que permita añadir una coordenada en la primera posición libre del array
- Implementa una función que calcule la máxima coordenada y (debes comprobar antes, pues puede que alguna posición no tenga coordenada y esté a NIL)
En este ejercicio avanzado, vamos a crear un simulador del conocido programa de televisión "La Isla de las Tentaciones" utilizando Pascal. El objetivo es practicar el uso de punteros, registros, y la gestión dinámica de memoria mientras repasamos conceptos básicos de programación.
El programa simulará un reality show donde participan parejas y tentadores. Las parejas pondrán a prueba su relación mientras los tentadores intentan seducirlos. El estado de las relaciones irá cambiando a medida que se desarrolle el juego.
- Definición de Tipos y Estructuras
Primero, necesitarás crear un registro
Participante
que contendrá la información básica de cada persona en la isla:
- Un campo
nombre
de tipo String para almacenar el nombre del participante - Un campo
edad
de tipo Integer para la edad - Un campo
rol
que será un tipo enumerado con dos posibles valores: tentador o pareja - Un campo
otroParticipante
que será un puntero a otro participante (representará su pareja actual)
- Gestión de Memoria Deberás implementar:
- Una constante
NUM_PAREJAS
que determinará el número de parejas participantes - Una constante
NUM_PARTICIPANTES
calculada como2 * NUM_PAREJAS + NUM_PAREJAS div 2
- Un array de punteros a Participante con tamaño
NUM_PARTICIPANTES
- Implementa un procedimiento para crear un participante::
- Recibirá como parámetros: nombre, edad y rol
- Inicializará un nuevo participante con estos datos
- El puntero a otro participante se iniciará como nil
- Implementa un procedimiento para establecer la pareja de un participante:
- Recibirá dos participantes como parámetros
- Establecerá la relación entre ambos participantes mediante punteros
- Cada participante apuntará al otro como su pareja
- Crea un procedimiento para inicializar la isla:
- Por cada dos parejas debe haber un tentador
- Las parejas deben inicializarse juntas (cada miembro apuntando al otro)
- Los tentadores comienzan sin estar emparejados (puntero a nil)
- Los participantes se almacenarán en el array de manera ordenada, ¿cómo podrías hacerlo para no tener que determinar el rol de cada persona del array?
- Implementa un procedimiento que muestre el estado actual de la isla, incluyendo para cada participante:
- Nombre y edad
- Su rol (pareja o tentador)
- Para participantes en pareja: el nombre de su pareja actual
- Para participantes que eran pareja pero ya no tienen pareja: mostrar "Infiel"
- Para tentadores que han conseguido emparejar: mostrar "Tentó a: [nombre]"
- Implementa un procedimiento para simular una ronda de tentación:
- Selección aleatoria de una pareja para ser tentada
- Selección aleatoria de un tentador
- Decisión aleatoria de qué miembro de la pareja será tentado (50% de probabilidad)
- Probabilidad del 25% de que ocurra una infidelidad
- Actualización del estado:
- Si hay infidelidad: la pareja original se rompe y se forma una nueva con el tentador
- Si no hay infidelidad: solo se muestra el intento fallido
- Finalmente, implementa el programa principal que:
- Muestre el estado actual de la isla
- Pregunte al usuario si desea continuar con otra ronda
- Ejecute rondas de tentación hasta que el usuario decida terminar
- Muestre el estado final de todas las relaciones
Consideraciones Adicionales
- Utiliza gestión dinámica de memoria (New/Dispose) apropiadamente
- Maneja los punteros con cuidado para evitar referencias inválidas
- Asegúrate de que la actualización de las relaciones mantiene la consistencia de los datos
- Incluye mensajes informativos que hagan el seguimiento del juego más interesante
Retos Opcionales
- Añade estadísticas de infidelidad por participante
- Implementa un sistema de afinidad entre participantes
- Añade eventos especiales durante las rondas de tentación
- Permite que el usuario seleccione manualmente las parejas a tentar