Sunteți pe pagina 1din 12

En el periodo vacacional la coordinación de transito nacional implantará un programa que genere estadisticas

de movimiento vehicular en tal sentido se cuenta con lo siguiente:

1. se registrara la siguiente información por cada vehiculo: placa, número de pasajeros, alcabala, fecha, tipo
de vehiculo (1 para particulares, 2 para porpuesto, 3 para taxi, 4 para transporte públicos).

2. las estadisticas se clasifican de la siguiente manera:

1. estadisticas por alcabalas: vehiculos que salen, vehiculos que entran por fechas. en cantidades y
porcentajes.

2. estadisticas por vehiculos: numeros de alcabala transitadas, dias transitados, promedio de pasajeros.

3. estadisticas por tipo de vehiculos: cantidad y porcentaje de vehiculos segun su tipo y por alacabals,
cantidad de pasajeros contabilizados por tipo de vehiculo.

con base de lo planteado, diseñe un algoritmo en pseudocódigo donde se muestre el uso correcto de técnicas
de programación estructurada o subprogramas y realice lo siguiente:

presente un menu de mantenimiento con las opciones siguientes: incluir, consultar, modificar, eliminar,
reporte de estadisticas y salida

registre, con la opción incluir, los siguientes datos:


placa del vehiculo
número de pasajeros
alcabala
fecha
tipo de vehiculo(1 para particulares, 2 para porpuesto, 3 para un taxi, 4 para transporte público)

ordene el registro por fecha y placa del vehiculo


muestre por panatalla, cuando realice una consulta de un vehiculos los datos de registrado por grupos
genere por medio de la opción "reporte la siguientes estadisticas:"
estadistica 1 una pagina por alcabala y odrdenado por fecha de menor a mayor
estadistica 2 debe estar ordenado por la placa del vehiculo
estadistica 3 una pagina por alcabala y ordenado por tipo de vehiculo de menor a mayor

nota: para este problema se tiene que idear unas subrutinas que permitan ordenar los datos por:
alcabala y fecha
placa del vehiculo
alcabala y tipo de vehiculo

"necesito ayuda con respecto a la resolución de este planteamiento es para un trabajo importante"
{Espero esto te sirva de ayuda}

program estadistica;
uses
crt;
const
tipove : array[1..4] of string[20] = (
'particulares','porpuesto','taxi','transporte publicos');
acion : array['A'..'B'] of string[5] = (
'Entra','Sale');
type
regvehiculo = record
nplaca : string[20];
npasaj : integer;
alcabala : string[20];
fecha : string[10];
tipovl : byte;
salent : char;
end;

var
datos : array[0..200] of regvehiculo;
cont : integer;
tecla : char;

procedure entrada_datos;
var
d : integer;
begin
writeln('***** Entrada De Datos Vehiculos *****');
writeln;
write(' Numero Placa : ');
readln(datos[cont].nplaca);
for d := 1 to length(datos[cont].nplaca) do
datos[cont].nplaca[d] := upcase(datos[cont].nplaca[d]);
write(' Numero Pasajeros : ');
readln(datos[cont].npasaj);
write(' Alcabala : ');
readln(datos[cont].alcabala);
write(' Fecha d/m/a : ');
readln(datos[cont].fecha);
writeln(' Tipo Vehiculo : 1=particulares 2=porpuesto 3=taxi',
' 4=transporte publicos');
write(' Tipo Veiculo : ');
readln(datos[cont].tipovl);
write(' Accion [A]=Sale [B]=entra : ');
readln(datos[cont].salent);
datos[cont].salent := upcase(datos[cont].salent);
cont := cont + 1;
if cont > 200 then
cont := 200;
end;

