You are on page 1of 13

ESTRUCTURAS DE DATOS Y ALGORITMOS

1º de Grado en Ingeniería Informática
(Curso 2017-2018)
PRÁCTICA 2

1. NORMAS GENERALES
1. La práctica deberá realizarse en grupo. El grupo estará formado por dos
alumnos del mismo grupo de laboratorio.
2. Se valorará la modularidad, calidad y legibilidad del código, el uso apropiado
de estructuras y la inclusión de comentarios.
3. La práctica deberá realizarse sobre la plantilla proporcionada. Deberá
rellenarse el fichero Autores.xls con los datos de los autores.
4. La entrega de la práctica se realizará a través de la tarea habilitada en el Aula
Virtual, hasta el 18 de Marzo (inclusive). Está práctica deberá ser aprobada
para poder superar la asignatura. La subida a Moodle deberá realizarse
únicamente por uno de los alumnos del grupo.
5. Se deberá subir únicamente un fichero *.rar, nombrado del siguiente modo:
PR2_Nombre1Apellido1_Nombre2Apellido2.rar (Ejemplo:
PR2_AntonioPerez_JulianLopez. rar). El nombre y el apellido del alumno
no deberá contener acentos.
6. El fichero *.rar contendrá un fichero Excel con los datos de los autores y los
ficheros fuente de las partes 1, 2 y 3 de esta práctica, nombrados siguiente
modo: PR2_Autores.xls, PR2_P1_Nombre1Apellido1_Nombre2Apellido2.c,
PR2_P2_Nombre1Apellido1_Nombre2Apellido2.c y
PR2_P3_Nombre1Apellido1_Nombre2Apellido2.c (Ejemplo: Autores.xls,
PR2_P1_AntonioPerez_JulianLopez.c,
PR2_P2_AntonioPerez_JulianLopez.c ,
PR2_P3_AntonioPerez_JulianLopez.c). En el nombre de los ficheros
fuente, el nombre y apellido del alumno no deberán contener acentos.
7. Aquellas entregas que no cumplan la normativa de nombrado de entrega
(nombre de ficheros, archivos a incluir) se calificarán con 0 puntos.

1

7. Anadir elemento. A Union B. B. Esta opción mostrará por pantalla el conjunto vacio. OBJETIVOS  Uso de conjuntos y sus operaciones básicas. A Interseccion C. Esta opción mostrará por pantalla el resultado de cada una de las operaciones. Los profesores de la asignatura podrán seleccionar un conjunto de alumnos a los que se les realizarán diversas cuestiones sobre su práctica de forma presencial con el fin de decidir su calificación definitiva en la práctica. calcular el resultado de aplicar sobre ellos una serie de operaciones y almacenarlos en un archivo de texto.  Utilización de pilas y colas y sus operaciones básicas. Complementario(C). Primera parte: uso de conjuntos y sus operaciones básicas. 4. Esta opción permitirá añadir un elemento a un conjunto. 6. B Union C. 2. El programa solicitará al usuario el nombre del conjunto donde se desea añadir el elemento y el elemento a añadir. 5. (A Interseccion B ) Union Complementario (( B Interseccion C )). 3. deberán implementarse algunas operaciones básicas sobre conjuntos. Esta opción mostrará por pantalla el resultado de cada una de las operaciones. Esta opción mostrará por pantalla el resultado de cada una de las operaciones.  El elemento que el usuario desea añadir no está ya incluido dentro del conjunto. A Union C. A . A Interseccion B. 3. Complementario (A).B. ENUNCIADO 3. A . 8. B . B Interseccion C. Esta opción mostrará por pantalla el resultado de cada una de las operaciones. 2 .C.C. El programa deberá presentar al usuario el siguiente menú: 1. Complementario(B). Deberá comprobarse que:  El conjunto es A. 2. o C. Crear conjunto vacio. Esta práctica consiste en leer un archivo de texto que contiene varios conjuntos. Para ello. Esta opción mostrará por pantalla el resultado de cada una de las operaciones.1.

