Práctica Evaluable - Curso 2020-2021: Grado Ord Grupo Hora Entrega Apellidos, Nombre

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 8

PROGRAMACIÓN 2

Grados de Sistemas de Telecomunicación y


Tecnologías de Telecomunicación, A
E.T.S.I. TELECOMUNICACIÓN Curso 2020-2021
Dpto. de Lenguajes y Ciencias de la Computación
Apellidos, Nombre Ord Grado Grupo Hora Entrega

PRÁCTICA EVALUABLE - CURSO 2020-2021

[Crédito de la imagen: Jeff Turner vía flickr.com CC BY 2.0]

Normativa de realización de la práctica evaluable:

NO está permitida la entrega fuera de los plazos establecidos.


Para que el módulo sea considerado para su evaluación, TODOS los métodos obligatorios que se piden deben
estar completamente implementados, compilar correctamente y funcionar según lo especificado en el enunciado.
Para que la práctica sea considerada evaluable, el alumno debe demostrar su autoría mediante la realización
de las pruebas autoría (controles de laboratorio) realizadas durante el curso sobre la práctica evaluable.
Para detectar posibles plagios, se empleará la herramienta MOSS de control de plagio.
La práctica NO es recuperable en septiembre (debe entregarse siempre antes de la primera convocatoria
ordinaria).
La práctica se debe realizar de forma individual e independiente.
No está permitida la realización conjunta de las práctica.
La práctica debe ser un trabajo original, realizado por el alumno.
No están permitidos trabajos derivados (total o parcialmente) de otros trabajos.
No está permitida la copia (total o parcial).

1
No está permitida la modificación de una copia (total o parcial).
No está permitido trabajar a partir de una copia inicial (total o parcial).
No está permitido cualquier trabajo derivado de otro.

Estructura de la práctica evaluable

La práctica evaluable es un trabajo autónomo del alumno, guiado a lo largo de todo el semestre por el profesor.
Esta primera práctica evaluable consiste en la implementación del módulo Aeropuertos, el cual permite la gestión
de una lista de aeropuertos, de los cuales se conoce su código, país donde está establecido, así como la latitud y
longitud de su geo-localización.
Para facilitar la realización del módulo, el profesor suministra, en el campus virtual, los siguientes ficheros:
aeropuerto.hpp: contiene la definición de los métodos públicos de la clase Aeropuerto, que permite gestionar
la información de un solo aeropuerto.
aeropuertos.hpp: contiene la definición de los métodos públicos de la clase Aeropuertos, para la gestión de
listas de aeropuertos.
test_aeropuertos.cpp: contiene un programa principal de prueba (test unitarios) del módulo Aeropuertos.
localizacion.txt: datos de aeropuertos del mundo.
NOTA IMPORTANTE: Se deben respetar en todo momento los nombres especificados en el enun-
ciado y en los ficheros .hpp suministrados por el profesor (nombres de ficheros, espacio de nombres,
identificadores de tipos y de métodos), así como los prototipos especificados para los métodos re-
queridos.
Nota informativa: Los datos que se usan para esta práctica son datos reales, obtenidos de OpenFlights. El formato
usado en los ficheros de datos suministrados por el profesor está escrito de una manera ligeramente simplificada. El
precio del billete y la duración del vuelo son simulados. La longitud y la latitud son las posiciones del aeropuerto en
la Tierra. Se proporcionan datos para cada vuelo comercial programado en el mundo.

2
1. EL MÓDULO Aeropuertos
El módulo Aeropuertos desarrolla las clases necesarias para la gestión de listas de aeropuertos. Cada aeropuerto
contiene información básica sobre el nombre del aeropuerto, el país donde éste se halla y la geo-localización exacta
del mismo.
Para este módulo de la práctica deben desarrollarse las siguientes clases:
Aeropuerto: suministra los métodos públicos necesarios para gestionar la información relativa a un solo
aeropuerto.
Aeropuertos: suministra los métodos públicos necesarios para gestionar una lista de objetos de la clase
Aeropuerto.
Ficheros necesarios para la entrega del módulo Aeropuertos en el campus virtual:
aeropuerto.hpp
aeropuerto.cpp
aeropuertos.hpp
aeropuertos.cpp

