UNIVERSIDAD NACIONAL ABIERTA
ÁREA DE MATEMÁTICA
C CARRERA MATEMÁTICA
TRABAJO PRÁCTICO: X
ASIGNATURA: COMPUTACIÓN I
CÓDIGO: 323
FECHA DE ENTREGA DE LAS ESPECIFICACIONES AL ESTUDIANTE:
En la primera semana de presentación de prueba, a través del asesor
de la asignatura de su centro local.
FECHA DE DEVOLUCIÓN DEL INFORME POR EL ESTUDIANTE
Adjunto a la Segunda Prueba Integral
NOMBRE DEL ESTUDIANTE: LEANDRO ORTÍZ
CÉDULA DE IDENTIDAD: 18.609.651
CENTRO LOCAL: ANZOÁTEGUI CARRERA: 126
NÚMERO DE ORIGINALES: 1
FIRMA DEL ESTUDIANTE:
LAPSO: 2018/1
RESULTADOS DE CORRECCIÓN:
OBJ. N° 1 2 3 4 5 6 7 8 9 10 11 12 13
0:NL 1: L
Índice
Introducción ------------------------------------------------------------------------------------------ 3
Especificaciones y planteamiento del problema -------------------------------------------- 4
Solución analítica del problema ----------------------------------------------------------------- 7
Objetivo 5: Solución del problema planteado utilizando la Metodología MAPS ---- 9
Objetivo 6: Diseño del algoritmo usando técnicas de programación
estructurada ---------------------------------------------------------------------------------------- 15
Objetivo 7: Prueba del algoritmo propuesto utilizando el concepto de robustez – 27
Objetivo 8: Codificación del algoritmo en el lenguaje Pascal -------------------------- 28
Conclusiones --------------------------------------------------------------------------------------- 37
Recomendaciones -------------------------------------------------------------------------------- 38
Introducción
2
El presente trabajo práctico se realiza como una evaluación de los objetivos 5, 6, 7
y 8 de la materia Computación I (código 323), perteneciente al pensum de la
carrera Matemática (código 126) de la Universidad Nacional Abierta.
En dicho trabajo se hace uso de las herramientas estudiadas en el texto de la
materia para la resolución de un problema mediante un programa de
computadora. Tales herramientas son el análisis del problema planteado, el uso
de la tecnología MAPS (Mathematic Algorithm Problem Solving), realización de
pseudocódigo, haciendo uso de las técnicas de programación estructurada,
evaluación del algoritmo a través del concepto de robustez, y la elaboración del
programa de computación a través del lenguaje Pascal.
Estas herramientas permitirán resolver el problema planteado con todas las
condiciones exigidas.
TRABAJO PRÁCTICO
COMPUTACIÓN I (323)
3
LAPSO 2018-1
Especificaciones y planteamiento del problema
El INTTT Caracas ha acumulado información referente a las infracciones de los
límites de velocidad durante un determinado periodo de tiempo. El Instituto ha
dividido la ciudad en cuatro cuadrantes y desea realizar una estadística de las
infracciones a los límites de velocidad en cada uno de ellos. Para cada infracción
se ha preparado una tarjeta que contiene la siguiente información:
Fecha de la infracción,
Número de registro del vehículo,
Cuadrante en el que se produjo la infracción,
Límite de velocidad en Km/hora,
Velocidad Registrada en Km/hora (Velocidad del Infractor),
Multa.
Diseñe un programa en Pascal, para generar 2 reportes o informes; el primero
que contenga una lista de la multa de velocidades recolectadas por mes, donde la
multa se calcula como la suma del costo de la corte (Bs. 100000) más Bs. 50000
por cada Km/h que exceda la velocidad limite. Prepare el primer reporte o informe
con los siguientes resultados, Ver Reporte Nro.1.
4
Reporte Nro 1
Reporte Nro 2
En el cuadro Nro. 1 se presentan cada uno de los cuadrantes con sus respectivas
zonas, urbanizaciones y los límites de velocidad.
5
Cuadro Nro 1
6
Solución analítica del problema
Para solucionar el problema planteado, suponemos que el programador recibe
todas las tarjetas de infracciones del período considerado, supongamos que son
20, y el programa a realizar es netamente para mostrar los resultados de manera
ordenada, calcular el monto total de las multas y los promedios de multas
mensuales de cada cuadrante. Es decir, el programa no tiene que leer información
ingresada por el teclado, porque ya el programador tiene esa información a la
mano al momento de realizar el programa.
La información contenida en las tarjetas de infracciones se almacena en variables,
una por cada columna del reporte. Para el primer reporte, las fechas de cada
tarjeta se almacenarán en las variables Fi (F1, F2, …, F20), donde los números
representan la fila correspondiente a la tarjeta de infracción. El número de registro
del vehículo de cada tarjeta se almacenarán en las variables Ri (R1, R2, …, R20),
los números de los cuadrantes en las variables Ci (C1, C2, C3 y C4), las zonas en
las variables Zn, Zs, Ze y Zo, para las zonas norte, sur, este y oeste,
respectivamente. Las urbanizaciones se almacenarán en las variables Ui (U1, U2,
…, U20), las velocidades registradas en las variables Vi (V1, V2, …, V20), las
velocidades límites de cada cuadrante se almacenarán en las variables Vli (Vl1,
Vl2, Vl3 y Vl4), los montos de las multas en las variables Mi (M1, M2, …, M20), la
suma de todas las multas se almacenará en la variable Mt.
Para el segundo reporte, la cantidad de multas de cada cuadrante se almacenarán
en las variables Si (S1, S2, S3 y S4), y el promedio de multas de cada cuadrante
se almacenarán en las variables Pi (P1, P2, P3 y P4).
Mt se calculará sumando el monto de todas las multas, es decir:
7
Mt = M1 + M2 + … + M20
Las variables Pi calculan el promedio de multas de cada cuadrante, es decir:
P1 = (M1 + M2 + M3 + M4 + M5) / 5
P2 = (M6 + M7 + M8 + M9 + M10) / 5
P3 = (M11 + M12 + M13 + M14 + M15) / 5
P4 = (M16 + M17 + M18 + M19 + M20) / 5
Donde a cada cuadrante se le ha asignado cinco tarjetas de infracción.
Finalmente, el programa mostrará los dos reportes en forma de tablas, con sus
encabezados y sus filas correspondientes a cada tarjeta de infracción, como lo
requiere la asignación.
8
Objetivo 5: Solución del problema planteado utilizando la
Metodología MAPS
1) El diálogo
Al establecer un diálogo mental con las pautas dadas por el profesor de la materia
para la elaboración del trabajo práctico, el autor definió cuáles serían los valores
de entrada y de salida que tendría el programa a crear, los mismos se muestran
en el cuadro Nro 2:
ENTRADA SALIDA
Información contenida Dos reportes. El reporte
en las tarjetas de 1 muestra la información
infracción, como fecha ingresada organizada en
de cada infracción, N° de forma de tabla,
registro del vehículo, N° calculando, además, el
del cuadrante donde monto total de las
sucedió cada infracción, multas registradas. El
la zona, la urbanización, reporte 2 muestra en
la velocidad registrada, forma de tabla, para
la velocidad límite de cada cuadrante, el
cada cuadrante y la número y el promedio de
multa aplicada a cada multas por mes
infracción
Cuadro Nro 2: valores de entrada y de salida planificados para el programa
2) Las especificaciones
Para construir de una forma más precisa las especificaciones del programa, las
cuales servirán para clarificar los detalles de la solución del problema, se
establecieron unas pre-condiciones y unas post-condiciones.
Para las pre-condiciones se establecieron 8 conjuntos de variables de entrada, los
cuales son los siguientes:
9
{pre: entrada 1 = (F1, F2, …, F20) Ʌ i (1, 2, …, 20) Fi es la fecha de la
infracción señalada en la boleta}
{pre: entrada 2 = (R1, R2, …, R20) Ʌ i (1, 2, …, 20) Ri es el número de registro
del vehículo de cada boleta de infracción}
{pre: entrada 3 = (C1, C2, C3, C4) Ʌ i (1, 2, 3, 4) Ci es el número del
cuadrante donde se cometió la infracción}
{pre: entrada 4 = (Zn, Zs, Ze, Zo) Ʌ Zn, Zs, Ze, Zo son las zonas donde se
cometieron infracciones, a saber, norte, sur, este y oeste, respectivamente}
{pre: entrada 5 = (U1, U2, …, U20) Ʌ i (1, 2, …, 20) Ui es la urbanización
donde se cometió la infracción}
{pre: entrada 6 = (V1, V2, …, V20) Ʌ i (1, 2, …, 20) Vi es la velocidad
registrada de cada infracción}
{pre: entrada 7 = (Vl1, Vl2, Vl3, Vl4) Ʌ i (1, 2, 3, 4) Vli es la velocidad límite de
cada cuadrante, 1, 2, 3 y 4, respectivamente}
{pre: entrada 8 = (M1, M2, …, M20) Ʌ i (1, 2, …, 20) Mi es la multa aplicada a
cada infracción}
La post-condición para este problema puede definirse de la forma siguiente:
{post: entrada = Ø Ʌ salida = Reporte 1 Ʌ Reporte 2}
10
Donde:
El Reporte 1 mostrará los valores de Fi, Ri, Ci, (Zn, Zs, Ze y Zo), Ui, Vi, Vli, Mi y
Mt, que es la suma de todas las multas, en forma de tabla.
El Reporte 2 mostrará el número total de multas y el promedio del monto de dichas
multas para cada cuadrante de forma mensual.
3) La partición
Nuestra solución debe generar dos reportes en forma de tabla. El primero
mostrará la información de cada boleta de infracción de manera ordenada. Dicha
información se refiere a la fecha de la infracción, el número de registro del
vehículo, el cuadrante donde se cometió la infracción, la zona, la urbanización, la
velocidad registrada, la velocidad límite permitida en cada cuadrante, la multa
calculada para cada boleta y la suma de todas las multas. Para el caso de la multa
correspondiente a cada boleta, el programa la calculará y mostrará el resultado,
según las especificaciones del problema dadas (multa = 100.000 + 50 * (Vi – Vli)),
es decir, 100.000 Bs por el costo de la corte, más 50 Bs por cada km/h de exceso
de velocidad con respecto a la velocidad límite permitida en cada cuadrante.
El segundo reporte calcula y muestra de forma ordenada la cantidad de multas
correspondientes a cada cuadrante en el período considerado de un mes.
También calcula el promedio de las multas de cada cuadrante para el período
considerado.
Las rutinas correspondientes al programa son las siguientes:
11
Recibir la información de cada boleta, Calcular la multa de cada boleta (Mi),
correspondiente a: fecha de la según la ecuación:
infracción, el número de registro del Mi = 100.000 + 50 * (Vi – Vli)
vehículo (Fi), el cuadrante donde se Calcular la suma de las multas (Mt).
cometió la infracción (Ci), la zona (Zj), la Mostrar los resultados de Fi, Ci, Zj,Ui,Vi,
urbanización (Ui), la velocidad registrada Vli, Mi y Mt en una tabla llamada
(Vi) y la velocidad límite permitida en Reporte 1.
Calcular la cantidad de boletas de
infracción y el promedio de las multas
de cada cuadrante en el período
considerado de 1 mes. Mostrar estos
resultados de forma ordenada en una
tabla llamada Reporte 2.
Elementos de datos
Fechas (Fi) Fechas en las que se cometieron las infracciones
N° de registros (Ri) Números de registros de los vehículos infractores
Cuadrantes (Ci) Cuadrantes donde se cometieron las infracciones
Zonas (Zj) Zonas en donde se cometieron las infracciones
Urbanizaciones (Ui) Urbanizaciones en donde se cometieron las infracciones
Velocidades (Vi) Velocidades registradas en las boletas
Velocidades límite (Vli) Velocidades límite permitidas en cada cuadrante
Multas calculadas (Mi) Mi = 100.000 + 50 * (Vi – Vli)
Multa total (Mt)
Figura N° 1: Partición en rutinas y elementos de datos para nuestro problema
Y el orden inicial y las especificaciones de nuestro problema son las siguientes:
{pre: entrada 1 = (F1, F2, …, F20) Ʌ i (1, 2, …, 20) Fi es la fecha de la
infracción señalada en la boleta}
12
{pre: entrada 2 = (R1, R2, …, R20) Ʌ i (1, 2, …, 20) Ri es el número de registro
del vehículo de cada boleta de infracción}
{pre: entrada 3 = (C1, C2, C3, C4) Ʌ i (1, 2, 3, 4) Ci es el número del
cuadrante donde se cometió la infracción}
{pre: entrada 4 = (Zn, Zs, Ze, Zo) Ʌ Zn, Zs, Ze, Zo son las zonas donde se
cometieron infracciones, a saber, norte, sur, este y oeste, respectivamente}
{pre: entrada 5 = (U1, U2, …, U20) Ʌ i (1, 2, …, 20) Ui es la urbanización
donde se cometió la infracción}
{pre: entrada 6 = (V1, V2, …, V20) Ʌ i (1, 2, …, 20) Vi es la velocidad
registrada de cada infracción}
{pre: entrada 7 = (Vl1, Vl2, Vl3, Vl4) Ʌ i (1, 2, 3, 4) Vli es la velocidad límite de
cada cuadrante, 1, 2, 3 y 4, respectivamente}
{pre: entrada 8 = (M1, M2, …, M20) Ʌ i (1, 2, …, 20) Mi es la multa aplicada a
cada infracción}
13
Paso 1: Recibir la información de cada Paso 2: Calcular la multa de cada boleta
boleta, correspondiente a: fecha de la (Mi), según la ecuación:
infracción, el número de registro del Mi = 100.000 + 50 * (Vi – Vli)
vehículo (Fi), el cuadrante donde se cometió Calcular la suma de las multas (Mt).
la infracción (Ci), la zona (Zj), la urbanización Mostrar los resultados de Fi, Ci, Zj,Ui,Vi,
(Ui), la velocidad registrada (Vi) y la Vli, Mi y Mt en una tabla llamada
velocidad límite permitida en cada Reporte 1.
Paso 3: Calcular la cantidad de boletas
de infracción y el promedio de las
multas de cada cuadrante en el período
considerado de 1 mes. Mostrar estos
resultados de forma ordenada en una
tabla llamada Reporte 2.
{post: entrada = Ø Ʌ salida = Reporte 1 Ʌ Reporte 2}
Figura N° 2: Orden inicial y especificaciones para nuestro problema
14
Objetivo 6: Diseño del algoritmo usando técnicas de
programación estructurada
Representación del algoritmo en pseudocódigo
Algoritmo Trabajo_Practico
var
Cadena: F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, F13, F14, F15, F16, F17, F18, F19, F20
Entero: R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, R11, R12, R13, R14, R15, R16, R17, R18, R19, R20
Entero: C1, C2, C3, C4
Caracter: Zn, Zs, Ze, Zo
Cadena: U1, U2, U3, U4, U5, U6, U7, U8, U9, U10, U11, U12, U13, U14, U15, U16, U17, U18, U19,
..U20
Entero: V1, V2, V3, V4, V5, V6, V7, V8, V9, V10, V11, V12, V13, V14, V15, V16, V17, V18, V19, V20
Entero: Vl1, Vl2, Vl3, Vl4
Real: M1, M2, M3, M4, M5, M6, M7, M8, M9, M10, M11, M12, M13, M14, M15, M16, M17, M18,
..M19, M20
Real: Mt
Entero: S1, S2, S3, S4
Real: P1, P2, P3, P4
inicio
F1 ← '10/01/2018'
F2 ← '15/01/2018'
F3 ← '20/01/2018'
F4 ← '25/01/2018'
F5 ← '30/01/2018'
15
F6 ← '01/02/2018'
F7 ← '10/02/2018'
F8 ← '15/02/2018'
F9 ← '20/02/2018'
F10 ← '25/02/2018'
F11 ← '01/03/2018'
F12 ← '10/03/2018'
F13 ← '15/03/2018'
F14 ← '20/03/2018'
F15 ← '25/03/2018'
F16 ← '01/04/2018'
F17 ← '10/04/2018'
F18 ← '15/04/2018'
F19 ← '20/04/2018'
F20 ← '25/04/2018'
R1 ← 123
R2 ← 567
R3 ← 912
R4 ← 952
R5 ← 107
R6 ← 456
R7 ← 891
R8 ← 457
R9 ← 105
R10 ← 832
R11 ← 789
R12 ← 345
R13 ← 790
R14 ← 329
16
R15 ← 953
R16 ← 234
R17 ← 678
R18 ← 385
R19 ← 475
R20 ← 506
C1 ← 1
C2 ← 2
C3 ← 3
C4 ← 4
Zn ← 'N'
Zs ← 'S'
Ze ← 'E'
Zo ← 'O'
U1 ← 'Catia'
U2 ← '23 de Enero'
U3 ← 'Propatria'
U4 ← 'Lomas de Urdaneta'
U5 ← 'Catia'
U6 ← 'Los Chaguaramos'
U7 ← 'Colinas de los Chaguaramos'
U8 ← 'Santa Monica'
U9 ← 'Colinas de Santa Monica'
U10 ← 'Las Acacias'
U11 ← 'Barrio Nuevo'
U12 ← 'Bucaral'
U13 ← 'Country Club'
U14 ← 'El Pedregal'
U15 ← 'San Marino'
17
U16 ← 'Catia 23 de Enero'
U17 ← 'Nueva Caracas'
U18 ← 'Propatria'
U19 ← 'Lomas de Urdaneta'
U20 ← 'Casalta'
V1 ← 35
V2 ← 40
V3 ← 56
V4 ← 37
V5 ← 52
V6 ← 55
V7 ← 43
V8 ← 67
V9 ← 83
V10 ← 49
V11 ← 55
V12 ← 60
V13 ← 74
V14 ← 80
V15 ← 77
V16 ← 40
V17 ← 88
V18 ← 67
V19 ← 50
V20 ← 66
Vl1 ← 30
Vl2 ← 40
Vl3 ← 45
Vl4 ← 35
18
M1 ← 100000+50*(V1-Vl1)
M2 ← 100000+50*(V2-Vl1)
M3 ← 100000+50*(V3-Vl1)
M4 ← 100000+50*(V4-VL1)
M5 ← 100000+50*(V5-Vl1)
M6 ← 100000+50*(V6-Vl2)
M7 ← 100000+50*(V7-Vl2)
M8 ← 100000+50*(V8-Vl2)
M9 ← 100000+50*(V9-Vl2)
M10 ← 100000+50*(V10-Vl2)
M11 ← 100000+50*(V11-Vl3)
M12 ← 100000+50*(V12-Vl3)
M13 ← 100000+50*(V13-Vl3)
M14 ← 100000+50*(V14-Vl3)
M15 ← 100000+50*(V15-Vl3)
M16 ← 100000+50*(V16-Vl4)
M17 ← 100000+50*(V17-Vl4)
M18 ← 100000+50*(V18-Vl4)
M19 ← 100000+50*(V19-Vl4)
M20 ← 100000+50*(V20-Vl4)
Mt ←
.M1+M2+M3+M4+M5+M6+M7+M8+M9+M10+M11+M12+M13+M14+M15+M16+M17+M18+M19
.+M20
S1 ← 5
S2 ← 5
S3 ← 5
S4 ← 5
P1 ← (M1+M2+M3+M4+M5)/5
P2 ← (M6+M7+M8+M9+M10)/5
P3 ← (M11+M12+M13+M14+M15)/5
19
P4 ← (M16+M17+M18+M19+M20)/5
escribir ('Reporte 1: Infracciones a los limites de velocidad')
escribir
escribir ('/ Fecha de la infraccion / ', 'Numero de registro del vehiculo / ', 'Numero de cuadrante /
', 'Zona / ', 'Urbanizacion / ', 'Velocidad registrada (km/h) / ', 'Velocidad limite (km/h) / ', 'Multa
(Bs) /')
escribir
escribir ('/ ', F1, ' / ', R1, ' / ', C1, ' / ', Zn, ' / ', U1, ' / ', V1, ' / ', Vl1, ' / ', M1, ' /')
escribir ('/ ', F2, ' / ', R2, ' / ', C1, ' / ', Zn, ' / ', U2, ' / ', V2, ' / ', Vl1, ' / ', M2, ' /')
escribir ('/ ', F3, ' / ', R3, ' / ', C1, ' / ', Zn, ' / ', U3, ' / ', V3, ' / ', Vl1, ' / ', M3, ' /')
escribir ('/ ', F4, ' / ', R4, ' / ', C1, ' / ', Zn, ' / ', U4, ' / ', V4, ' / ', Vl1, ' / ', M4, ' /')
escribir ('/ ', F5, ' / ', R5, ' / ', C1, ' / ', Zn, ' / ', U5, ' / ', V5, ' / ', Vl1, ' / ', M5, ' /')
escribir ('/ ', F6, ' / ', R6, ' / ', C2, ' / ', Zs, ' / ', U6, ' / ', V6, ' / ', Vl2, ' / ', M6, ' /')
escribir ('/ ', F7, ' / ', R7, ' / ', C2, ' / ', Zs, ' / ', U7, ' / ', V7, ' / ', Vl2, ' / ', M7, ' /')
escribir ('/ ', F8, ' / ', R8, ' / ', C2, ' / ', Zs, ' / ', U8, ' / ', V8, ' / ', Vl2, ' / ', M8, ' /')
escribir ('/ ', F9, ' / ', R9, ' / ', C2, ' / ', Zs, ' / ', U9, ' / ', V9, ' / ', Vl2, ' / ', M9, ' /')
escribir ('/ ', F10, ' / ', R10, ' / ', C2, ' / ', Zs, ' / ', U10, ' / ', V10, ' / ', Vl2, ' / ', M10, ' /')
escribir ('/ ', F11, ' / ', R11, ' / ', C3, ' / ', Ze, ' / ', U11, ' / ', V11, ' / ', Vl3, ' / ', M11, ' /')
escribir ('/ ', F12, ' / ', R12, ' / ', C3, ' / ', Ze, ' / ', U12, ' / ', V12, ' / ', Vl3, ' / ', M12, ' /')
escribir ('/ ', F13, ' / ', R13, ' / ', C3, ' / ', Ze, ' / ', U13, ' / ', V13, ' / ', Vl3, ' / ', M13, ' /')
escribir ('/ ', F14, ' / ', R14, ' / ', C3, ' / ', Ze, ' / ', U14, ' / ', V14, ' / ', Vl3, ' / ', M14, ' /')
escribir ('/ ', F15, ' / ', R15, ' / ', C3, ' / ', Ze, ' / ', U15, ' / ', V15, ' / ', Vl3, ' / ', M15, ' /')
escribir ('/ ', F16, ' / ', R16, ' / ', C4, ' / ', Zo, ' / ', U16, ' / ', V16, ' / ', Vl4, ' / ', M16, ' /')
escribir ('/ ', F17, ' / ', R17, ' / ', C4, ' / ', Zo, ' / ', U17, ' / ', V17, ' / ', Vl4, ' / ', M17, ' /')
escribir ('/ ', F18, ' / ', R18, ' / ', C4, ' / ', Zo, ' / ', U18, ' / ', V18, ' / ', Vl4, ' / ', M18, ' /')
escribir ('/ ', F19, ' / ', R19, ' / ', C4, ' / ', Zo, ' / ', U19, ' / ', V19, ' / ', Vl4, ' / ', M19, ' /')
escribir ('/ ', F20, ' / ', R20, ' / ', C4, ' / ', Zo, ' / ', U20, ' / ', V20, ' / ', Vl4, ' / ', M20, ' /')
escribir
escribir ('La suma de todas las multas es: ', Mt, ' Bs')
escribir
20
escribir
{Ahora presentamos el Reporte 2}
escribir ('Reporte 2: Promedio de multas por cuadrante')
escribir
escribir ('/ ', 'Cuadrante', ' / ', 'Mes', ' / ', 'Numero de multas', ' / ', 'Promedio mensual de multas',
' /')
escribir
escribir ('/ ', 1, ' / ', 'Enero', ' / ', S1, ' / ', P1, ' /')
escribir ('/ ', 2, ' / ', 'Febrero', ' / ', S2, ' / ', P2, ' /')
escribir ('/ ', 3, ' / ', 'Marzo', ' / ', S3, ' / ', P3, ' /')
escribir ('/ ', 4, ' / ', 'Abril', ' / ', S4, ' / ', P4, ' /')
fin
21
Representación del algoritmo en diagrama N-S
La representación del algoritmo en un diagrama N-S es la siguiente:
inicio
F1 ← '10/01/2018'
F2 ← '15/01/2018'
F3 ← '20/01/2018'
F4 ← '25/01/2018'
F5 ← '30/01/2018'
F6 ← '01/02/2018'
F7 ← '10/02/2018'
F8 ← '15/02/2018'
F9 ← '20/02/2018'
F10 ← '25/02/2018'
F11 ← '01/03/2018'
F12 ← '10/03/2018'
F13 ← '15/03/2018'
F14 ← '20/03/2018'
F15 ← '25/03/2018'
F16 ← '01/04/2018'
F17 ← '10/04/2018'
F18 ← '15/04/2018'
F19 ← '20/04/2018'
F20 ← '25/04/2018'
R1 ← 123
R2 ← 567
R3 ← 912
R4 ← 952
R5 ← 107
R6 ← 456
R7 ← 891
R8 ← 457
R9 ← 105
R10 ← 832
R11 ← 789
R12 ← 345
R13 ← 790
R14 ← 329
22
R15 ← 953
R16 ← 234
R17 ← 678
R18 ← 385
R19 ← 475
R20 ← 506
C1 ← 1
C2 ← 2
C3 ← 3
C4 ← 4
Zn ← 'N'
Zs ← 'S'
Ze ← 'E'
Zo ← 'O'
U1 ← 'Catia'
U2 ← '23 de Enero'
U3 ← 'Propatria'
U4 ← 'Lomas de Urdaneta'
U5 ← 'Catia'
U6 ← 'Los Chaguaramos'
U7 ← 'Colinas de los Chaguaramos'
U8 ← 'Santa Monica'
U9 ← 'Colinas de Santa Monica'
U10 ← 'Las Acacias'
U11 ← 'Barrio Nuevo'
U12 ← 'Bucaral'
U13 ← 'Country Club'
U14 ← 'El Pedregal'
U15 ← 'San Marino'
U16 ← 'Catia 23 de Enero'
U17 ← 'Nueva Caracas'
U18 ← 'Propatria'
U19 ← 'Lomas de Urdaneta'
U20 ← 'Casalta'
V1 ← 35
V2 ← 40
V3 ← 56
V4 ← 37
V5 ← 52
V6 ← 55
V7 ← 43
V8 ← 67
V9 ← 83
V10 ← 49
V11 ← 55
V12 ← 60
V13:= 74;
23
V14 ← 80
V15 ← 77
V16 ← 40
V17 ← 88
V18 ← 67
V19 ← 50
V20 ← 66
Vl1 ← 30
Vl2 ← 40
Vl3 ← 45
Vl4 ← 35
M1 ← 100000+50*(V1-Vl1)
M2 ← 100000+50*(V2-Vl1)
M3 ← 100000+50*(V3-Vl1)
M4 ← 100000+50*(V4-VL1)
M5 ← 100000+50*(V5-Vl1)
M6 ← 100000+50*(V6-Vl2)
M7 ← 100000+50*(V7-Vl2)
M8 ← 100000+50*(V8-Vl2)
M9 ← 100000+50*(V9-Vl2)
M10 ← 100000+50*(V10-Vl2)
M11 ← 100000+50*(V11-Vl3)
M12 ← 100000+50*(V12-Vl3)
M13 ← 100000+50*(V13-Vl3)
M14 ← 100000+50*(V14-Vl3)
M15 ← 100000+50*(V15-Vl3)
M16 ← 100000+50*(V16-Vl4)
M17 ← 100000+50*(V17-Vl4)
M18 ← 100000+50*(V18-Vl4)
M19 ← 100000+50*(V19-Vl4)
M20 ← 100000+50*(V20-Vl4)
Mt ←
.M1+M2+M3+M4+M5+M6+M7+M8+M9+M10+M11+M12+M13+M14+M15+M16+M17+M18+M1
9.+M20
S1 ← 5
S2 ← 5
S3 ← 5
S4 ← 5
P1 ← (M1+M2+M3+M4+M5)/5
P2 ← (M6+M7+M8+M9+M10)/5
P3 ← (M11+M12+M13+M14+M15)/5
P4 ← (M16+M17+M18+M19+M20)/5
24
escribir ('Reporte 1: Infracciones a los limites de velocidad')
escribir
escribir ('/ Fecha de la infraccion / ', 'Numero de registro del vehiculo / ', 'Numero de cuadrante /
', 'Zona / ', 'Urbanizacion / ', 'Velocidad registrada (km/h) / ', 'Velocidad limite (km/h) / ', 'Multa
(Bs) /')
escribir
escribir ('/ ', F1, ' / ', R1, ' / ', C1, ' / ', Zn, ' / ', U1, ' / ', V1, ' / ', Vl1, ' / ', M1, ' /')
escribir ('/ ', F2, ' / ', R2, ' / ', C1, ' / ', Zn, ' / ', U2, ' / ', V2, ' / ', Vl1, ' / ', M2, ' /')
escribir ('/ ', F3, ' / ', R3, ' / ', C1, ' / ', Zn, ' / ', U3, ' / ', V3, ' / ', Vl1, ' / ', M3, ' /')
escribir ('/ ', F4, ' / ', R4, ' / ', C1, ' / ', Zn, ' / ', U4, ' / ', V4, ' / ', Vl1, ' / ', M4, ' /')
escribir ('/ ', F5, ' / ', R5, ' / ', C1, ' / ', Zn, ' / ', U5, ' / ', V5, ' / ', Vl1, ' / ', M5, ' /')
escribir ('/ ', F6, ' / ', R6, ' / ', C2, ' / ', Zs, ' / ', U6, ' / ', V6, ' / ', Vl2, ' / ', M6, ' /')
escribir ('/ ', F7, ' / ', R7, ' / ', C2, ' / ', Zs, ' / ', U7, ' / ', V7, ' / ', Vl2, ' / ', M7, ' /')
escribir ('/ ', F8, ' / ', R8, ' / ', C2, ' / ', Zs, ' / ', U8, ' / ', V8, ' / ', Vl2, ' / ', M8, ' /')
escribir ('/ ', F9, ' / ', R9, ' / ', C2, ' / ', Zs, ' / ', U9, ' / ', V9, ' / ', Vl2, ' / ', M9, ' /')
escribir ('/ ', F10, ' / ', R10, ' / ', C2, ' / ', Zs, ' / ', U10, ' / ', V10, ' / ', Vl2, ' / ', M10, ' /')
escribir ('/ ', F11, ' / ', R11, ' / ', C3, ' / ', Ze, ' / ', U11, ' / ', V11, ' / ', Vl3, ' / ', M11, ' /')
escribir ('/ ', F12, ' / ', R12, ' / ', C3, ' / ', Ze, ' / ', U12, ' / ', V12, ' / ', Vl3, ' / ', M12, ' /')
escribir ('/ ', F13, ' / ', R13, ' / ', C3, ' / ', Ze, ' / ', U13, ' / ', V13, ' / ', Vl3, ' / ', M13, ' /')
escribir ('/ ', F14, ' / ', R14, ' / ', C3, ' / ', Ze, ' / ', U14, ' / ', V14, ' / ', Vl3, ' / ', M14, ' /')
escribir ('/ ', F15, ' / ', R15, ' / ', C3, ' / ', Ze, ' / ', U15, ' / ', V15, ' / ', Vl3, ' / ', M15, ' /')
escribir ('/ ', F16, ' / ', R16, ' / ', C4, ' / ', Zo, ' / ', U16, ' / ', V16, ' / ', Vl4, ' / ', M16, ' /')
escribir ('/ ', F17, ' / ', R17, ' / ', C4, ' / ', Zo, ' / ', U17, ' / ', V17, ' / ', Vl4, ' / ', M17, ' /')
escribir ('/ ', F18, ' / ', R18, ' / ', C4, ' / ', Zo, ' / ', U18, ' / ', V18, ' / ', Vl4, ' / ', M18, ' /')
escribir ('/ ', F19, ' / ', R19, ' / ', C4, ' / ', Zo, ' / ', U19, ' / ', V19, ' / ', Vl4, ' / ', M19, ' /')
escribir ('/ ', F20, ' / ', R20, ' / ', C4, ' / ', Zo, ' / ', U20, ' / ', V20, ' / ', Vl4, ' / ', M20, ' /')
escribir
escribir ('La suma de todas las multas es: ', Mt, ' Bs')
escribir
escribir
escribir ('Reporte 2: Promedio de multas por cuadrante')
escribir
escribir ('/ ', 'Cuadrante', ' / ', 'Mes', ' / ', 'Numero de multas', ' / ', 'Promedio mensual de multas', '
/')
escribir
escribir ('/ ', 1, ' / ', 'Enero', ' / ', S1, ' / ', P1, ' /')
escribir ('/ ', 2, ' / ', 'Febrero', ' / ', S2, ' / ', P2, ' /')
25
escribir ('/ ', 3, ' / ', 'Marzo', ' / ', S3, ' / ', P3, ' /')
escribir ('/ ', 4, ' / ', 'Abril', ' / ', S4, ' / ', P4, ' /')
fin
Figura N° 3: Representación del algoritmo en un diagrama N-S
Representación del algoritmo en diagrama de flujo
La representación del algoritmo en un diagrama de flujo es la siguiente:
Figura N° 4: Representación del algoritmo en un diagrama de flujo
Objetivo 7: Prueba del algoritmo propuesto utilizando el concepto
de robustez
26
Al analizar el algoritmo propuesto en el punto anterior, se puede observar que el
mismo es correcto ya que, al no leer datos de entrada desde un periférico, sino al
tener todas las variables definidas, genera automáticamente las salidas deseadas,
los reportes 1 y 2.
También se observa que el algoritmo es robusto, ya que es correcto y no es
necesario que emita algún mensaje de error, ya que el algoritmo no lee datos
ingresados desde un periférico, sino que todas las variables están ya definidas,
por lo tanto, no habrá datos ingresados de manera incorrecta.
Objetivo 8: Codificación del algoritmo en el lenguaje Pascal
27
El algoritmo codificado en el lenguaje Pascal es el siguiente:
Program Trabajo_Practico;
{Programa realizado por Leandro Ortiz, CI 18609651. Estudiante de Matematica
(126), lapso 2018-1}
{Este programa es el trabajo practico de la materia ComputacionI.
El INTTT Caracas ha acumulado informacion referente a las infracciones de
de los limites de velocidad durante un determinado periodo de tiempo.
Se desea recopilar esa informacion y mostrarla en dos reportes, uno que
muestre la descripcion de cada infraccion y otro la estadistica mensual
del promedio de multas de cada cuadrante en los que se ha dividido la ciudad.}
{El programador, recibe todas las tarjetas de infracciones del
periodo considerado, supongamos que son 20. Esa informacion se guarda en
variables, una por cada columna. La variables de fecha seran Fi, y los numeros
i representan las filas de la cuadricula, es decir, las fechas de las 20
multas}
{Declaracion de variables}
var
F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, F13, F14, F15, F16, F17, F18, F19, F20: string [10];
{Las variables Ri representan el numero de registro del vehiculo}
28
R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, R11, R12, R13, R14, R15, R16, R17, R18, R19, R20: integer;
{Las variables Ci representan el numero del cuadrante al que pertenece el vehiculo}
C1, C2, C3, C4: integer;
{Las variables Zi representan la zona a la que pertenece el vehiculo infractor}
Zn, Zs, Ze, Zo: char;
{Las variables Ui representan la urbanizacion a la que pertenece el vehiculo}
U1, U2, U3, U4, U5, U6, U7, U8, U9, U10, U11, U12, U13, U14, U15, U16, U17, U18, U19, U20:
string;
{Las variables Vi representan la velocidad registrada}
V1, V2, V3, V4, V5, V6, V7, V8, V9, V10, V11, V12, V13, V14, V15, V16, V17, V18, V19, V20: integer;
{Las variables Vli representan la velocidad limite del cuadrante donde haya ocurrido la infraccion}
Vl1, Vl2, Vl3, Vl4: integer;
{Las variables Mi representan las multas calculadas para cada infraccion}
M1, M2, M3, M4, M5, M6, M7, M8, M9, M10, M11, M12, M13, M14, M15, M16, M17, M18, M19,
M20: real;
{La variable Mt es la suma de todas las multas}
29
Mt: real;
{Para el reporte 2 se generan dos conjuntos mas de variables: las variables Si
representan la cantidad (suma) de multas de cada cuadrante; y las variables Pi representan
el promedio de multas de cada cuadrante. Esta informacion se mostrara en el
Reporte 2}
S1, S2, S3, S4: integer;
P1, P2, P3, P4: real;
{Tomando en cuenta que se supone que el presente programa se hace luego de
que el programador recibe todas las boletas de infraccion, todas las variables
antes declaradas ya estan definidas, es decir, el programa se realiza para
presentar la informacion de las boletas recibidas en dos informes, por lo
tanto, no va a recibir informacion que se ingrese desde el teclado. Habiendo
dicho esto, procedemos a definir las variables en el programa}
begin
F1:= '10/01/2018';
F2:= '15/01/2018';
F3:= '20/01/2018';
F4:= '25/01/2018';
F5:= '30/01/2018';
F6:= '01/02/2018';
F7:= '10/02/2018';
F8:= '15/02/2018';
F9:= '20/02/2018';
F10:= '25/02/2018';
F11:= '01/03/2018';
30
F12:= '10/03/2018';
F13:= '15/03/2018';
F14:= '20/03/2018';
F15:= '25/03/2018';
F16:= '01/04/2018';
F17:= '10/04/2018';
F18:= '15/04/2018';
F19:= '20/04/2018';
F20:= '25/04/2018';
R1:= 123;
R2:= 567;
R3:= 912;
R4:= 952;
R5:= 107;
R6:= 456;
R7:= 891;
R8:= 457;
R9:= 105;
R10:= 832;
R11:= 789;
R12:= 345;
R13:= 790;
R14:= 329;
R15:= 953;
R16:= 234;
R17:= 678;
R18:= 385;
R19:= 475;
R20:= 506;
31
C1:= 1;
C2:= 2;
C3:= 3;
C4:= 4;
Zn:= 'N';
Zs:= 'S';
Ze:= 'E';
Zo:= 'O';
U1:= 'Catia';
U2:= '23 de Enero';
U3:= 'Propatria';
U4:= 'Lomas de Urdaneta';
U5:= 'Catia';
U6:= 'Los Chaguaramos';
U7:= 'Colinas de los Chaguaramos';
U8:= 'Santa Monica';
U9:= 'Colinas de Santa Monica';
U10:= 'Las Acacias';
U11:= 'Barrio Nuevo';
U12:= 'Bucaral';
U13:= 'Country Club';
U14:= 'El Pedregal';
U15:= 'San Marino';
U16:= 'Catia 23 de Enero';
U17:= 'Nueva Caracas';
U18:= 'Propatria';
U19:= 'Lomas de Urdaneta';
U20:= 'Casalta';
V1:= 35;
32
V2:= 40;
V3:= 56;
V4:= 37;
V5:= 52;
V6:= 55;
V7:= 43;
V8:= 67;
V9:= 83;
V10:= 49;
V11:= 55;
V12:= 60;
V13:= 74;
V14:= 80;
V15:= 77;
V16:= 40;
V17:= 88;
V18:= 67;
V19:= 50;
V20:= 66;
Vl1:= 30;
Vl2:= 40;
Vl3:= 45;
Vl4:= 35;
M1:= 100000+50*(V1-Vl1);
M2:= 100000+50*(V2-Vl1);
M3:= 100000+50*(V3-Vl1);
M4:= 100000+50*(V4-VL1);
M5:= 100000+50*(V5-Vl1);
M6:= 100000+50*(V6-Vl2);
33
M7:= 100000+50*(V7-Vl2);
M8:= 100000+50*(V8-Vl2);
M9:= 100000+50*(V9-Vl2);
M10:= 100000+50*(V10-Vl2);
M11:= 100000+50*(V11-Vl3);
M12:= 100000+50*(V12-Vl3);
M13:= 100000+50*(V13-Vl3);
M14:= 100000+50*(V14-Vl3);
M15:= 100000+50*(V15-Vl3);
M16:= 100000+50*(V16-Vl4);
M17:= 100000+50*(V17-Vl4);
M18:= 100000+50*(V18-Vl4);
M19:= 100000+50*(V19-Vl4);
M20:= 100000+50*(V20-Vl4);
Mt:=
M1+M2+M3+M4+M5+M6+M7+M8+M9+M10+M11+M12+M13+M14+M15+M16+M17+M18+M19
+M20;
S1:= 5;
S2:= 5;
S3:= 5;
S4:= 5;
P1:= (M1+M2+M3+M4+M5)/5;
P2:= (M6+M7+M8+M9+M10)/5;
P3:= (M11+M12+M13+M14+M15)/5;
P4:= (M16+M17+M18+M19+M20)/5;
{Ahora mostramos el Reporte 1. Primero la fila del encabezado y luego las
demas}
writeln('Reporte 1: Infracciones a los limites de velocidad');
34
writeln;
writeln('/ Fecha de la infraccion / ', 'Numero de registro del vehiculo / ', 'Numero de cuadrante / ',
'Zona / ', 'Urbanizacion / ', 'Velocidad registrada (km/h) / ', 'Velocidad limite (km/h) / ', 'Multa
(Bs) /');
writeln;
writeln('/ ', F1, ' / ', R1, ' / ', C1, ' / ', Zn, ' / ', U1, ' / ', V1, ' / ', Vl1, ' / ', M[Link], ' /');
writeln('/ ', F2, ' / ', R2, ' / ', C1, ' / ', Zn, ' / ', U2, ' / ', V2, ' / ', Vl1, ' / ', M[Link], ' /');
writeln('/ ', F3, ' / ', R3, ' / ', C1, ' / ', Zn, ' / ', U3, ' / ', V3, ' / ', Vl1, ' / ', M[Link], ' /');
writeln('/ ', F4, ' / ', R4, ' / ', C1, ' / ', Zn, ' / ', U4, ' / ', V4, ' / ', Vl1, ' / ', M[Link], ' /');
writeln('/ ', F5, ' / ', R5, ' / ', C1, ' / ', Zn, ' / ', U5, ' / ', V5, ' / ', Vl1, ' / ', M[Link], ' /');
writeln('/ ', F6, ' / ', R6, ' / ', C2, ' / ', Zs, ' / ', U6, ' / ', V6, ' / ', Vl2, ' / ', M[Link], ' /');
writeln('/ ', F7, ' / ', R7, ' / ', C2, ' / ', Zs, ' / ', U7, ' / ', V7, ' / ', Vl2, ' / ', M[Link], ' /');
writeln('/ ', F8, ' / ', R8, ' / ', C2, ' / ', Zs, ' / ', U8, ' / ', V8, ' / ', Vl2, ' / ', M[Link], ' /');
writeln('/ ', F9, ' / ', R9, ' / ', C2, ' / ', Zs, ' / ', U9, ' / ', V9, ' / ', Vl2, ' / ', M[Link], ' /');
writeln('/ ', F10, ' / ', R10, ' / ', C2, ' / ', Zs, ' / ', U10, ' / ', V10, ' / ', Vl2, ' / ', M[Link], ' /');
writeln('/ ', F11, ' / ', R11, ' / ', C3, ' / ', Ze, ' / ', U11, ' / ', V11, ' / ', Vl3, ' / ', M[Link], ' /');
writeln('/ ', F12, ' / ', R12, ' / ', C3, ' / ', Ze, ' / ', U12, ' / ', V12, ' / ', Vl3, ' / ', M[Link], ' /');
writeln('/ ', F13, ' / ', R13, ' / ', C3, ' / ', Ze, ' / ', U13, ' / ', V13, ' / ', Vl3, ' / ', M[Link], ' /');
writeln('/ ', F14, ' / ', R14, ' / ', C3, ' / ', Ze, ' / ', U14, ' / ', V14, ' / ', Vl3, ' / ', M[Link], ' /');
writeln('/ ', F15, ' / ', R15, ' / ', C3, ' / ', Ze, ' / ', U15, ' / ', V15, ' / ', Vl3, ' / ', M[Link], ' /');
writeln('/ ', F16, ' / ', R16, ' / ', C4, ' / ', Zo, ' / ', U16, ' / ', V16, ' / ', Vl4, ' / ', M[Link], ' /');
writeln('/ ', F17, ' / ', R17, ' / ', C4, ' / ', Zo, ' / ', U17, ' / ', V17, ' / ', Vl4, ' / ', M[Link], ' /');
writeln('/ ', F18, ' / ', R18, ' / ', C4, ' / ', Zo, ' / ', U18, ' / ', V18, ' / ', Vl4, ' / ', M[Link], ' /');
writeln('/ ', F19, ' / ', R19, ' / ', C4, ' / ', Zo, ' / ', U19, ' / ', V19, ' / ', Vl4, ' / ', M[Link], ' /');
writeln('/ ', F20, ' / ', R20, ' / ', C4, ' / ', Zo, ' / ', U20, ' / ', V20, ' / ', Vl4, ' / ', M[Link], ' /');
writeln;
writeln('La suma de todas las multas es: ', Mt:7:0, ' Bs');
writeln;
writeln;
35
{Ahora presentamos el Reporte 2}
writeln('Reporte 2: Promedio de multas por cuadrante');
writeln;
writeln('/ ', 'Cuadrante', ' / ', 'Mes', ' / ', 'Numero de multas', ' / ', 'Promedio mensual de multas',
' /');
writeln;
writeln('/ ', 1, ' / ', 'Enero', ' / ', S1, ' / ', P[Link], ' /');
writeln('/ ', 2, ' / ', 'Febrero', ' / ', S2, ' / ', P[Link], ' /');
writeln('/ ', 3, ' / ', 'Marzo', ' / ', S3, ' / ', P[Link], ' /');
write('/ ', 4, ' / ', 'Abril', ' / ', S4, ' / ', P[Link], ' /');
end.
El código presentado en este trabajo práctico fue probado en la aplicación Free
Pascal y corrió perfectamente, generando la solución buscada al problema
planteado al inicio. Una copia del archivo del programa en el formato .pas se
adjunta en el CD que acompaña al presente trabajo práctico.
Conclusiones
36
En el presente trabajo se le dio solución al problema planteado inicialmente a
través de las herramientas adquiridas en el curso Computación I, de la carrera
Matemática, de la Universidad Nacional Abierta, las cuales fueron presentadas en
la introducción y desarrolladas a lo largo del trabajo.
Se vio cómo a la idea inicial de solución del problema se le va dando forma, y una
estructura cada vez más robusta, a medida que se van utilizando las distintas
herramientas adquiridas en el curso, desde el planteamiento de la solución,
pasando por la elaboración de algoritmos y pseudocódigos, hasta llegar a la
elaboración del código de programación, que es el que permitirá ingresar la
solución planteada a una computadora, para que ésta ejecute nuestras
instrucciones y proporcione la solución del problema.
El lenguaje de programación utilizado en el curso y en el presente trabajo es
Pascal, pero las herramientas adquiridas para la elaboración de algoritmos y
resolución de problemas mediante la computadora, permitirán aprender fácilmente
cualquier lenguaje de programación para elaborar la parte final de la solución por
computadora de un problema planteado.
Recomendaciones
37
Se recomienda eliminar la exigencia de almacenar una copia del programa
elaborado en un CD, ya que ésta es una tecnología que está casi en desuso y
cuesta conseguir alguna tienda que todavía los venda. Ya que el archivo .pas, que
contiene el código de programación, es bastante ligero (12 kb, el del presente
trabajo), se puede enviar fácilmente por correo electrónico.
Anexo
38
Pantalla de la corrida del programa en Free Pascal IDE, versión 1.0.12
[2014/03/06]
En la siguiente imagen se muestra la pantalla con la corrida del programa en Free
Pascal IDE, versión 1.0.12 [2014/03/06], en la misma se observa la solución del
problema planteado, los dos reportes con las características solicitadas.
39