Sunteți pe pagina 1din 16

SOLUCIN ANALITICA DEL PROBLEMA

La coordinacin de transito nacional en periodo de vacaciones necesita elaborar un


programa que genere estadsticas de movimiento vehicular en tal sentido se cuenta con lo
siguiente:
1. Se registrar la siguiente informacin por cada vehculo: placa, nmero de pasajeros,
alcabala, fecha, tipo de vehculo (1 para particulares, 2 para por puesto, 3 para taxi, 4
para transporte pblicos).
2. Las estadsticas se clasifican de la siguiente manera:
1. Estadsticas por alcabalas: vehculos que salen, vehculos que entran por fechas. En
cantidades y porcentajes.
2. Estadsticas por vehculos: nmero de alcabalas transitadas, das transitados, promedio
de pasajeros.
3. Estadsticas por tipo de vehculos: cantidad y porcentaje de vehculos segn su tipo y
por alcabas, cantidad de pasajeros contabilizados por tipo de vehculo.

DIALOGO
El problema consiste en elaborar un programa que permita a la coordinacin de transito
nacional en periodo de vacaciones la estadsticas de movimiento vehicular.
Las entradas de los datos sern introducidos mediante teclado siguiendo una secuencia
de pasos en el programa de la siguiente manera:
Men mantenimiento (Para opciones de registro y actualizacin de los datos de
cada estudiante) con las opciones siguientes: Incluir, Consultar, Modificar, eliminar,
Reporte y Salida.
Registro en la opcin Incluir

Placa del vehculo


Nmero de pasajeros
Alcabala

Fecha
Tipo de vehculo (1 para particulares, 2 para por puesto,3 para taxi, 4 para
transporte pblicos).

Registro consultar

Placa del vehculo