Pruebas unitarias del módulo Aeropuertos

Para probar el correcto funcionamiento del módulo Aeropuertos y de las clases Aeropuerto y Aeropuertos que
deben desarrollarse en este módulo, el profesor suministra, a través del campus virtual de la asignatura, el fichero
test_aeropuertos.cpp, que contiene un programa principal que invoca a funciones de prueba de cada uno de los
métodos públicos de la clase Aeropuertos. Para usar este programa principal, debe hacerse compilación separada
de cada una de las clases, así como del programa principal, pera proceder posteriormente al enlazado de los ficheros
objetos para obtener el programa ejecutable:
g++ aeropuerto.cpp -o aeropuerto.o -c -Wall -Werror -Wextra

g++ aeropuertos.cpp -o aeropuertos.o -c -Wall -Werror -Wextra

g++ test_aeropuertos.cpp -o test_aeropuertos.o -c -Wall -Werror -Wextra

g++ aeropuerto.o aeropuertos.o test_aeropuertos.o -o test_aeropuertos -Wall -Werror -Wextra


Cuando se lanza el programa ejecutable, si se superan todas las pruebas unitarias, el programa escribe en pantalla,
como resultado, --- OK..
Cuando alguna prueba unitaria no es superada porque algún método de la clase Aeropuertos no funciona correcta-
mente, el programa aborta mostrando el aserto cuyo incumplimiento ha provocado la interrupción del programa.

1.1. La clase Aeropuerto

Se pide desarrollar la clase Aeropuerto, que suministra los métodos públicos necesarios para la gestión de la
información relativa a un aeropuerto. Esta clase debe desarrollarse en los ficheros aeropuerto.hpp y aeropuerto.cpp.

Estructura de datos de la clase Aeropuerto

Un objeto de la clase Aeropuerto debe almacenar la siguiente información:


nombre: cadena de caracteres con el nombre del aeropuerto (compuesto por tres letras mayúsculas).
pais: cadena de caracteres con el país donde está situado el aeropuerto.
latitud: valor de tipo real (double) con la latitud de la geo-localización del aeropuerto.
longitud: valor de tipo real (double) con la longitud de la geo-localización del aeropuerto.

3
Funciones miembro públicas de la clase Aeropuerto

La clase Aeropuerto suministra los siguientes métodos públicos (véase también el fichero aeropuerto.hpp suminis-
trado por el profesor):
Aeropuerto();
Constructor por defecto. Asigna cadenas vacías al nombre y pais del aeropuerto. Asigna longitud y latitud 0.0.

Aeropuerto(const std::string &nombre_ini,


const std::string &pais_ini,
double latitud_ini,
double longitud_ini);
Constructor extendido. Asigna valores iniciales a los atributos del objeto.

Aeropuerto(const Aeropuerto &otro_aeropuerto);


Constructor de copia.

void asignar_nombre(const std::string &nuevo_nombre);


Asigna nuevo nombre al aeropuerto.

void asignar_pais(const std::string &nuevo_pais);


Asigna nuevo valor para el país del aeropuerto.

void asignar_latitud(double nueva_latitud);


Asigna nuevo valor para la latitud de la geo-localización del aeropuerto.

void asignar_longitud(double nueva_longitud);


Asigna nuevo valor para la longitud de la geo-localización del aeropuerto.

std::string consultar_nombre() const;


Devuelve el nombre del aeropuerto.

std::string consultar_pais() const;


Devuelve el país donde está situado el aeropuerto.

double consultar_latitud() const;


Devuelve el valor de la latitud de la geo-localización del aeropuerto.

double consultar_longitud() const;


Devuelve el valor de la longitud de la geo-localización del aeropuerto.

4
void escribir_aeropuerto() const;
Escribe por pantalla la información del aeropuerto en el formato siguiente:
<nombre>, <pais>, <latitud>, <longitud>

bool operator==(const Aeropuerto &otro_aeropuerto) const;


Operador de comparación de igualdad de Aeropuerto (implementado on-line por el profeosor en el fiche-
ro aeropuertos.hpp). Permite hacer comparaciones del tipo if (aeropuerto1 == aeropuerto2), siendo
aeropuerto1 y aeropuerto2 dos objetos de la clase Aeropuerto.

