- Código: Seleccionar todo
--------------------------------------------------------------------
-- CLÁUSULAS DE CONTEXTO
--------------------------------------------------------------------
WITH Ada.Text_IO; USE Ada.Text_IO;
WITH Ada.Integer_Text_IO; USE Ada.Integer_Text_IO;
--------------------------------------------------------------------
-- CABECERA DEL PROGRAMA
--------------------------------------------------------------------
PROCEDURE UE11_A2_ENUN_MontarVuelos IS
--------------------------------------------------------------------
-- ARCHIVO: UE11_A2_ENUN_MontarVuelos.ADB
-- EFECTO: Construcción gestor de vuelos de un archivo de datos
-- AUTOR:
-- GRUPO:
-- FECHA_CREACIÓN:
-- FECHA_ÚLTIMA_MODIFICACIÓN:
--------------------------------------------------------------------
--------------------------------------------------------------------
-- DECLARACIONES DE CONSTANTES UNIVERSALES, TIPOS Y PAQUETES
--------------------------------------------------------------------
-- HORA --------------------------------------
SUBTYPE Tipo_Hora IS Natural RANGE 0..23;
SUBTYPE Tipo_Minuto IS Natural RANGE 0..59;
TYPE Tipo_Momento IS
RECORD
hora : Tipo_Hora;
minuto : Tipo_Minuto;
END RECORD;
-- FECHA -------------------------------------
SUBTYPE Tipo_Dia IS Natural RANGE 1..31;
SUBTYPE Tipo_Mes IS Natural RANGE 1..12;
SUBTYPE Tipo_Año IS Positive;
TYPE Tipo_Fecha IS
RECORD
dia : Tipo_Dia;
mes : Tipo_Mes;
año : Tipo_Año;
END RECORD;
-- LOCALIZACION ------------------------------
SUBTYPE Tipo_Ciudad IS String (1..2);
TYPE Tipo_Localizacion IS
RECORD
ciudad : Tipo_Ciudad;
fecha : Tipo_Fecha;
momento : Tipo_Momento;
END RECORD;
-- PASAJE ------------------------------------
max_Pasaje : CONSTANT Natural := 10;
SUBTYPE Tipo_Indice_Pasaje IS Positive RANGE 1..max_Pasaje;
TYPE Tipo_Col_Fija_Pasaje IS
ARRAY (Tipo_Indice_Pasaje) OF Natural;
TYPE Tipo_Col_Var_Pasaje IS
RECORD
longitud : Natural;
elementos : Tipo_Col_Fija_Pasaje;
END RECORD;
SUBTYPE Tipo_Pasaje IS Tipo_Col_Var_Pasaje;
-- VUELO -------------------------------------
SUBTYPE Tipo_Numero_Vuelo IS String (1..7);
TYPE Tipo_Vuelo IS
RECORD
numero : Tipo_Numero_Vuelo;
capacidad : Natural;
origen, destino : Tipo_Localizacion;
pasaje : Tipo_Pasaje;
END RECORD;
-- VUELOS ------------------------------------
max_Vuelos : CONSTANT Natural := 30;
SUBTYPE Tipo_Indice_Vuelos IS Positive RANGE 1..max_Vuelos;
TYPE Tipo_Col_Fija_Vuelos IS
ARRAY (Tipo_Indice_Vuelos) OF Tipo_Vuelo;
TYPE Tipo_Col_Var_Vuelos IS
RECORD
longitud : Natural;
elementos : Tipo_Col_Fija_Vuelos;
END RECORD;
SUBTYPE Tipo_Vuelos IS Tipo_Col_Var_Vuelos;
PROCEDURE Escribir_Momento (f : IN File_Type;
m : IN Tipo_Momento) IS
BEGIN
Put (f,m.hora,2);
Put (f,':');
Put (f,m.minuto,0);
END Escribir_Momento;
PROCEDURE Leer_Momento (f : IN File_Type;
M : out Tipo_Momento) is
Hora: Tipo_Hora;
minuto: tipo_Minuto;
begin
null;
END Leer_Momento;
PROCEDURE Escribir_Fecha (f : IN File_Type;
fecha : IN Tipo_Fecha) IS
BEGIN
Put (f,fecha.dia,0);
Put (f,'/');
Put (f,fecha.mes,0);
Put (f,'/');
Put (f,fecha.año,0);
END Escribir_Fecha;
PROCEDURE Leer_Fecha (f : IN File_Type;
fecha : OUT Tipo_Fecha) IS
BEGIN
NULL;
END Leer_Fecha;
PROCEDURE Escribir_Localizacion (f : IN File_Type;
sitio : IN Tipo_Localizacion) IS
BEGIN
Put (f,"(");
Put (f,sitio.ciudad);
Put (f,',');
Escribir_Fecha (f,sitio.fecha);
Put (f,',');
Escribir_Momento (f,sitio.momento);
Put (f,")");
END Escribir_Localizacion;
PROCEDURE Saltar_Blancos (f : IN File_Type) IS
-- PRE: La general
--POST: Avanza por "f" hasta el primer caracter distinto de ' '
-- (sin leerlo) <==> salta blancos y fines de linea.
c : Character;
fin_Linea, encontrado : Boolean := False;
begin
while encontrado loop
Look_Ahead(F, C, Fin_Linea);
if Fin_Linea then
Skip_Line;
else
Get(C);
if C/=' ' then Encontrado:=True;
end if;
end if;
Put(C);
end loop;
END Saltar_Blancos;
PROCEDURE Leer_Localizacion (f : IN File_Type;
lugar : OUT Tipo_Localizacion) IS
BEGIN
NULL;
END Leer_Localizacion;
PROCEDURE Escribir_Pasaje (f : IN File_Type;
pasaje : IN Tipo_Pasaje) IS
BEGIN
Put (f,'(');
FOR i IN 1..pasaje.longitud LOOP
Put (f,pasaje.elementos(i),0);
IF i /= pasaje.longitud THEN Put (f,','); END IF;
END LOOP;
Put (f,')');
END Escribir_Pasaje;
PROCEDURE Leer_Pasaje (f : IN File_Type;
pasaje : OUT Tipo_Pasaje) IS
viajero : Natural;
BEGIN
NULL;
END Leer_Pasaje;
PROCEDURE Escribir_Vuelo (f : IN File_Type;
vuelo : IN Tipo_Vuelo) IS
BEGIN
Put (f,vuelo.numero);
Put (f,' ');
Put (f,vuelo.capacidad,2);
Put (f,' ');
Escribir_Localizacion (f,vuelo.origen);
Put (f,' ');
Escribir_Localizacion (f,vuelo.destino);
Put (f,' ');
Escribir_Pasaje (f,vuelo.pasaje);
END Escribir_Vuelo;
PROCEDURE Leer_Vuelo (f : IN File_Type;
vuelo : OUT Tipo_Vuelo) IS
BEGIN
NULL;
END Leer_Vuelo;
PROCEDURE Escribir_Vuelos (f : IN File_Type;
c : IN Tipo_Vuelos) IS
BEGIN
FOR i IN 1..c.longitud LOOP
Escribir_Vuelo (f,c.elementos (i));
New_Line (f);
END LOOP;
END Escribir_Vuelos;
PROCEDURE Leer_Vuelos (f : IN File_Type;
c : OUT Tipo_Vuelos) IS
vuelo : Tipo_Vuelo;
i : Natural := 0;
BEGIN
NULL;
END Leer_Vuelos;
--------------------------------------------------------------------
-- DECLARACIONES DE FUNCIONES
--------------------------------------------------------------------
--------------------------------------------------------------------
-- DECLARACIONES DE CONSTANTES DE PRUEBAS
--------------------------------------------------------------------
--------------------------------------------------------------------
-- DECLARACIONES DE PRUEBAS
--------------------------------------------------------------------
--------------------------------------------------------------------
-- DECLARACIONES DE VARIABLES
--------------------------------------------------------------------
entrada, salida : File_Type;
Los_Vuelos : Tipo_Vuelos;
momento: tipo_momento;
--------------------------------------------------------------------
-- BLOQUE DE EJECUCIÓN DE PRUEBAS
--------------------------------------------------------------------
begin
Open (entrada,In_File,"MontarVuelos_Datos.TXT");
Leer_Vuelos (entrada,los_Vuelos);
Close (entrada);
Create (salida,Out_File,"MontarVuelos_Resultados.TXT");
Escribir_Vuelos (salida,los_Vuelos);
Close (salida);
END UE11_A2_ENUN_MontarVuelos;
Adjunto ela hoja de entrada(un .txt)