procedure consulta;
var
nume : string[20];
nn : integer;
enco : boolean;
begin
writeln(' ****** Consulta Entre Numero Matricula ******');
writeln;
write(' Numero : ');
readln(nume);
for nn := 1 to length(nume) do
nume[nn] := upcase(nume[nn]);
nn := 0;
enco := false;
repeat
if datos[nn].nplaca = nume then
enco := true
else
nn := nn + 1;
until (nn > cont - 1) or (enco = true);
if enco = true then
begin
clrscr;
writeln(' ***** Datos Consultados Son *****');
writeln;
writeln(' Numero Placa = ',datos[nn].nplaca);
writeln(' Numero Pasajeros = ',datos[nn].npasaj);
writeln(' Alcabala = ',datos[nn].alcabala);
writeln(' Fecha = ',datos[nn].fecha);
writeln(' Tipo Vehiculo = ',tipove[datos[nn].tipovl]);
writeln(' Sale/Entra = ',acion[datos[nn].salent]);
writeln;
writeln(' >>>>> Pulse Una Tecla <<<<<');
readkey;
end;
end;

procedure modifica;
var
termina, si : boolean;
pu, tec : char;
nn : integer;
num : string[20];
begin
if cont > 0 then
begin
writeln('***** Modificacion De Datos *****');
writeln;
write(' Entre Nume Matricula : ');
readln(num);
for nn := 1 to length(num) do
num[nn] := upcase(num[nn]);
nn := 0;
si := false;
termina := false;
repeat
if datos[nn].nplaca = num then
si := true
else
nn := nn + 1;
until (nn > cont) or (si = true);
if si = true then
begin
repeat
clrscr;
writeln('*** Elija Elemento A Modificar ***');
writeln;
writeln(' A = Numero Placa ');
writeln(' B = Numero Pasajeros');
writeln(' C = Alcabala ');
writeln(' D = Fecha');
writeln(' E = Tipo Vehiculo');
writeln(' F = Sale/Entra');
writeln(' S = Nada');
writeln;
repeat
tec := upcase(readkey);
until tec in['A','B','C','D','E','F','S'];
clrscr;
case tec of
'A' : begin write(' Numero Placa : '); readln(datos[nn].nplaca); end;
'B' : begin write(' Numero Pasajeros : '); readln(datos[nn].npasaj);
end;
'C' : begin write(' Alcabala : '); readln(datos[nn].alcabala); end;
'D' : begin write(' Fecha : '); readln(datos[nn].fecha); end;
'E' : begin write(' Tipo Vehiculo : '); readln(datos[nn].tipovl); end;
'F' : begin write(' Sale/Entra : '); readln(datos[nn].salent); end;
'S' : termina := true;
end;
if tec <> 'S' then
begin
writeln('** Desea Modificar Mas [S/N] **');
repeat
pu := upcase(readkey);
until pu in['S','N'];
if pu = 'N' then
termina := true;
end;
until termina = true;
end;
end
else
begin
writeln('<<<<<<< Sin Datos En Registro Pulse Una Tecla >>>>>>>>>');
readkey;
end;
end;