1.2. La clase Aeropuertos

Se pide desarrollar la clase Aeropuertos, que suministra los métodos públicos necesarios para la gestión de una
lista de aeropuertos.

Estructura de datos de la clase Aeropuertos

La estructura de datos de la clase Aeropuertos consiste en una array de objetos de la clase Aeropuerto, desarrollada
en el apartado anterior. Para ello, deben definirse los siguientes atributos:
MAX_AEROPUERTOS: constante estática (static), de tipo natural (unsigned), con valor 1000, usada para
especificar el tamaño del array de aeropuertos.
aeropuertos: array de elementos de tipo Aeropuerto, de tamaño MAX_AEROPUERTOS.
n_aeropuertos: natural que guarda el número de aeropuertos actual de la lista de aeropuertos.
Por otro lado y dentro del espacio de nombres bblProgII donde se define la clase, se suministran también algunos tipos
(Resultado), constantes (OK, FIC_ERROR, NO_EXISTE y YA_EXISTE) y funciones auxiliares (escribir_resultado)
necesarias para la gestión de los resultados de ejecución de los métodos de la clase Aeropuertos (véase el fichero
aeropuertos.hpp).

Funciones miembro públicas de la clase Aeropuertos

(El alumno puede definir e implementar los métodos privados auxiliares que considere oportunos
para el desarrollo de los métodos públicos de la clase.)
La clase Aeropuertos suministra los siguientes métodos públicos (véase también el fichero aeropuertos.hpp
suministrado por el profesor), que deben implementarse en aeropuertos.cpp:
Aeropuertos();
Constructor por defecto. Inicializa la lista de aeropuertos a lista vacía.

Aeropuertos(const Aeropuertos &otro_objeto);


Constructor de copia de la clase

~Aeropuertos();
Destructor del objeto.

Aeropuertos & operator=(const Aeropuertos &otro_objeto);

5
Operador de asignación de objetos Aeropuertos (implementado on-line por el profesor).

void consultar_aeropuerto(const std::string &nombre,


Aeropuerto &aeropuerto,
Resultado &res) const;
Devuelve un objeto aeropuerto cuyo nombre se pasa como parámetro. Si el aeropuerto está en la lista de Aeropuertos,
se devuelve a través del parámetro aeropuerto y se devuelve OK a través de res. Si el aeropuerto no existe en la
lista de Aeropuertos, se devuelve NO_EXISTE a través de res.

void escribir_aeropuertos() const;


Escribe en pantalla la información de todos los aeropuertos, en el formato:
<nombre>, <pais>, <latitud>, <longitud>
Por ejemplo:
FUE, Spain, 28.4527, -13.8638
VDE, Spain, 27.8148, -17.8871
SPC, Spain, 28.6265, -17.7556
LPA, Spain, 27.9319, -15.3866
ACE, Spain, 28.9455, -13.6052
...

unsigned num_aeropuertos() const;


Devuelve el número de aeropuertos de la lista de Aeropuertos.

void insertar_aeropuerto(const Aeropuerto &aeropuerto,


Resultado &res);
Inserta un nuevo aeropuerto en la lista de Aeropuertos. Si el aeropuerto no existe en la lista actual de Aeropuertos,
se inserta al final de ésta y se devuelve OK a través de res. Si el aeropuerto ya existe en la lista, no vuelve a
insertarse y se devuelve YA_EXISTE a través de res.

void modificar_aeropuerto(const Aeropuerto &aeropuerto,


Resultado &res);
Modifica, en la la lista actual de Aeropuertos, la información del aeropuerto que se pasa como parámetro. Si el
aeropuerto existe en la lista actual de Aeropuertos, se modifica su información, sustituyéndola por la contenida
en el parámetro aeropuerto (es decir, asignando el objeto que se pasa como parámetro al objeto correspondiente
contenido en la lista) y se devuelve OK a través de res. Si el aeropuerto no existe, se devuelve NO_EXISTE a través
de res.