Si no se cumple alguna de estas condiciones se indicará al usuario. Esta opción permitirá eliminar un elemento de un conjunto. Se indicará al usuario si el elemento existe o no en el conjunto. 10. pertenece al conjunto universal.  El elemento que el usuario desea añadir está incluido en el conjunto. o C. El programa solicitará al usuario el nombre del conjunto cuyo número de elementos se desea calcular. pertenece al conjunto universal. Esta opción permitirá comprobar la existencia de un elemento en un conjunto. Esta opción permitirá calcular el número de elementos de un conjunto. 12. los números primos dentro del intervalo (0. B. Comprobar existencia.  El elemento es correcto. Salir. es decir. Si no se cumple alguna de estas condiciones se indicará al usuario. 11.  El elemento es correcto. 100). Si no se cumple esta condición se indicará al usuario. los números primos dentro del intervalo (0. o C. Deberá comprobarse que:  El conjunto es A. Se indicará al usuario el cardinal del conjunto. 100). Calcular cardinal de conjunto. es decir. es decir. B. es decir. Si no se cumple alguna de estas condiciones se indicará al usuario. los números primos dentro del intervalo (0. o C. B. 8. Esta opción permitirá crear un conjunto unitario. Deberá comprobarse que:  El conjunto es A. Crear conjunto unitario. 100). Deberá comprobarse que:  El elemento es correcto. El programa solicitará al usuario el nombre del conjunto donde se desea eliminar el elemento y el elemento a eliminar. Quitar elemento. 3 .  El elemento es correcto. 100). pertenece al conjunto universal. 9. Deberá comprobarse que:  El conjunto es A. El programa solicitará al usuario el nombre del conjunto donde se desea comprobar la existencia del elemento y el elemento. pertenece al conjunto universal. los números primos dentro del intervalo (0.

1. 3. Operaciones básicas sobre conjuntos 4 . tConjunto Conjuntos[MAX_CONJUNTOS]. . descripta en el apartado 3.…. Esta opción funcionará según lo indicado en el 3. Almacenar los resultados de las opciones 1. } tConjunto. short int Elementos[N].<ELEMENTO2>. . 4 y 5 en un archivo. 3. Lectura de un archivo y almacenamiento interno Se proporciona un archivo de texto “Conjuntos. <ELEMENTON>: Número primo. <ELEMENTO1>.txt” donde cada fila representa un conjunto y los elementos que este incluye.1. typedef struct { char Nombre[MAX_NOMBRE_CONJUNTO]. 2.3. Un elemento es un número primo. <ELEMENTO1>: Número primo. Si el alumno decide realizar la parte opcional de esta práctica. <ELEMENTO2>: Número primo. deberá implementar la siguiente opción: 13.2. 3. Cualquier otra opción que el usuario introduzca se considerará inválida y se deberá volver a mostrar el menú. .1.1.<ELEMENTON> <NOMBRE DEL CONJUNTO>: Cadena de caracteres que identifica al conjunto. Cada fila del archivo es de la forma: <NOMBRE DEL CONJUNTO>. short int Ultimo.3. Este apartado de la práctica consistirá en leer del archivo de texto toda la información y almacenarla en el siguiente registro.1.

Para llenar el hueco que se deja al * quitar un elemento. Valor devuelto por la función. */ int LeeFichero (char *NomFichero. * Conjunto al que se desea añadir el elemento. /* Función: Aniadir * Añade un elemento a un conjunto. tConjunto *Conjuntos). */ void IniCjtos (tConjunto *Conjuntos). /* Función: LeeFichero * Lee un fichero con la información de los conjuntos y almacena la * información. Valor devuelto por la función. es decir es un número primo ubicado en el intervalo *(0. * Precondiciones: * no tiene * Parámetros de salida: 5 . */ tConjunto Aniadir (short int Elemento. Valor devuelto por la función. Valor devuelto por referencia. El elemento que se añada se situa a continuación del último *elemento del conjunto. * Parámetros de entrada: * Elemento a quitar. * Resultado de la operación. * Parámetros de entrada: * Elemento a añadir. * Precondiciones: * no tiene * Parámetros de salida: * Conjunto. * Precondiciones: * no tiene * Parámetros de salida: * Conjuntos. tConjunto X). * Conjunto al que se desea quitar el elemento. * Parámetros de entrada: * Nombre de fichero. cuyos prototipos se proporcionan a continuación: /* Función: IniCjtos * Inicializa la variable que guardará los conjuntos que se leerán * del fichero. /* Función: CjtoVacio * Construye un conjunto vacio. Este apartado de la práctica consiste en implementar en C las siguientes operaciones sobre conjuntos. * Parámetros de entrada: * no tiene * Precondiciones: * no tiene * Parámetros de salida: * Conjuntos. colocará allí el último elemento. 100). /* Función: Quitar * Quita un elemento a un conjunto. Valor devuelto por referencia. * Parámetros de entrada: * no tiene.Comprueba que el elemento pertenece al *conjunto universal. */ tConjunto CjtoVacio (void). * Precondiciones: * no tiene * Parámetros de salida: * Conjunto.

*/ tConjunto Union (tConjunto X. /* Función: Esta * Comprueba si un elemento está en un conjunto. 6 .* Conjunto. * Precondiciones: * no tiene * Parámetros de salida: * Conjunto resultante de la unión. tConjunto X). * Conjunto Y. */ tConjunto Interseccion(tConjunto X. * Parámetros de entrada: * Elemento cuya existencia se va a comprobar. * Parámetros de entrada: * Elemento del conjunto. * Parámetros de entrada: * Conjunto X. * Precondiciones: * no tiene * Parámetros de salida: * Si existe o no en el conjunto. * Precondiciones: * no tiene * Parámetros de salida: * Conjunto unitario. /* Función: Unit * Construye un conjunto unitario. * Conjunto Y. Valor devuelto por la función. Valor devuelto por la función. /* Función: Union * Realiza la unión de dos conjuntos y devuelve el resultado. * Conjunto al que se desea quitar el elemento. es decir es un número primo ubicado * en el intervalo (0. * Precondiciones: * no tiene * Parámetros de salida: * Si está vacio o no. 100). tConjunto Y). Valor devuelto por la función. * Conjunto donde se chequea la existencia del elemento. Valor devuelto por la función. */ tBoolean Esta (short int Elemento. * Parámetros de entrada: * Conjunto X. tConjunto Y). */ tConjunto Quitar (short int Elemento. /* Función: EsCjtoVacio * Comprueba si un conjunto está vacio. Valor devuelto por la función. */ tConjunto Unit (short int Elemento). tConjunto C). * Precondiciones: * no tiene * Parámetros de salida: * Conjunto resultante de la intersección. /* Función: Intersección * Realiza la intersección de dos conjuntos y devuelve el resultado. Valor devuelto por la función. La función omprueba que el elemento * pertenece al conjunto universal. * Parámetros de entrada: * Conjunto. */ tBoolean EsCjtoVacio (tConjunto C).

* Precondiciones: * no tiene * Parámetros de salida: * Conjunto resultante de la diferencia. */ tConjunto Complementario (tConjunto X). /* Función: Diferencia * Realiza la diferencia de dos conjuntos y devuelve el resultado. Valor devuelto por la función. * Precondiciones: * no tiene * Parámetros de salida: * Cardinal. * Parámetros de entrada: * Conjunto. */ tConjunto Diferencia (tConjunto X. tBoolean). * Parámetros de entrada: * no tiene. en la salida standard o en un fichero. /* Función: CalcCardinal * Obtiene el cardinal del conjunto que se le pasa como parámetro. * Parámetros de entrada: * Conjunto. * Valor que indica si se escribe en la salida stardard (FALSE) o en un * fichero (TRUE). * Parámetros de entrada: * Conjunto./* Función: Complementario * Obtiene el complementario de un conjunto y devuelve el resultado. */ void ImprimeCjto (tConjunto C. * Precondiciones: * no tiene * Parámetros de salida: * Conjunto complementario. Valor devuelto por la función. /* Función: ImprimeCjto * Imprime el conjunto que se le pasa como parámetro. */ tConjunto CalcCjtoV (void). Valor devuelto por la función. */ int CalcCardinal(tConjunto C). * Conjunto Y. tConjunto Y). /* Función: CalcCjtoV * Obtiene el conjunto universal. * Parámetros de entrada: * Conjunto. 7 . * Precondiciones: * no tiene * Parámetros de salida: * Conjunto universal. /* Función: AlmOpe * Almacena las operaciones 1 a 5 en un archivo. * Precondiciones: * no tiene * Parámetros de salida: * no tiene. * Parámetros de entrada: * Conjunto X. Valor devuelto por la función.

. y consiste en realizar lo indicado a continuación. Una vez se hayan definido cada una de las operaciones anteriores. Realizar las siguientes operaciones: Por último. <ELEMENTON>: Número primo. éstas deberán utilizarse tal y como se indica a continuación. C).3. Por ejemplo. Sean los conjuntos A.<ELEMENTON>} <NOMBRE OPERACIÓN i>: Cadena de caracteres que identifica la operación. además de los conjuntos originales (A.txt”. <ELEMENTO1>: Número primo. .1. almacenar en un archivo de nombre “Resultado. para la operación AunionB={29. B. Cada línea de este fichero será de la forma: <NOMBRE OPERACIÓN i>={<ELEMENTO1>.txt).31. utilizando un nombre representativo para cada una. * Precondiciones: * no tiene * Parámetros de salida: * no tiene.47} 8 . Almacenar resultados en un archivo (Opcional) Esta apartado de la práctica es opcional.<ELEMENTO2>.txt”. La representación del resultado deberá ser idéntica a la utilizada a lo largo de la práctica (conjuntos. <ELEMENTO2>: Número primo. B y C proporcionados en el archivo “conjuntos.37.…. el resultado de cada una de las operaciones anteriores (una por fila). . */ void AlmOpe(tConjunto Cjtos[MAX_CONJUNTOS]).43. 3.41.

Salir del programa. * Parámetros de entrada: * no tiene * Precondiciones: * no tiene * Parámetros de salida: * Memoria para un puntero a *tPila. Llenar pila. * Parámetros de entrada: * Elemento añadir a la pila. * Parámetros de entrada: 9 . Sumar elementos pila. /* Función: Apilar * Devuelve el resultado de la operación (correcto o error)." y finaliza. Segunda parte: Utilización de pilas y sus operaciones básicas. 3. Una vez poblada la pila. se extraerán todos los posibles. mostrará por pantalla el contenido de la pila y la suma de los elementos extraídos. 2. 3. Valor devuelto por la función. * Precondiciones: * no tiene * Parámetros de salida: * Pila. La aplicación muestra el mensaje "Adiós. Valor devuelto por la función. Llenar pila. Se describe a continuación la funcionalidad de cada una de estas opciones: 1. Sumar elementos pila. */ tPila **AsignarMemoria(void). 20].2. 3. se escribe en la salida estándar el valor de los elementos de la pila. Valor devuelto por referencia. El programa solicitará al usuario el número de elementos a extraer de la pila. */ int Apilar(tPila **p. /* Función: Desapilar * Devuelve el resultado de la operación (correcto o error). Puebla la pila con 20 números reales generados aleatoriamente en el intervalo [0. float E). 2. Si se solicita extraer más elementos que los contenidos en la pila. Se deberán implementar al menos las siguientes funciones: /* Función: AsignarMemoria * Devuelve memoria apara un puntero a *tPila. Diseñar y codificar en C un programa que muestre por la salida estándar un menú con las siguientes opciones: MENU 1. * Resultado de la operación. Salir La pila deberá implementarse y manejarse utilizando memoria dinámica.

/* Función: LlenarPila * Devuelve el resultado de la operación (correcto o error). * Elemento desapilado. * Parámetros de entrada: * Número de elementos a incluir. * Parámetros de entrada: * Pila * Precondiciones: * no tiene * Parámetros de salida: * no tiene * Resultado de la operación. */ int LlenarPila (tPila **p. /* Función: Sumar * Extrae de la pila un número de elementos. float *Sum). Valor devuelto por referencia. Valor devuelto por la función. /* Función: VerPila * Devuelve el resultado de la operación (correcto o error). Valor devuelto por la función. * Parámetros de entrada: * no tiene. * Resultado de la operación. * Precondiciones: * no tiene * Parámetros de salida: * Opción de menú escogida. Valor devuelto por referencia. Valor devuelto por la función. Tercera parte: Utilización de colas y sus operaciones básicas. */ int Menu (void). * Resultado de la operación. Valor devuelto por referencia. */ int Sumar (tPila **p. int N). float *E). * Resultado de la operación. Valor devuelto por la función. */ int Desapilar(tPila **p. int N. y devuelve su suma.3. Valor devuelto por referencia. 3. /* Función: Menu * Devuelve la opción de menú escogida. * Precondiciones: * no tiene * Parámetros de salida: * Suma. También * devuelve el resultado de la operación. */ int VerPila(tPila *p). * Precondiciones: * no tiene * Parámetros de salida: * Pila. Valor devuelto por la función. 10 . * Precondiciones: * no tiene * Parámetros de salida: * Pila. * Parámetros de entrada: * no tiene.* Elemento añadir a la pila.

se escribe en la salida estándar el valor de los elementos de la cola. * Resultado de la operación. Valor devuelto por la función. 3. Sumar elementos cola. La aplicación muestra el mensaje "Adiós. mostrará por pantalla el contenido de la cola y la suma de los elementos extraídos. Una vez poblada la cola. Valor devuelto por la función. Puebla la cola con 20 números reales generados aleatoriamente en el intervalo [0." y finaliza. 11 . Valor devuelto por referencia. 5. Se deberán implementar al menos las siguientes funciones: /* Función: AsignarMemoria * Devuelve memoria apara un puntero a *tCola. float E). se extraerán todos los posibles. Se describe a continuación la funcionalidad de cada una de estas opciones: 4. Salir del programa. * Parámetros de entrada: * no tiene * Precondiciones: * no tiene * Parámetros de salida: * Memoria para un puntero a *Cola. /* Función: Desencolar * Devuelve el resultado de la operación (correcto o error). Sumar elementos cola. */ tCola *AsignarMemoria(void). Si se solicita extraer más elementos que los contenidos en la cola. 20].Diseñar y codificar en C un programa que muestre por la salida estándar un menú con las siguientes opciones: MENU 1. * Parámetros de entrada: * Elemento añadir a la cola. Llenar cola. Llenar cola. 6. */ int Encolar (tCola **p. /* Función: Encolar * Devuelve el resultado de la operación (correcto o error). Salir La cola deberá implementarse y manejarse utilizando memoria dinámica. 2. * Parámetros de entrada: * Elemento añadir a la cola. El programa solicitará al usuario el número de elementos a extraer de la cola. * Precondiciones: * no tiene * Parámetros de salida: * Cola.

/* Función: Sumar * Extrae de la cola un número de elementos. Valor devuelto por referencia. */ int Sumar (tCola **p. * Parámetros de entrada: * no tiene. 4. * Parámetros de entrada: * Número de elementos a incluir. */ int Menu (void). Valor devuelto por la función. /* Función: Menu * Devuelve la opción de menú escogida. Valor devuelto por la función. * Parámetros de entrada: * no tiene. */ int Desencolar (tCola **p. */ int LlenarCola (tCola **p. * Resultado de la operación. /* Función: VerCola * Devuelve el resultado de la operación (correcto o error). * Resultado de la operación. * Precondiciones: * no tiene * Parámetros de salida: * Opción de menú escogida. /* Función: LlenarCola * Devuelve el resultado de la operación (correcto o error). float *Sum). Valor devuelto por referencia. * Precondiciones: * no tiene * Parámetros de salida: * Cola. */ int VerCola (tCola *p). * Elemento desapilado. MATERIAL ADICIONAL 12 . Valor devuelto por referencia. Valor devuelto por la función. int N). * Resultado de la operación. int N. Valor devuelto por referencia.* Precondiciones: * no tiene * Parámetros de salida: * Cola. También * devuelve el resultado de la operación. * Precondiciones: * no tiene * Parámetros de salida: * Suma. float *E). * Parámetros de entrada: * Cola * Precondiciones: * no tiene * Parámetros de salida: * no tiene * Resultado de la operación. y devuelve su suma. Valor devuelto por la función. Valor devuelto por la función.

c  Autores. 13 . tal y como se ha explicado en el enunciado:  PR2_Plantilla_Parte1.c  PR2_Plantilla_Parte3.Se proporcionan los siguientes archivos.c  conjuntos.txt  PR2_Plantilla_Parte2.xlsx Queda prohibida la difusión de este material y de cualquier parte de su contenido fuera del ámbito de la UFV.