ed-2025-laboratorio02-tad
Science Score: 44.0%
This score indicates how likely this project is to be science-related based on various indicators:
-
✓CITATION.cff file
Found CITATION.cff file -
✓codemeta.json file
Found codemeta.json file -
✓.zenodo.json file
Found .zenodo.json file -
○DOI references
-
○Academic publication links
-
○Academic email domains
-
○Institutional organization owner
-
○JOSS paper metadata
-
○Scientific vocabulary similarity
Low similarity (0.6%) to scientific vocabulary
Repository
Basic Info
- Host: GitHub
- Owner: TeachingHub
- License: mit
- Language: Pascal
- Default Branch: main
- Size: 621 KB
Statistics
- Stars: 1
- Watchers: 1
- Forks: 7
- Open Issues: 0
- Releases: 1
Metadata Files
README.md
Ejercicios de Tipos Abstractos de Datos: Unidades, Registros, Funciones, Procedimientos y Punteros
Información del Proyecto
| Descripción | Detalles | |---------------|------------------------------------| | Profesores | Sergio Cavero y Salvador Sanchez | | Asignatura | Estructuras de Datos | | Universidad | Universidad Rey Juan Carlos | | Curso | 2024/2025 |
Ejercicio 1: Números Complejos
En este ejercicio, trabajaremos con números complejos. Para ello, se proporcionan dos archivos Pascal:
uComplejo.pastad_ej1_num_complejo.pas
El archivo tad_ej1_num_complejo.pas utiliza la unidad uComplejo.pas, la cual deberán implementar. A continuación, se detallan los registros, funciones y procedimientos que deben implementar en uComplejo.pas.
Registros y variables
Define un registro TComplejo que represente un número complejo. Este registro debe tener dos campos:
- r: de tipo Double, que representa la parte real del número complejo.
- i: de tipo Double, que representa la parte imaginaria del número complejo.
Funciones y Procedimientos a Implementar
1. CrearComplejo
pascal
procedure CrearComplejo(var c: TComplejo; r: Double; i: Double);
Este procedimiento crea un número complejo a partir de sus partes real e imaginaria.
2. SetParteReal
pascal
procedure SetParteReal(var c: TComplejo; r: Double);
Este procedimiento establece la parte real de un número complejo.
3. SetParteImaginaria
pascal
procedure SetParteImaginaria(var c: TComplejo; i: Double);
Este procedimiento establece la parte imaginaria de un número complejo.
4. GetParteReal
pascal
function GetParteReal(c: TComplejo): Double;
Esta función devuelve la parte real de un número complejo.
5. GetParteImaginaria
pascal
function GetParteImaginaria(c: TComplejo): Double;
Esta función devuelve la parte imaginaria de un número complejo.
6. Sumar
pascal
procedure Sumar(var res: TComplejo; c1, c2: TComplejo);
Este procedimiento suma dos números complejos y devuelve el resultado. Para sumar dos números complejos, se suman las partes reales y las partes imaginarias por separado. El resultado se almacena en el número complejo res que se pasa por referencia.
7. Restar
pascal
procedure Restar(var res: TComplejo; c1, c2: TComplejo);
Esta función resta dos números complejos y devuelve el resultado. Para restar dos números complejos, se restan las partes reales y las partes imaginarias por separado. El resultado se almacena en el número complejo res que se pasa por referencia.
8. Multiplicar
pascal
procedure Multiplicar(var res: TComplejo; c1, c2: TComplejo);
Esta función multiplica dos números complejos y devuelve el resultado. Para multiplicar dos números complejos, se utilizan las siguientes fórmulas:
(a + bi) * (c + di) = (a*c - b*d) + (a*d + b*c)i
El resultado se almacena en el número complejo res que se pasa por referencia.
9. Dividir
pascal
procedure Dividir(var res: TComplejo; c1, c2: TComplejo);
Esta función divide dos números complejos y devuelve el resultado. Para dividir dos números complejos, se utilizan las siguientes fórmulas:
(a + bi) / (c + di) = ((a*c + b*d) / (c^2 + d^2)) + ((b*c - a*d) / (c^2 + d^2))i
El resultado se almacena en el número complejo res que se pasa por referencia.
10. Potencia
pascal
procedure Potencia(var res: TComplejo; c: TComplejo; exponente: Integer);
Esta función eleva un número complejo a una potencia entera y devuelve el resultado. Para elevar un número complejo a una potencia entera... dejaré que lo averigüeis.
El resultado se almacena en el número complejo res que se pasa por referencia.
Implementación
Deben implementar todas estas funciones y procedimientos en el archivo uComplejo.pas. Una vez implementados, podrán ejecutar el programa tad_ej1_num_complejo.pas para verificar su correcto funcionamiento.
Ejercicio 2: Métodos de Pago
En este ejercicio, trabajaremos con diferentes métodos de pago. Para ello, se proporcionan cuatro archivos Pascal:
uPagoTarjeta.pasuPagoTransferencia.pasuPagoBizum.pastad_ej2_pagar.pas
El archivo tad_ej2_pagar.pas utiliza las unidades uPagoTarjeta.pas, uPagoTransferencia.pas y uPagoBizum.pas, las cuales deberán implementar. A continuación, se detallan los procedimientos y funciones que deben implementar en cada una de estas unidades.
Procedimientos y Funciones a Implementar
1. IniciarPago
pascal
procedure IniciarPago;
Este procedimiento muestra un mensaje de inicio de pago y solicita la información necesaria para realizar el pago. La información solicitada varía según el método de pago:
- Para uPagoTarjeta.pas, solicita el número de tarjeta.
- Para uPagoTransferencia.pas, solicita el número de cuenta IBAN.
- Para uPagoBizum.pas, solicita el número de teléfono.
2. RealizarPago
pascal
procedure RealizarPago(<<tipo-de-pago>>: string; monto: real);
Este procedimiento realiza el pago por el monto especificado. La implementación varía según el método de pago:
- Para uPagoTarjeta.pas, muestra un mensaje indicando que se está realizando el pago con tarjeta. En este caso <<tipo-de-pago>> es "Tarjeta".
- Para uPagoTransferencia.pas, muestra un mensaje indicando que se está realizando una transferencia bancaria con el IBAN proporcionado. En este caso <<tipo-de-pago>> es "iban".
- Para uPagoBizum.pas, muestra un mensaje indicando que se está realizando un pago por Bizum. En este caso <<tipo-de-pago>> es "teléfono".
3. ValidarPago
pascal
function ValidarPago(<<tipo-de-pago>>: string): boolean;
Esta función valida la información proporcionada para el pago. La validación varía según el método de pago:
- Para uPagoTarjeta.pas, valida que el número de tarjeta tenga 16 dígitos. En este caso <<tipo-de-pago>> es "Tarjeta".
- Para uPagoTransferencia.pas, valida que el número de cuenta IBAN tenga 24 caracteres. En este caso <<tipo-de-pago>> es "iban".
- Para uPagoBizum.pas, valida que el número de teléfono tenga 9 dígitos. En este caso <<tipo-de-pago>> es "teléfono".
Implementación
Deben implementar todas estas funciones y procedimientos en los archivos uPagoTarjeta.pas, uPagoTransferencia.pas y uPagoBizum.pas. Una vez implementados, podrán ejecutar el programa tad_ej2_pagar.pas para verificar su correcto funcionamiento.
El archivo tad_ej2_pagar.pas contiene el programa principal que utiliza las tres unidades de pago. Este programa solicita al usuario que introduzca una cantidad a pagar y seleccione un método de pago. Luego, realiza el pago utilizando el método seleccionado y valida si el pago fue exitoso.
Ejercicio 3: Gestión Académica
En este ejercicio, trabajaremos con la gestión académica de asignaturas y personas. Para ello, se proporcionan cuatro archivos Pascal:
uPersona.pasuAsignaturaEvalContinua.pasuAsignaturaEvalFinal.pastad_ej3_gestion_academica.pas
El archivo tad_ej3_gestion_academica.pas utiliza las unidades uPersona.pas, uAsignaturaEvalContinua.pas y uAsignaturaEvalFinal.pas, las cuales deberán implementar. A continuación, se detallan los registros, funciones y procedimientos que deben implementar en cada una de estas unidades.
Unidad uPersona.pas
Registros y variables
Define un registro TPersona que represente una persona. Este registro debe tener los siguientes campos:
- Nombre: de tipo String, que representa el nombre de la persona.
- Apellido: de tipo String, que representa el apellido de la persona.
- DNI: de tipo String, que representa el DNI de la persona.
- FechaNacimiento: de tipo String, que representa la fecha de nacimiento de la persona.
- Rol: de tipo TRol, que representa el rol de la persona (puede ser rProfesor o rAlumno).
Crea un tipo puntero PPersona que apunte a variables de tipo registro TPersona.
Funciones y Procedimientos a Implementar
CrearPersona
pascal
procedure CrearPersona(var persona: TPersona; Nombre, Apellido, DNI, FechaNacimiento: String; Rol: TRol);
Este procedimiento crea una persona a partir de los datos proporcionados. La persona es inicializada con los datos proporcionados y el rol especificado. Para ello la persona es pasada por referencia.
MostrarPersona
pascal
procedure MostrarPersona(P: TPersona);
Este procedimiento muestra la información de una persona.
Unidad uAsignaturaEvalContinua.pas
Registros y variables
Define un registro TAsignatura que represente una asignatura con evaluación continua. Este registro debe tener los siguientes campos:
- Profesor: de tipo PPersona, que representa el profesor de la asignatura.
- Alumnos: un array de PPersona que representa los alumnos de la asignatura. Puedes crear una constante MAX_ALUMNOS para definir el tamaño máximo del array.
- NotasPrimerParcial: un array de Real que representa las notas del primer parcial.
- NotasSegundoParcial: un array de Real que representa las notas del segundo parcial.
- NumAlumnos: de tipo Integer, que representa el número de alumnos en la asignatura.
Funciones y Procedimientos a Implementar
InicializarAsignatura
pascal
procedure InicializarAsignatura(var A: TAsignatura; Prof: PPersona);
Este procedimiento inicializa una asignatura con el profesor proporcionado.
AnadirAlumno
pascal
function AnadirAlumno(var A: TAsignatura; Alumno: PPersona): Boolean;
Esta función añade un alumno a la asignatura.
Evaluar
pascal
procedure Evaluar(var A: TAsignatura; AlumnoDNI: string; Nota: Real; Parcial: Integer);
Este procedimiento evalúa a un alumno en un parcial específico. Dado que hay dos parciales, el parámetro Parcial puede ser 1 o 2.
No nos preocuparemos por la validación de los parámetros en este ejercicio. Vamos a asumir que los parámetros son correctos.
CalcularNotaFinal
pascal
function CalcularNotaFinal(A: TAsignatura; AlumnoDNI: string): Real;
Esta función calcula la nota final de un alumno en la asignatura. En este caso, la nota final se calcula como el promedio de las notas de los dos parciales. No nos preocuparemos por determinar si un alumno ha sido evaluado en ambos parciales. Vamos a asumir que todos los alumnos han sido evaluados en ambos parciales.
Unidad uAsignaturaEvalFinal.pas
Registros y variables
Define un registro TAsignatura que represente una asignatura con evaluación final. Este registro debe tener los siguientes campos:
- Profesor: de tipo PPersona, que representa el profesor de la asignatura.
- Alumnos: un array de PPersona que representa los alumnos de la asignatura.
- Notas: un array de Real que representa las notas finales de los alumnos.
- NumAlumnos: de tipo Integer, que representa el número de alumnos en la asignatura.
Funciones y Procedimientos a Implementar
InicializarAsignatura
pascal
procedure InicializarAsignatura(var A: TAsignatura; Prof: PPersona);
Este procedimiento inicializa una asignatura con el profesor proporcionado.
AnadirAlumno
pascal
function AnadirAlumno(var A: TAsignatura; Alumno: PPersona): Boolean;
Esta función añade un alumno a la asignatura.
Evaluar
pascal
procedure Evaluar(var A: TAsignatura; AlumnoDNI: string; Nota: Real);
Este procedimiento evalúa a un alumno con una nota final.
CalcularNotaFinal
pascal
function CalcularNotaFinal(A: TAsignatura; AlumnoDNI: string): Real;
Esta función calcula la nota final de un alumno en la asignatura. En este caso, la nota final de su único examen es la nota final del alumno.
Implementación
Deben implementar todas estas funciones y procedimientos en los archivos uPersona.pas, uAsignaturaEvalContinua.pas y uAsignaturaEvalFinal.pas. Una vez implementados, podrán ejecutar el programa tad_ej3_gestion_academica.pas para verificar su correcto funcionamiento.
El archivo tad_ej3_gestion_academica.pas contiene el programa principal que utiliza las tres unidades. Este programa crea un profesor y dos alumnos, inicializa las asignaturas, añade los alumnos a las asignaturas, evalúa a los alumnos y muestra los resultados finales.
Cuestiones adicionales
¿Qué ventajas tiene utilizar registros para representar a las personas y asignaturas en lugar de variables individuales?
¿Qué ventajas tiene utilizar funciones y procedimientos para realizar operaciones sobre las personas y asignaturas en lugar de realizar las operaciones directamente en el programa principal?
¿Qué otros campos o funcionalidades podrían añadirse a las unidades
uPersona.pas,uAsignaturaEvalContinua.pasyuAsignaturaEvalFinal.paspara mejorar la gestión académica?¿Qué complejidad algorítmica tienen las funciones implementadas?
Owner
- Name: Repositorios para la docencia de Sergio Cavero
- Login: TeachingHub
- Kind: organization
- Repositories: 1
- Profile: https://github.com/TeachingHub
Citation (CITATION.cff)
# This CITATION.cff file was generated with cffinit.
# Visit https://bit.ly/cffinit to generate yours today!
cff-version: 1.2.0
title: Ejercicios de TADs con Pascal
message: >-
Estructuras de Datos. Curso 2024-25. Grado en Ingeniería
del Software. Universidad Rey Juan Carlos.
type: software
authors:
- given-names: 'Sergio '
family-names: Cavero
email: sergio.cavero@urjc.es
affiliation: Universidad Rey Juan Carlos
orcid: 'https://orcid.org/0000-0002-5258-5915'
- given-names: Salvador
family-names: 'Sanchez-Alonso '
orcid: 'https://orcid.org/0000-0002-9949-4797'
affiliation: Universidad Rey Juan Carlos
email: salvador.sanchez@urjc.es
repository-code: >-
https://github.com/TeachingHub/ED-2025-Laboratorio01-Punteros
abstract: >-
Enunciados de ejercicios de TADs en Pascal en
distintos grados de dificultad. Desde problemas más
sencillos para trabajar con una única unidad (unit)
hasta ejercicios más complejos con múltiples unidades
que se usan las unas a las otras y que requieren de
un conocimiento más profundo de la programación en Pascal
(punteros, registros, arrays, etc.).
keywords:
- pascal
- data-estructures
- pointers
- teaching
license: MIT
GitHub Events
Total
- Release event: 1
- Push event: 13
- Fork event: 6
- Create event: 2
Last Year
- Release event: 1
- Push event: 13
- Fork event: 6
- Create event: 2