Trabajo de Computacion I

20
SOLUCIÓN ANALITICA DEL PROBLEMA La coordinación de transito nacional en periodo de vacaciones necesita elaborar un programa que genere estadísticas de movimiento vehicular en tal sentido se cuenta con lo siguiente: 1. Se registrará la siguiente información por cada vehículo: placa, número de pasajeros, alcabala, fecha, tipo de vehículo (1 para particulares, 2 para por puesto, 3 para taxi, 4 para transporte públicos). 2. Las estadísticas se clasifican de la siguiente manera: 1. Estadísticas por alcabalas: vehículos que salen, vehículos que entran por fechas. En cantidades y porcentajes. 2. Estadísticas por vehículos: número de alcabalas transitadas, días transitados, promedio de pasajeros. 3. Estadísticas por tipo de vehículos: cantidad y porcentaje de vehículos según su tipo y por alcabas, cantidad de pasajeros contabilizados por tipo de vehículo. DIALOGO El problema consiste en elaborar un programa que permita a la coordinación de transito nacional en periodo de vacaciones la estadísticas de movimiento vehicular. Las entradas de los datos serán introducidos mediante teclado siguiendo una secuencia de pasos en el programa de la siguiente manera:

description

trabajo de computacion i 323

Transcript of Trabajo de Computacion I

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 cadaestudiante) 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-CONDICIONESINFORMACIN, 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 vehculoReporte 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 vehculo9. ordenar alcabala y tipo de vehculo10. 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 placa2.2. Leer nmero de pasajero2.3. Leer alcabala2.4. Leer fecha2.5. Leer tipo de vehculo

3. consultar datos del vehculo3.1. Leer nmero de placa3.2. Leer nmero de pasajero3.3. Leer alcabala3.4. Leer fecha3.5. Leer tipo de vehculo.

4. modificar datos del vehculo4.1. Leer nmero de placa4.2. Leer nmero de pasajero4.3. Leer alcabala4.4. Leer fecha4.5. Leer tipo de vehculo.

5. eliminar datos del vehculo5.1. Leer nmero de placa5.2. Leer nmero de pasajero5.3. Leer alcabala5.4. Leer fecha5.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 vehculo8. 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 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.