Informática Julio-2011 1 Informática Julio-2011 2 - Informatica

Anuncio
PROGRAM Julio_2011 ;
USES
Crt, SysUtils ;
PROCEDURE CrearArrayEstadisticas (
sNomFichRadar: tsCadNombres ;
VAR aiEstadisticas: taiDatosEstadisticas) ;
VAR
cIndice
: Char ;
tfbrgFichRadar : tfbrgFicherosRadares ;
rgVehiculo
: targDatosVehiculo ;
BEGIN
FOR cIndice := 'A' TO 'D' DO
aiEstadisticas [cIndice] := 0 ;
TYPE
tsCadNombres
= String [20] ;
tsCadMatriculas = String [10] ;
trgInstantes = RECORD
iHoras, iMinutos, iSegundos : Integer ;
END ;
targDatosVehiculo
= RECORD
sMatricula
cCategoriaV
rgInstante
rVelocidad
END ;
:
:
:
:
Assign (tfbrgFichRadar, sNomFichRadar) ;
Reset (tfbrgFichRadar) ;
WHILE NOT EOF (tfbrgFichRadar) DO
BEGIN
Read (tfbrgFichRadar, rgVehiculo) ;
tsCadMatriculas ;
Char ;
trgInstantes ;
Real ;
cIndice := rgVehiculo.cCategoriaV ;
tfbrgFicherosRadares = FILE OF targDatosVehiculo ;
aiEstadisticas [cIndice] := aiEstadisticas [cIndice] + 1 ;
END ;
Close (tfbrgFichRadar) ;
END ;
targDatosInfractor = RECORD
sMatricula : tsCadMatriculas ;
rgInstante : trgInstantes ;
rVelocidad : Real ;
END ;
PROCEDURE MostarEstadisticas (CONST aiEstadisticas : taiDatosEstadisticas) ;
VAR
cIndice
: Char ;
BEGIN
Writeln ;
Writeln ('Numero de vehiculos de cada Categoria') ;
Writeln ;
tfbrgFicherosInfractores = FILE OF targDatosInfractor ;
taiDatosEstadisticas = ARRAY ['A'..'D'] OF Integer ;
VAR
cOpcion, cEspera
sNomFichEntrada,
rDistanciaTramo,
aiEstadisticas :
FOR cIndice := 'A' TO 'D' DO
Write ('Modelo ':9, cIndice) ;
Writeln ;
: Char ;
sNomFichSalida, sNomFichInfractores : tsCadNombres ;
rVelocidadLimite : Real ;
taiDatosEstadisticas ;
FOR cIndice := 'A' TO 'D' DO
Write (aiEstadisticas [cIndice]:10) ;
Writeln ;
END ;
FUNCTION fncLeerOpcion : Char ;
VAR
cOpcion : Char ;
BEGIN
ClrScr ;
Writeln ('========== Menu de opciones ==========') ;
Writeln (' 1 Estadisticas') ;
Writeln (' 2 Cálculo de infractores') ;
Writeln (' 3 Mostar infracciones') ;
Writeln ;
Writeln (' 0 Salir del programa') ;
Writeln ;
Write
('
Pulsa el numero de la opcion: ') ;
FUNCTION fnrPasarASegundos (CONST rgInstante : trgInstantes) : Real ;
BEGIN
WITH rgInstante DO
fnrPasarASegundos := iHoras * 3600.0 + iMinutos * 60.0 + iSegundos ;
END ;
PROCEDURE BusquedaInstanteSalidaTramo (sMatriculaBuscar : tsCadMatriculas ;
CONST rgInstanteEntrada : trgInstantes ;
sNomFichSalida
: tsCadNombres ;
VAR rgInstanteSalida
: trgInstantes ;
VAR boSalidaTramo
: Boolean) ;
VAR
tfbrgFichSalida
: tfbrgFicherosRadares ;
rgVehiculo
: targDatosVehiculo ;
sSegundosInstanteEntrada : Real ;
BEGIN
boSalidaTramo := FALSE ;
REPEAT
cOpcion := ReadKey ;
UNTIL ('0' <= cOpcion) AND (cOpcion <= '3') ;
Writeln (cOpcion) ;
fncLeerOpcion := cOpcion ;
END ;
Assign (tfbrgFichSalida, sNomFichSalida) ;
Reset (tfbrgFichSalida) ;
Informática
Julio-2011
1
Informática
Julio-2011
2
IF boSalidaTramo THEN { Si se han encontrado datos de la salida }
BEGIN
rVelocidadMedia := fnrCalculoVelocidadMedia
(rgVehiculoEntrada.rgInstante,
rgInstanteSalida, rDistanciaTramo) ;
sSegundosInstanteEntrada := fnrPasarASegundos (rgInstanteEntrada) ;
WHILE NOT boSalidaTramo AND NOT EOF (tfbrgFichSalida) DO
BEGIN
Read (tfbrgFichSalida, rgVehiculo) ;
WITH rgVehiculo DO
IF (sMatricula = sMatriculaBuscar) AND
(sSegundosInstanteEntrada < fnrPasarASegundos (rgInstante)) THEN
BEGIN
boSalidaTramo
:= TRUE ;
rgInstanteSalida := rgInstante
END ;
END ;
Close
END ;
IF rVelocidadMedia > rVelocidadLimite THEN
BEGIN
rgVehiculoInfractor.sMatricula := rgVehiculoEntrada.sMatricula ;
rgVehiculoInfractor.rgInstante := rgVehiculoEntrada.rgInstante ;
rgVehiculoInfractor.rVelocidad := rVelocidadMedia ;
Write (tfbrgFichInfractores, rgVehiculoInfractor) ;
END ;
END ;
(tfbrgFichSalida) ;
END ;
Close (tfbrgFichInfractores) ;
FUNCTION fnrCalculoVelocidadMedia (CONST rgInstanteEntrada,
rgInstanteSalida : trgInstantes ;
rDistancia : Real) : Real ;
VAR
rsegundosEntrada, rSegundosSalida : Real ;
BEGIN
rSegundosEntrada := fnrPasarASegundos (rgInstanteEntrada) ;
rSegundosSalida := fnrPasarASegundos (rgInstanteSalida) ;
Close (tfbrgFichRadarEntrada) ;
END ;
PROCEDURE MostrarFicheroInfracciones (sNomFichInfractores : tsCadNombres) ;
VAR
tfbrgFichInfractores : tfbrgFicherosInfractores ;
rgVehiculoInfractor
: targDatosInfractor ;
BEGIN
Assign (tfbrgFichInfractores, sNomFichInfractores) ;
Reset (tfbrgFichInfractores) ;
{ Velocidad media en Km / Hora }
fnrCalculoVelocidadMedia := rDistancia /(rSegundosSalida - rSegundosEntrada)
* 3600.0 ;
END ;
Writeln ('----- Listado de infracciones -----') ;
Writeln ;
Writeln ('Matricula': 12, 'Hora':10 , 'Velocidad media KM/H') ;
PROCEDURE CrearFicheroInfracciones (sNomFichEntrada, sNomFichSalida,
sNomFichInfractores : tsCadNombres ;
rDistanciaTramo, rVelocidadLimite : Real) ;
VAR
tfbrgFichRadarEntrada : tfbrgFicherosRadares ;
rgVehiculoEntrada
: targDatosVehiculo ;
tfbrgFichInfractores
rgVehiculoInfractor
: tfbrgFicherosInfractores ;
: targDatosInfractor ;
rVelocidadMedia
rgInstanteSalida
boSalidaTramo
: Real ;
: trgInstantes ;
: Boolean ;
WHILE NOT EOF (tfbrgFichInfractores) DO
BEGIN
Read (tfbrgFichInfractores, rgVehiculoInfractor) ;
WITH rgVehiculoInfractor, rgInstante DO
WriteLn (sMatricula: 10,
iHoras:4, ':', iMinutos:2, ':', iSegundos:2,
rVelocidad:14:2) ;
END ;
Writeln ('-------------- Fin del listado -------------------') ;
Close (tfbrgFichInfractores) ;
END ;
BEGIN
Assign (tfbrgFichRadarEntrada, sNomFichEntrada) ;
Reset (tfbrgFichRadarEntrada) ;
BEGIN { ---------------- Programa Principal ----------------}
Write ('Nombre del fichero del Radar de Entrada: ') ;
ReadLn (sNomFichEntrada) ;
Write ('
fichero del Radar de Salida: ') ;
ReadLn (sNomFichSalida) ;
Assign (tfbrgFichInfractores, sNomFichInfractores) ;
ReWrite (tfbrgFichInfractores) ;
WHILE NOT EOF (tfbrgFichRadarEntrada) DO
BEGIN
Read (tfbrgFichRadarEntrada, rgVehiculoEntrada) ;
Writeln ;
Write ('Distancia en Km del tramo a controlar: ') ;
ReadLn (rDistanciaTramo) ;
Write ('Limite de velocidad media en el tramo: ') ;
ReadLn (rVelocidadLimite) ;
BusquedaInstanteSalidaTramo (rgVehiculoEntrada.sMatricula,
rgVehiculoEntrada.rgInstante,
sNomFichSalida,
rgInstanteSalida, boSalidaTramo) ;
Informática
Julio-2011
3
Informática
Julio-2011
4
REPEAT
cOpcion := fncLeerOpcion ;
CASE cOpcion OF
'1' : BEGIN
CrearArrayEstadisticas (sNomFichEntrada, aiEstadisticas) ;
MostarEstadisticas (aiEstadisticas) ;
END ;
'2' : BEGIN
sNomFichInfractores
:= sNomFichEntrada ;
sNomFichInfractores [1] := 'I' ;
Write ('Nombre del fichero del Radar de Infractores: ') ;
Writeln (sNomFichInfractores) ;
CrearFicheroInfracciones (sNomFichEntrada,
sNomFichSalida,
sNomFichInfractores,
rDistanciaTramo, rVelocidadLimite)
END ;
'3' : BEGIN
Write ('Escribe el nombre del fichero de Infractores: ') ;
ReadLn (sNomFichInfractores) ;
IF FileExists (sNomFichInfractores) THEN
MostrarFicheroInfracciones (sNomFichInfractores)
ELSE
Writeln ('ERROR: No existe el fichero ',
sNomFichInfractores) ;
END ;
END ; { CASE }
IF cOpcion
BEGIN
Writeln
cEspera
END ;
UNTIL cOpcion =
<> '0' THEN
;
:= ReadKey ;
'0' ;
Writeln ;
WriteLn ('Pulsa RETURN para terminar') ;
ReadLn ;
END. { PROGRAMAREN BUKAERA - FIN del PROGRAMA }
Informática
Julio-2011
5
Descargar