void eliminar_aeropuerto(const std::string &nombre,


Resultado &res);
Elimina un aeropuerto de la lista de Aeropuertos. Si el aeropuerto cuyo nombre se pasa como parámetro existe en
la lista, se elimina de ésta y se devuelve OK a través de res. Si no existe, se devuelve NO_EXISTE a través de res.

void obtener_aeropuertos(const std::string &fichero,


const std::string &pais,
Resultado &res);

6
Lee de fichero una lista de aeropuertos correspondiente al pais que se pasa como parámetro y los inserta en la lista
actual de Aeropuertos. Si el país es "cualquiera", lee todos los aeropuertos del fichero.
El formato de entrada es el siguiente:
<nombre>,<pais>,<latitud>,<longitud>
Por ejemplo (nótese que no hay espacios de separación entres los campos, solo comas):
GKA,Papua New Guinea,-6.081689,145.391881
MAG,Papua New Guinea,-5.207083,145.7887
HGU,Papua New Guinea,-5.826789,144.295861
LAE,Papua New Guinea,-6.569828,146.726242
POM,Papua New Guinea,-9.443383,147.22005
WWK,Papua New Guinea,-3.583828,143.669186
UAK,Greenland,61.160517,-45.425978
GOH,Greenland,64.190922,-51.678064
SFJ,Greenland,67.016969,-50.689325
THU,Greenland,76.531203,-68.703161
...
Si el fichero puede abrirse para lectura correctamente, se devuelve OK, a través de res. Si no, se devuelve FIC_ERROR
a través de res.

void guardar_aeropuertos(const std::string &fichero,


Resultado &res);
Guarda en fichero la lista de Aeropuertos. El formato de salida coincide con el de entrada (véase la función
obtener_aeropuertos). Si el fichero puede abrirse, se guardan en él los aeropuertos de la lista actual y se devuelve
OK a través de res. Si no, se devuelve FIC_ERROR a través de res.

bool operator==(const Aeropuertos &otro_objeto) const;


Operador de comparación de igualdad de Aeropuertos (implementado on-line por el profeosor en el fiche-
ro aeropuertos.hpp). Permite hacer comparaciones del tipo if (aeropuertos1 == aeropuertos2), siendo
aeropuertos1 y aeropuertos2 dos objetos de la clase Aeropuertos.

Por último, debe implementarse en aeropuertos.cpp la siguiente función, que no es un método de la clase sino una
función auxiliar definida en el espacio de nombres bblProgII:
void escribir_resultado(const Resultado &res) {
switch (res) {
case OK: std::cout << " --- OK." << std::endl;
break;
case FIC_ERROR: std::cout << " --- ERROR DE FICHERO. " << std::endl;
break;
case NO_EXISTE: std::cout << " --- NO EXISTE. " << std::endl;
break;
case YA_EXISTE: std::cout << " --- YA EXISTE. " << std::endl;
break;
default: std::cout << " --- CÓDIGO DE ERROR DESCONOCIDO." << std::endl;
}
}
Escribe por pantalla la cadena de caracteres correspondiente al resultado que se pasa como parámetro.

7
Funciones miembro privadas de la clase Aeropuertos

El alumno puede implementar las funciones miembro privadas que considere adecuadas para la implementación de
las funciones miembro públicas.
Además, debe implementarse obligatoriamente la siguiente función miembro privada:
unsigned buscar_aeropuerto(const std::string &nombre) const;
Busca un aeropuerto en una lista de Aeropuertos. Si lo encuentra, devuelve su posición en la lista. Si no, devuelve
n_aeropuertos.

1.3. El programa principal de la práctica evaluable: main.cpp

Finalmente, debe desarrollarse un programa principal en el fichero main.cpp donde se pruebe el correcto funciona-
miento de todos los métodos implementados en la clase Aeropuertos. Para ello, el alumno mostrará un menú que le
permita al usuario seleccionar el método que desea probar.
El programa principal consistirá en un bucle do-while que leerá por teclado una opción de menú y realizará las
acciones correspondientes. El bucle acabará cuando se introduzca por teclado la opción 0.
El programa principal puede incluir todos los subalgoritmos que el alumno considere convenientes.

También podría gustarte