Nmero de pasajeros
Alcabala
Fecha
Tipo de vehculo (1 para particulares, 2 para por puesto,3 para taxi, 4 para
transporte pblicos

Registro modificar

Placa del vehculo


Nmero de pasajeros
Alcabala
Fecha
Tipo de vehculo (1 para particulares, 2 para por puesto,3 para taxi, 4 para
transporte pblicos

Registro eliminar

Placa del vehculo


Nmero de pasajeros
Alcabala
Fecha
Tipo de vehculo (1 para particulares, 2 para por puesto,3 para taxi, 4 para
transporte pblicos

ESPECIFICACIONES PRE-CONDICIONES
INFORMACIN, LONGITUD y DESCRIPCIN
Registro de vehculo= 10 numrico
Numero de placa= 20 numrico

Numero de pasajero= 20 numrico


Alcabala= 20 alfanumrico
Fecha= 10 numrico.
Tipo vehculo= 10 numrico
Saliente= 10 carcter
POST-CONDICIONES:
Registro de vehculo
Reporte de bsqueda por estadistica
LA PARTICIN
Este problema se puede plantear a travs de las siguientes rutinas:
1. Inicializar los arreglos de particulares, por puesto, taxi y transporte pblico.
2. Ingresar datos de particulares.
3. Ingresar datos por puesto.
4. Ingresar datos de taxi.
5. Ingresar datos trasporte pblico.
6. Mostrar los datos ingresados.
7. Ordenar alcabala y fecha.
8. ordenar placa de vehculo
9. ordenar alcabala y tipo de vehculo
10. Generar Reportes.
Cada una de estas rutinas puede ser dividida en las siguientes rutinas:
1. Inicializar los arreglos de particulares, por puesto, taxi y transporte pblico.
1.1. Asignar valor de Vacio a cada uno de los arreglos.
2. Ingresar datos del vehculo.
2.1. Leer nmero de placa
2.2. Leer nmero de pasajero
2.3. Leer alcabala
2.4. Leer fecha

2.5. Leer tipo de vehculo


3. consultar datos del vehculo
3.1. Leer nmero de placa
3.2. Leer nmero de pasajero
3.3. Leer alcabala
3.4. Leer fecha
3.5. Leer tipo de vehculo.
4. modificar datos del vehculo
4.1. Leer nmero de placa
4.2. Leer nmero de pasajero
4.3. Leer alcabala
4.4. Leer fecha
4.5. Leer tipo de vehculo.
5. eliminar datos del vehculo
5.1. Leer nmero de placa
5.2. Leer nmero de pasajero
5.3. Leer alcabala
5.4. Leer fecha
5.5. Leer tipo de vehculo
6. Mostrar los datos ingresados.
6.1. Mostrar datos de nmero de placa.
6.2. Mostrar datos de pasajero.
6.3. Mostrar datos de alcabala.
6.4. Mostrar datos de fecha.
6.5. Mostrar datos de tipo de vehculo.
7. Ordenar registro por fecha y placa del vehculo
8. generar reportes.

ALGORITMO CODIFICADO DE MANERA ESTRUCTURADA EN LENGUAJE PASCAL

{Trabajo de computacin I 323}


{Ing. Industrial}
program estadistica;
uses
crt;
const
tipove : array[1..4] of string[20] = ('particulares','porpuesto','taxi','transporte
publicos');
acion : array['A'..'B'] of string[5] =('Sale','Entra');
type
regvehiculo = record
nplaca : string[20];
npasaj : integer;
alcabala : string[20];
fecha : string[10];
tipovl : byte;
salent : string[5];
end;
var
datos : array[0..200] of regvehiculo;
cont : integer;
tecla : char;
procedure entrada_datos;{PROCEDIMIENTO PARA INCLUIR DATOS}
var
d : integer;
cu : char;
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 : ');
repeat
readln(cu);
until upcase(cu) in['A','B'];
datos[cont].salent := acion[upcase(cu)];
cont := cont + 1;
if cont > 200 then
cont := 200;
end;
procedure consulta; {PROCEDIMIENTO PARA CONSULTAR}
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 = ',datos[nn].salent);
writeln;
writeln(' >>>>> Pulse Una Tecla <<<<<');
readkey;
end;
end;
procedure modifica;{PROCEDIMIENTO PARA MODIFICAR}
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;{PROCEDIMIENTO PARA ORDENAR DATOS}
var
pu : char;
porque : string;
kk, nn : integer;
temp : regvehiculo;

begin
if cont > 1 then
begin
for kk := 0 to cont - 1 do
for nn := cont - 1 downto kk + 1 do
begin
if datos[kk].alcabala > datos[nn].alcabala then
begin
temp := datos[kk];
datos[kk] := datos[nn];
datos[nn] := temp;
end;
end;
end;
end;
procedure eliminaregistro; {PROCEDIMIENTO PARA ELIMINAR REGISTRO}
var
tt, nn : integer;
reg : regvehiculo;
placa : string[20];
sal : boolean;
pul : char;
begin
if cont > 1 then
begin
writeln(' **** Eliminacion 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 do
begin
if tt <> nn then
datos[tt] := datos[tt];
end;
cont := tt;
end;
end;
end;
end;
procedure ordenafecha(d : array of regvehiculo; num : integer);{PROCEDIMIENTO
PARA ORDENAR POR FECHA}
var
j, t : integer;
auxil : regvehiculo;
begin
for j := 1 to num do
for t := num downto j + 1 do

if d[j].fecha > d[t].fecha then


begin
auxil := d[j];
d[j] := d[t];
d[t] := auxil;
end;
end;
procedure visualizatodos; {PROCEDIMIENTO PARA REPORTE}
var
tm, poe, pos, entr, sale, paso, cc : integer;
tempo : array[1..20] of regvehiculo;
conp, alca : string[20];
begin
cc := 0;
tm := 1;
poe := 0;
pos := 0;
entr := 0;
sale := 0;
if cont > 1 then
begin
ordena;
for cc := 0 to cont - 1 do
begin
if (datos[cc].fecha = datos[cc + 1].fecha) and
(datos[cc].alcabala = datos[cc + 1].alcabala) then
begin
tempo[tm] := datos[cc];
tm := tm + 1;
end
else
begin
if tm > 1 then

begin
tempo[tm] := datos[cc];
tm := tm + 1;
ordenafecha(tempo,tm - 1);
for paso := 1 to tm - 1 do
begin
if tempo[paso].salent = acion['B'] then
poe := poe + 1;
if tempo[paso].salent = acion['A'] then
pos := pos + 1;
end;
if poe > 0 then
entr := (100 * poe) div (poe + pos);
if pos > 0 then
sale := (100 * pos) div (poe + pos);
writeln(' Alcabala = ',tempo[paso].alcabala);
writeln;
writeln(' Fecha Entran Salen %entran %salen');
writeln(tempo[paso].fecha,' ',poe,' ',pos,' ',entr,' ',sale);
writeln;
writeln(' Fechas = ',tm - 1);
end
else
begin
if datos[cc].salent = acion['B'] then
poe := poe + 1;
if datos[cc].salent = acion['A'] then
pos := pos + 1;
if poe > 0 then
entr := (100 * poe) div (poe + pos);
if pos > 0 then
sale := (100 * pos) div (poe + pos);
writeln(' Alcabala = ',datos[cc].alcabala);
writeln;

writeln(' Fecha Entran. Salenentran..salen');


writeln(datos[0].fecha,' ',poe,' ',pos,' ',entr,' ',sale);
writeln;
end;
tm := 1;
poe := 0;
pos := 0;
entr := 0;
sale := 0;
end;
end;
end
else
begin
clrscr;
writeln(' Alcabala = ',datos[0].alcabala);
writeln;
if datos[0].salent = acion['B'] then
begin
entr := 1;
end
else
begin
entr := 0;
poe := 0;
end;
if datos[0].salent = acion['A'] then
begin
sale := 1;
end
else
begin
sale := 0;
pos := 0;

end;
if entr > 0 then
poe := (100 * entr) div (entr + sale);
if sale > 0 then
pos := (100 * sale) div (sale + entr);
writeln(' Fecha...Entran...... Salen.....entran...salen');
writeln(datos[0].fecha,' ',entr,' ',sale,' ',poe,' ',pos);
writeln;
end;
readkey;
end;
procedure menu;{PROCEDIMIENTO D MENU PRINCIPAL}
var
sal : boolean;
pul : char;
begin
textcolor(Green);
sal := false;
cont := 0;
repeat
clrscr;
writeln(' **** Menu General ****');
writeln;
writeln(' 1 = Incluir');
writeln(' 2 = Consultar');
writeln(' 3 = Modificar');
writeln(' 4 = Eliminar');
writeln(' 5 = Reporte de estadisticas');
writeln(' 6 = Salida');
writeln;
writeln(' *** Elija Opcion ***');
repeat
pul := readkey;

until pul in['1','2','3','4','5','6'];


clrscr;
textcolor(blue);
case pul of
'1' : entrada_datos;
'2' : consulta;
'3' : modifica;
'4' : eliminaregistro;
'5' : visualizatodos;
'6' : sal := true;
end;
until sal = true;
end;
begin
menu;
end.

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