procedure ordena;
var
pu : char;
porque : string;
kk, nn : integer;
temp : regvehiculo;
begin
if cont > 2 then
begin
clrscr;
writeln(' **** Ordenar Registros Por ****');
writeln;
writeln(' 1 = Fecha y placa del vehiculo');
writeln(' 2 = Alcabala y fecha');
writeln(' 3 = Placa del vehiculo');
writeln(' 4 = alcabala y tipo de vehiculo');
writeln;
writeln(' <<<< Elija Opcion >>>>');
repeat
pu := readkey;
until pu in['1','2','3','4'];
if pu = '1' then
begin
for kk := 0 to cont do
for nn := cont downto kk + 1 do
begin
if (datos[kk].fecha > datos[nn].fecha) and
(datos[kk].nplaca > datos[nn].nplaca) then
begin
temp := datos[kk];
datos[kk] := datos[nn];
datos[nn] := temp;
end;
end;
end;
if pu = '2' then
begin
for kk := 0 to cont do
for nn := cont downto kk + 1 do
begin
if (datos[kk].alcabala > datos[nn].alcabala) and
(datos[kk].fecha > datos[nn].fecha) then
begin
temp := datos[kk];
datos[kk] := datos[nn];
datos[nn] := temp;
end;
end;
end;
if pu = '3' then
begin
for kk := 0 to cont do
for nn := cont downto kk + 1 do
begin
if (datos[kk].nplaca > datos[nn].nplaca) then
begin
temp := datos[kk];
datos[kk] := datos[nn];
datos[nn] := temp;
end;
end;
end;
if pu = '4' then
begin
for kk := 0 to cont do
for nn := cont downto kk + 1 do
begin
if (datos[kk].alcabala > datos[nn].alcabala) and
(datos[kk].tipovl > datos[nn].tipovl) then
begin
temp := datos[kk];
datos[kk] := datos[nn];
datos[nn] := temp;
end;
end;
end;
end
else
begin
writeln('<<<<<<< Sin Datos En Registro Pulse Una Tecla
>>>>>>>>>');
readkey;
end;
end;

procedure eliminaregistro;
var
tt, nn : integer;
reg : regvehiculo;
placa : string[20];
sal : boolean;
pul : char;
begin
if cont > 1 then
begin
writeln(' **** Eliminicain De Un Registro ****');
writeln;
write(' Entre Numero Placa : ');
readln(placa);
for nn := 1 to length(placa) do
placa[nn] := upcase(placa[nn]);
sal := false;
nn := 0;
repeat
if datos[nn].nplaca = placa then
sal := true
else
nn := nn + 1;
until (nn > cont - 1) or (sal = true);
if sal = true then
begin
writeln('???? Se Anulara El Registro Matricula =
',datos[nn].nplaca);
writeln('****** Desea Anularlo [S/N] *******');
repeat
pul := upcase(readkey);
until pul in['S','N'];
if pul = 'S' then
begin
for tt := 0 to cont - 1 do
begin
if tt <> nn then
datos[tt] := datos[tt];
end;
cont := tt;
end;
end;
end
else
begin
writeln('<<<<<<< Sin Datos En Registro Pulse Una Tecla
>>>>>>>>>');
readkey;
end;
end;

procedure visualizatodos;
var
paso, cc : integer;
begin
cc := 0;
paso := 1;
writeln('***** Las Datos Son *****');
writeln;
repeat
writeln(datos[cc].nplaca,' ',datos[cc].npasaj,' ',
datos[cc].alcabala,' ',datos[cc].fecha,' ',
datos[cc].tipovl,' ',datos[cc].salent);
paso := paso + 1;
cc := cc + 1;
if paso > 24 then
begin
writeln('***** Pulse Una Tecla Para Continuar ******');
readkey;
clrscr;
writeln('***** Las Datos Son *****');
writeln;
paso := 1;
end;
until cc > cont - 1;
writeln;
writeln('<<<<<< Fin De Presentacion Pulse Una Tecla >>>>>>');
readkey;
end;

procedure menu;
var
sal : boolean;
pul : char;
begin
sal := false;
repeat
clrscr;
writeln(' **** Menu Jeneral ****');
writeln;
writeln(' 1 = Incluir');
writeln(' 2 = Consultar');
writeln(' 3 = Modificar');
writeln(' 4 = Ordenar Por');
writeln(' 5 = Eliminar');
writeln(' 6 = Reporte de estadisticas');
writeln(' 7 = Salida');
writeln;
writeln(' *** Elija Opcion ***');
repeat
pul := readkey;
until pul in['1','2','3','4','5','6','7'];
clrscr;
case pul of
'1' : entrada_datos;
'2' : consulta;
'3' : modifica;
'4' : ordena;
'5' : eliminaregistro;
'6' : visualizatodos;
'7' : sal := true;
end;
until sal = true;
end;

begin
cont := 0;
menu;
end.

S-ar putea să vă placă și