UNIVERSIDAD NACIONAL ABIERTA TP - 323 UNIVERSIDAD NACIONAL ABIERTA TP - 323 Planteamiento para la elaboración de Trab
Views 48 Downloads 0 File size 264KB
UNIVERSIDAD NACIONAL ABIERTA TP - 323
UNIVERSIDAD NACIONAL ABIERTA TP - 323
Planteamiento para la elaboración de Trabajo Práctico de Computación 1 (323) ESPECIFICACIONES: El presente trabajo práctico se basará en los objetivos Nº 5, 6, 7 y 8, correspondiente al Módulo III. En él se evidenciará las competencias usando el análisis descendente y la METODOLOGÍA MAPS; diseñar algoritmos empleando PROGRAMACIÓN ESTRUCTURADA, así como también probar algoritmos utilizando el concepto de robustez y finalmente, codificar algoritmos en Pascal, aplicando tipo de datos, procedimientos, funciones, y métodos de archivos bien sea el caso. Caso En el período vacacional la coordinación de tránsito nacional implantará 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: a. Estadísticas por alcabalas: vehículos que salen, vehículos que entran por fechas. En cantidades y porcentajes. b. Estadísticas por vehículos: número de alcabalas transitadas, días transitados, promedio de pasajeros. c. Estadísticas por tipo de vehículos: cantidad y porcentaje de vehículos según su tipo y por alcabalas, cantidad de pasajeros contabilizados por tipo de vehículo. Con base en lo planteado, diseñe un algoritmo en pseudocódigo donde se muestre el uso correcto de las técnicas de programación estructurada o subprogramas y realice lo siguiente: Presente un menú de mantenimiento con las opciones siguientes: Incluir, Consultar, Modificar, Eliminar, Reporte de estadística y Salida. Registre, con la opción incluir, los siguientes datos:
UNIVERSIDAD NACIONAL ABIERTA TP - 323
• Placa del vehículo • 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) Ordene el registro por fecha y placa del vehículo. Muestre por pantalla, cuando realice una Consulta de un vehículo los datos de registrados por grupo. Genere por medio de la opción “Reporte” las siguientes estadísticas: NOTA: En las alternativas “Modificar, Eliminar y Consultar” haga uso de los datos registrados con la opción “Incluir”. Notas: Para este problema usted tiene que idear unas subrutinas que permitan ordenar los datos por: Alcabala y fecha. Placa del vehículo. Alcabala y tipo de vehículo.
UNIVERSIDAD NACIONAL ABIERTA TP - 323
DESARROLLO Objetivo 5 Planteamiento del caso algorítmicamente usando la metodología MAPS
ETAPA 1 En el período vacacional la coordinación de tránsito nacional implantará 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 alcabalas, cantidad de pasajeros contabilizados por tipo de vehículo. Con base en lo planteado, diseñe un algoritmo en pseudocódigo donde se muestre el uso correcto de las técnicas de programación estructurada o subprogramas y realice lo siguiente: Presente un menú de mantenimiento con las opciones siguientes: Incluir, Consultar, Modificar, Eliminar, Reporte de estadística y Salida. Registre, con la opción incluir, los siguientes datos: Placa del vehículo Número de pasajeros
UNIVERSIDAD NACIONAL ABIERTA TP - 323
Alcabala Fecha Tipo de vehículo (1 para particulares, 2 para por puesto, 3 para taxi, 4 para transporte públicos) Ordene el registro por fecha y placa del vehículo. Muestre por pantalla, cuando realice una Consulta de un vehículo los datos de registrados por grupo. Genere por medio de la opción “Reporte” las siguientes estadísticas: NOTA: En las alternativas “Modificar, Eliminar y Consultar” haga uso de los datos registrados con la opción “Incluir”.
ENTRADA DE DATOS: La información para cada vehículo a registrar es: 1) 2) 3) 4) 5)
Placa del vehículo Número de pasajeros Alcabala Fecha Tipo de vehículo (1 para particulares, 2 para por puesto, 3 para taxi y 4 para transporte público)
SALIDA DE DATOS: 1) 2) 3) 4) 5) 6)
Vehículos que salen, vehículos que entran (por fechas en cantidades y porcentajes) Número de alcabalas transitadas Días transitados Promedio de pasajeros Cantidad y porcentaje de vehículos según su tipo y por alcabalas Cantidad de pasajeros contabilizados por tipo de vehículo
UNIVERSIDAD NACIONAL ABIERTA TP - 323
ETAPA 2: LAS ESPECIFICACIONES En los datos personales: Precondición 1: Pre: entrada = placa del vehículo Precondición 2: Pre: entrada = número de pasajeros Precondición 3: Pre: entrada = alcabala Precondición 4: Pre: entrada = Fecha Precondición 5: Pre: entrada = Tipo de vehículo Post-condiciones: Postcondición 1 Post: salida = vehículos que salen (cantidades y porcentajes) Postcondición 2 Post: salida = vehículos que entran (cantidades y porcentajes) Postcondición 3 Post: salida = número de alcabalas transitadas Postcondición 4 Post: salida = días transitados Postcondición 5 Post: salida = promedio de pasajeros Postcondición 6 Post: salida = vehículo según tipo (cantidades y porcentajes) Postcondición 7 Post: salida = vehículo según alcabala (cantidades y porcentajes) Postcondición 8 Post: salida = número de pasajeros por tipo de vehículo
UNIVERSIDAD NACIONAL ABIERTA TP - 323
ETAPA 3: LA PARTICION El siguiente planteamiento de programa, se puede plantear en subrutinas y rutinas específicas, con la finalidad de hacerlo más asimilable, a la hora de proyectarlo hacia su programación en lenguaje PASCAL. Las rutinas en las que se divide, son las siguientes: Rutinas: A. Ingresar los datos de los vehículos B. Ordenar registro de vehículos por número de placa C. Mostrar en pantalla registro completo de los vehículos (número de placa, tipo, número de pasajeros, fecha (ingreso/salida) y alcabala. D. Generar información por medio de la opción “REPORTE”. E. Calcular de cada vehículo, sus datos y reportes estadísticos. Subrutinas Iniciar menú Mostrar opciones del menú Ingresar los datos de cada vehículo: 1) Placa del vehículo Leer número de placa del vehículo 2) Número de pasajeros Leer número de pasajeros 3) Alcabala Leer nombre de la alcabala 4) Fecha Leer fecha de ingreso y salida del vehículo en la alcabala 5) Tipo de vehículo
UNIVERSIDAD NACIONAL ABIERTA TP - 323
Leer tipo de vehículo
Ordenar los registros Estadísticos I. II. III. IV.
Fecha y placa del vehículo Por alcabala (ordenado por fecha de menor a mayor) (Estadística 1) Ordenado por placa del vehículo (Estadística 2) Por alcabala (ordenado por tipo de vehículo de menor a mayor) (Estadística 3)
Objetivos 6, 7 y 8 Traducción del algoritmo y programa para el caso en Lenguaje PASCAL, implementando programación estructurada y conceptos de robustez en el diseño. En el siguiente gráfico observamos una versión beta de la estructura de programación planteada para el desarrollo del programa con el lenguaje PASCAL:
UNIVERSIDAD NACIONAL ABIERTA TP - 323
Se puede observar la estructura del programa, a pesar de estar listo para incluir base de datos y generar los reportes estadísticos, aun no se le han aplicado conceptos de robustez como la indentación.
TRADUCCIÓN DEL PROGRAMA AL LENGUAJE PASCAL 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
UNIVERSIDAD NACIONAL ABIERTA TP - 323 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('***** Datos de 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);
: ');
UNIVERSIDAD NACIONAL ABIERTA TP - 323 write('
Fecha d/m/a
: ');
readln(datos[cont].fecha); writeln(' Tipo Vehiculo : 1=particulares ' write('
2=porpuesto
3=taxi',
4=transporte publicos');
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;
UNIVERSIDAD NACIONAL ABIERTA TP - 323 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 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');
UNIVERSIDAD NACIONAL ABIERTA TP - 323 writeln; writeln('
>');
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];
UNIVERSIDAD NACIONAL ABIERTA TP - 323 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;
UNIVERSIDAD NACIONAL ABIERTA TP - 323 end; end; end else begin writeln('>>>'); 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('
**** Eliminicion De Un Registro ****');
writeln; write('
Introduzca numero de placa : ');
readln(placa); for nn := 1 to length(placa) do placa[nn] := upcase(placa[nn]); sal := false; nn := 0;
UNIVERSIDAD NACIONAL ABIERTA TP - 323 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('>>>');
UNIVERSIDAD NACIONAL ABIERTA TP - 323 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].alcabala,' datos[cc].tipovl,'
',datos[cc].npasaj,'
',datos[cc].fecha,'
',
',
',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;
UNIVERSIDAD NACIONAL ABIERTA TP - 323 writeln; writeln('>'); readkey; end;
procedure menu; var sal : boolean; pul : char; begin sal := false; repeat clrscr; writeln('
**** Menu Principal ****');
writeln; writeln('
1
= Incluir datos');
writeln('
2
= Consultar datos');
writeln('
3
= Modificar datos');
writeln('
4
= Ordenar por:');
writeln('
5
= Eliminar');
writeln('
6
= Reporte de estadisticas');
writeln('
7
= Salida');
writeln; writeln('
*** Pulsar Opcion ***');
repeat pul := readkey; until pul in['1','2','3','4','5','6','7']; clrscr;
UNIVERSIDAD NACIONAL ABIERTA TP - 323 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.
UNIVERSIDAD NACIONAL ABIERTA TP - 323
Bibliografía de soporte
Computación I, texto UNA, Luis Joyanes Aguilar, 2002.
Programación en PASCAL, William McArthur, 2001.
Programación estructurada de datos, Alfred Aho, 2002.