Un programa administra los ingresos de los pacientes a una guardia. Cada paciente tiene un código único y se registra su ingreso a la guardia y el tiempo de espera en minutos. Esto se hace en base a las siguientes estructuras: #define L 30 struct fecha { int dia; int mes; int anio; }; typedef struct fecha fecha_t; struct registro { int codigo; char nombre[L]; char apellido [L]; fecha_t fechaVisita; int tiempoEspera; }; typedef struct registro registro_t; Se pide resolver las siguientes funciones en archivos guardia.c y guardia.h, con un programa que haga la prueba de su funcionamiento. a) registro_t* IngresoGuardia(registro_t* p, int* n); Esta función debe permitir ingresar un paciente en la memoria al final del array. El parámetro n guarda la cantidad de ingresos guardados. La función debe reservar memoria para el nuevo ingreso y luego pedir los datos al usuario. En caso de que el ingreso sea exitoso, el contador n debe ser incrementado y se devuelve el puntero a la nueva locación de memoria reservada. b) void TiempoEspera(registro_t *p, int n); Esta función debe imprimir en pantalla la cantidad de pacientes que esperaron mas de 30 minutos, más de 1 hora, más de 2 horas y más de 3 horas. Luego debe imprimir el promedio general de espera. c) int PacienteMayorDemora (registro_t*p, int n); Esta función debe imprimir todos los datos del paciente que más esperó y devolver el índice del array. d) void IngresosMesActual (registro_t*p, int n); Esta función imprime en pantalla los nombres y apellidos de los pacientes ingresados este mes. Se puede averiguar la fecha actual con el siguiente código: #include #include int main (void){ time_t myTime; myTime = time(NULL); struct tm*hoy = localtime(&myTime); int mesActual = hoy->tm_mon+1; int anioActual = hoy->tm_year+1900; printf("mes actual:%d\nAño actual:%d\n", mesActual, anioActual); return 0; } e) void PromediosMensuales (registro_t*p, int n); Esta función debe imprimir la cantidad de pacientes y el tiempo de espera promedio de cada mes, sin importar el año.