os adjunto aqui el enunciado de la actividad
Introducción.
Una empresa dedicada al envío de paquetes desea poner en marcha un nuevo proyecto en el que los envíos que tienen por origen y destino una determinada ciudad se realicen usando vehículos aéreos autónomos (drones).Para llevar adelante este proyecto se requiere disponer de un programa informático que ayude a la empresa a gestionar la flota de drones que ha comprado.En el desarrollo de este programa trabajarán simultáneamente varios programadores por lo que nuestra labor consistirá en implementar algunas de las funciones que componen el programa. Para facilitar el trabajo en equipo y garantizar el correcto funcionamiento del programa nos indican que debemos trabajar con las siguientes constantes:
#define MAX_LONG 25 //Longitud máxima de las cadenas de caracteres
#define MAX_DRONES 50 //Núm. Máximo de drones en la flota
Además, nos indican que los elementos que definen un dron mensajero son: el número de serie (valor entero), el modelo (cadena de caracteres), el precio de adquisición en euros, la altura en metros a la que puede volar, la autonomía de vuelo expresada en minutos, el peso máximo que puede transportar (en Kg), la fecha de la última
revisión mecánica, las coordenadas GPS del lugar de entrega y un campo denominado enReparto que indica si en el momento actual el dron está en reparto o no.
La fecha de la última revisión debe tratarse como una estructura que permita almacenar de forma independiente los campos mes y año. Asimismo las coordenadas GPS del lugar de entrega se trataran como una estructura en la que se almacenan los campos longitud (valor entre -90° y 90°), latitud (valor entre -180° y 180°) y altitud.
En base a esta información y con el fin de optimizar la multitarea trabajaremos con las siguientes estructuras de datos:
struct tipoFecha{
int mes;
int year;
}
struct tipoCoordenadaGPS{
float latitud;
float longitud;
float altitud;
};
struct tipoDron {
int numSerie;
char modelo[MAX_LONG];
float precio; //Precio de coste (en euros)
float altura; //Altura a la que puede volar (en metros)
int autonomia; //Autonomía de Vuelo (en minutos)
float pesoMax; //Peso máximo que puede transportar
struct tipoFecha fechaUltimaRev; //Fecha de la ultima revisión (mes, year)
struct tipoCoordenadaGPS ptoEntrega;//Coordenadas del lugar de entrega
int enReparto; //Identifica si el dron está en reparto o no)
};
Es fundamental guardar una copia de la solución de cada ejercicio pues, en la mayoría de los casos, el código implementado se utilizará en la resolución de los siguientes.
Ejercicio 1. Definición y uso de estructuras.
Escribir un programa en C que, tras definir las constantes del programa y declarar el tipo
struct tipoDron lea y muestre por pantalla los datos de un dron. Para ello:
a) Declarare e inicialice una variable del tipo struct tipoDron. Para asignar valores a los campos de la variable (inicializar) se debe implementar una función denominada leerDatosDron que tendrá el siguiente encabezado:
struct tipoDron leerDatosDron(void);
Esta función, solicitará al usuario los datos que identifican un determinado dron. Tenga presente que las coordenadas relativas al punto de entrega solo deben introducirse si el dron está en reparto y que es necesario verificar que las coordenadas introducidas están en el rango correcto (latitud debe tener un valor comprendido entre -90 y 90; longitud debe tener un valor comprendido entre -180 y 180).
b) Muestre por pantalla los datos del dron introducidos en el apartado anterior. Para ello se debe implementar la función:
void mostrarDatosDron (struct tipoDron dron);
Esta función recibe como parámetro por valor una variable de tipo struct tipoDron y muestra por pantalla el valor de sus características téncias. Además, si el dron está realizando un reparto, mostrará las coordenadas del punto de entrega..
A continuación, se muestran dos ejemplos del resultado obtenido tras ejecutar la función
mostrarDron. Como se puede observar, en ambos casos se omite si el dron está o no en reparto, pero en el segundo caso, al tratarse de un dron que está realizando una entrega, se indican las coordenadas del lugar de entrega.
Ejemplo:
Los datos del dron son:
Num de Serie: 6
Modelo: Modelo3
Precio 2686.00 euros
Altura: 109.00 m.
Autonomia 255 min
Peso: 2.8 Kg
Fecha de la ultima revisión: 4/2020
Los datos del dron son:
Num de Serie: 61
Modelo: Modelo10
Precio 3892.00 euros
Altura: 114.00 m.
Autonomia 119 min
Peso: 4.93 Kg
Fecha de la ultima revisión: 9/2020
Coordenadas del punto de entrega:
Las coordenadas del punto de entrega son: 79.7600, 39.5700, 162.5500
Ejercicio 2. El objetivo de éste y los siguientes programas es escribir un programa en C que permita gestionar la flota de drones de la empresa que nos ha contratado. Para ello, el programa a desarrollar debe trabajar con un vector de drones(1) (flota)en el que se podrán almacenar como máximo 50 (MAX_DRONES) drones distintos. Dado que la flota puede contener menos drones, resulta imprescindible almacenar el número de drones que en cada momento la componen (numDrones).
El programa a desarrollar en este ejercicio constará de un menú con las siguientes opciones:
*****************************************
MENÚ PRINCIPAL.
*****************************************
1. AÑADIR DRON
2. MOSTRAR FLOTA
3. MOSTRAR DRONES EN REPARTO
0. Salir
Menú principal.
Tras mostrar el menú, el programa preguntará al usuario qué opción quiere ejecutar (1, 2 ó 3), se ejecutará dicha opción y se volverá a mostrar el menú. Este ciclo se repetirá hasta que el usuario seleccione la opción 0 (SALIR). Si la opción seleccionada es la 1 (AÑADIR DRON), se debe comprobar que es posible añadir más drones a nuestra
flota (no se ha superado el número máximo). En caso afirmativo se añadirán los datos relativos al nuevo dron y se actualizará el número de elementos almacenados en el vector. Para leer los datos relativos al nuevo dron se usará la función leerDatosDron implementada en el ejercicio 1. Si la opción seleccionada es la 2 (MOSTRAR FLOTA), se mostrará por pantalla el listado de todos los drones pertenecientes a nuestra flota. Para ello se debe implementar una nueva función denominada mostrarFlota cuyos parámetros serán el vector de drones y, el número de drones que componen la flota. Para mostrar los datos de un determinado dron se usará la función mostrarDron implementada en el ejercicio 1. Si la opción seleccionada es la 3 (MOSTRAR DRONES EN REPARTO ) el control del programa pasará a la función
void mostrarDronesEnReparto (struct tipoDron flota[], int nDrones) la cual se encargará de mostrar los drones que en ese momento están en reparto.
Notas:
(1)A la hora de realizar este ejercicio la variable de tipo struct tipoDron declarada en el ejercicio 1 se debe
borrar. En este ejercicio sólo se usa el vector de estructuras.
Para detener la ejecución del programa hasta pulsar una tecla puede usar la sentencia system("PAUSE");
Para borrar el contenido de la pantalla puede usar la sentencia system("cls");
Ejercicio 3.
Amplíe el programa anterior para que junto a las opciones ya indicadas, muestre también un listado de los drones cuya última revisión mecánica tuvo lugar hace 6 o más meses. Para ello, añada la opción “4. MOSTRAR DRONES A REVISAR” al menú principal e implemente el código necesario para que, al seleccionar esta opción se solicite la fecha actual (mes y año) y se muestre por pantalla los datos de todos los drones que cumplen el requisito impuesto. Así, si la fecha actual es Noviembre de 2020, el programa mostrará por pantalla los datos de todos los drones para los que la última revisión mecánica se realizó con anterioridad a Mayo de 2020. Si la fecha actual fuera Abril de 2020, el programa debe mostrar los datos de todos los drones para los que la última revisión se realizó antes de Octubre de 2019.
Para la resolución de este problema se debe implementar una función denominada mostrarDronesARevisar que reciba como parámetros el vector de drones y el número de drones que integran la flota, solicite la fecha actual y finalmente muestre por consola los datos de todos los drones cuya última revisión mecánica tuvo lugar hace 6 o más meses.
Nota: La variable en la que se almacena la fecha actual debe ser una variable de tipo struct tipoFecha.
Código
[#include <stdio.h> #include <stdlib.h> #define MAX_LONG 25 //tamaño maximo #define MAX_DRONES 50 //tamaño maximo de drones /* Declaramos las estructuras*/ struct tipoFecha{ //registra cuando fue la ultima inspeccion int mes; int year; }; struct tipoCoordenadaGPS{ float latitud; float longitud; float altitud; }; struct tipoDron { int numSerie; char modelo[MAX_LONG]; float precio; //Precio de coste (en euros) float altura; //Altura a la que puede volar (en metros) int autonomia; //Autonomía de Vuelo (en minutos) float pesoMax; //Peso máximo que puede transportar struct tipoFecha fechaUltimaRev; //Fecha de la ultima revisión (mes, year) struct tipoCoordenadaGPS ptoEntrega;//Coordenadas del lugar de entrega int enReparto; //Identifica si el dron está en reparto o no) }; //Declaraciones de funciones void mostrarDronesARevisar(struct tipoDron flota[MAX_DRONES], int numdrones); void mostrarDatosDron (struct tipoDron flota[MAX_DRONES], int numdrones); struct tipoDron leerDatosDron(void); void mostrarFlota(struct tipoDron flota[MAX_DRONES],int numdrones); void mostrarDronesEnReparto ( struct tipoDron flota[MAX_DRONES], int numdrones); //funcion main int main(int argc, char *argv[]) { struct tipoDron dron; struct tipoDron flota[MAX_DRONES]; int orden,numdrones=0; int menu; do{ //Pedimos los datos segun el numero switch(menu){ case 1: dron =leerDatosDron(); flota[numdrones]=dron; numdrones++; break; case 2: mostrarFlota(flota, numdrones); break; case 3: mostrarDronesEnReparto(flota, numdrones); break; case 4: mostrarDronesARevisar(flota, numdrones); break; case 0: return 0; break; } }while(menu!=0)&&(numdrones<MAX_DRONES); return 0; } //Funcion de tipo structura para pedir los datos del dron struct tipoDron leerDatosDron(void){ struct tipoDron dron; if(dron.enReparto==1){ do{ }while(dron.ptoEntrega.latitud<-90||dron.ptoEntrega.latitud>90); do{ }while(dron.ptoEntrega.longitud<-180||dron.ptoEntrega.longitud>180); } return dron; } void mostrarDronesARevisar(struct tipoDron flota[MAX_DRONES], int numdrones){ int i, mes, year ; for(i=0;i<numdrones;i++){ if((mes+24)-(flota[i].fechaUltimaRev.mes+12)>6|| (year-flota[i].fechaUltimaRev.year)>2){ printf("el dron con numero de serie %i y modelo %s necesita una revision \n", flota[i].numSerie,flota[i].modelo); } } return ; } void mostrarDatosDron (struct tipoDron flota[MAX_DRONES],int numdrones){ int contador, numserie,i; for(i=0;i<numdrones;i++){ contador++; if (flota[i].numSerie==numserie){ i=numdrones+1; } } contador=contador-1; printf("La ultima revision fue el : %i/%i \n",flota [contador].fechaUltimaRev.mes,flota[contador].fechaUltimaRev.year); if(flota[contador].enReparto==1){ } return ; } void mostrarFlota(struct tipoDron flota[MAX_DRONES],int numdrones){ int i,respuesta,numserie; for(i=0;i<numdrones;i++){ } if (respuesta==1){ mostrarDatosDron (flota, numdrones); } return ; } void mostrarDronesEnReparto ( struct tipoDron flota[MAX_DRONES], int numdrones) { int i; for(i=0;i<numdrones;i++){ if(flota[i].enReparto==1){ printf("El dron con numero de serie %i y modelo %s esta en reparto\n", flota[i].numSerie, flota[i].modelo); } } return ; } /code]