Trabajo Práctico: Al Inicio Del Lapso Académico, A Través de La Plataforma de Diseño Académico
Trabajo Práctico: Al Inicio Del Lapso Académico, A Través de La Plataforma de Diseño Académico
Trabajo Práctico: Al Inicio Del Lapso Académico, A Través de La Plataforma de Diseño Académico
TRABAJO PRÁCTICO
ASIGNATURA: COMPUTACIÓN I
CÓDIGO: 323
NÚMERO DE ORIGINALES:
LAPSO: 2021-1
RESULTADOS DE CORRECCIÓN:
OBJ. N° II.2 II.3 II.4
0:NL 1: L
3
PROCEDIMIENTO Lpas () {número de pasaporte} ................................ 37
PROCEDIMIENTO Lori () {lista origen de pasaporte} ............................. 37
PROCEDIMIENTO Lnom () {lista nombres_ apellidos} ........................... 37
PROCEDIMIENTO Lexp () {lista fecha exp_pasaporte}.......................... 38
PROCEDIMIENTO Lcva () ...................................................................... 38
PROCEDIMIENTO Ldim ()...................................................................... 39
PROCEDIMIENTO Verili () ......................................................................... 40
PROCEDIMIENTO Salir ............................................................................. 40
PROCEDIMIENTO Menu2 () ...................................................................... 40
PROCEDIMIENTO MenuP ......................................................................... 41
OBJETIVO 7 PRUEBA DE ROBUSTEZ Y VERIFICACIÓN .............................. 43
OBJETIVO 8 PROGRAMA CODIFICADO ......................................................... 47
BIBLIOGRAFÍA ..................................................................................................... 47
4
INTRODUCCIÓN
Este trabajo práctico se propone resolver un problema de una compañía
ficticia que contiene grandes enseñanzas que sirven para la formación de los
futuros Ingenieros de Sistemas.
5
DESARROLLO
OBJETIVOS
5: Se resolverá el problema planteado algorítmicamente usando la
metodología MAPS
6
OBJETIVO 5
Son siglas inglesas que significan Metodología
ETAPA 1: EL DIALOGO
Se realizó una consulta al asesor de la materia en el Centro Local. Unido a
la conversación entre compañeros de estudio, se aclaró la naturaleza del
problema planteado.
Proceso: se validan los datos de entrada, de manera que sólo se graban los
datos válidos según el criterio preestablecido. Se diseñará un programa en Turbo
Pascal 7.0, para que usando arreglos de registros, se graben y muestren los
resultados requeridos.
ETAPA 2: ESPECIFICACIONES
PRE-Condiciones:
8
o La comparación se hace con ayuda de un comando que muestra la
fecha del reloj interno de la computadora, que normalmente estará
ajustada a la fecha actual.
POST-Condiciones:
9
ETAPA 3: LA PARTICIÓN
El problema global se dividirá en base a las opciones del menú principal y
submenús:
Actualizar
• Ingresar
• Modificar
• Eliminar
• Listado
• Salida _menu principal
Ordenar
Salida _del_programa
Cada una de estas opciones, incluyendo los menús, es diseñada en base a los
procedimientos, que responden al concepto de la programación estructurada.
10
clientes ingresados. Esto se hace para no sobrepasar la capacidad total del
arreglo de clientes. Si ocurre que la cantidad a ingresar es mayor que la capacidad
del arreglo, el procedimiento no se ejecuta y se devuelve al menú. Por supuesto
que la capacidad total se fija a la cantidad máxima que puede haber de clientes en
temporada alta.
2. Modificar (un cliente por vez): se pregunta cuál cliente se desea modificar
ingresando con precisión sus nombres y apellidos. El algoritmo de
búsqueda detecta el cliente solicitado y se muestra un pequeño menú para
seleccionar qué campo será modificado del registro del cliente. Se
selecciona el campo a modificar según sea el caso y se releen los datos a
modificar.
3. Eliminar (“borrar” el registro del cliente): se pregunta cuál cliente se debe
eliminar ingresando con precisión sus nombres y apellidos. El algoritmo de
búsqueda detecta el cliente solicitado y luego procede a grabar ceros en los
campos numéricos y espacios vacios en los campos de caracteres.
El número de clientes se reduce en 1.
4. Listado: se muestran todos los clientes almacenados en el registro clien_T.
puede estar ordenado o no, dependiendo si se utilizó la opción ordenar.
Para listar los datos, se dividió el proceso en 6 partes y se utilizó el
comando “gotoxy” (ir_xy) para ubicar el cursor en las coordenadas de la
pantalla.
5. Salida: el programa finaliza y se cierra la ventana respectiva, volviendo al
menú principal.
6. Ordenar: este procedimiento ordena por número de pasaporte de mayor a
menor a todos los clientes en el arreglo. Se usa un algoritmo de selección
de la manera siguiente:
o El primer elemento de la lista de clientes se toma como el valor
variable “índice-menor”
o Se compara con los restantes elementos de Clien_T en el campo N-
pas.
o Si algún elemento es menor que el “índice-menor”, éste elemento se
convierte en “índice-menor” y se sigue comparando esta variable con
los restantes elementos de Clien_T.
o Si no hay elementos menores, se coloca este índice como el último
de la lista ordenada y se toma el siguiente elemento de la lista sin
ordenar como el nuevo “índice-menor”
o Se repite el procedimiento para este nuevo índice que ya tendrá
elementos
o Así sucesivamente se van obteniendo la lista ordenada según el
campo N-pas del arreglo de clientes.
11
o Finalmente, se muestra el listado ordenado.
7. Reporte No-vigentes: Se detecta con esta opción si algún cliente presenta
algún recaudo no-vigente. Esto se logra comparando las fechas de
vencimiento del pasaporte, certificado de vacuna y declaración de impuesto
con la fecha actual. La fecha actual se obtiene mediante un comando
llamado GetDate (obtener fecha), y es la fecha del reloj interno de la
computadora. La fecha de vencimiento se obtiene sumando 1 ó 2 al año de
expedición, según sea el caso. Si la fecha de vencimiento de un documento
es menor que la fecha actual, el documento está vencido y aparecerá el
nombre del cliente involucrado en el listado del reporte. En este listado sólo
aparecerán los clientes con por lo menos un documento vencido.
8. Reporte estadístico (5 datos de salida): este procedimiento arroja un listado
en pantalla con los elementos siguientes: clientes con pasaporte
venezolano, clientes con pasaporte extranjero, clientes con certificado de
vacuna vencido, clientes con declaración de impuesto vencido, clientes con
todos sus recaudos vigentes. Esto se logra comparando fechas de
vencimiento y con una variable contadora, se va sumando de uno en uno
cada resultado.
9. Salida del programa: el programa se cierra y se vuelve al sistema operativo
de la computadora.
12
Ciclos selectivos como Si_entonces_si-no (if…then…else). Se ejecuta si la
condición a que hace referencia el “si”, es verdadera. Esto actúa como un
detector de datos de entrada. La condicional es de las formas lógicas más
utilizadas en los programas.
Ciclos selectivos como En_caso_de_Hacer (case of…do). Estructura
utilizada con preferencia en la construcción de menús. Se realizan ciertas
instrucciones dependiendo del carácter que representa una opción del
menú.
Incrementar (Inc): utilizado para la variable contadora de un ciclo. Equivale
a la declaración .
Operadores lógicos AND, OR y NOT. Son utilizados para decidir sobre
varias condiciones lógicas. Sus tablas de verdad son:
Entrada X Entrada Y Salida Salida OR Salida
AND NOT X
ETAPA 5: CODIFICACIÓN
Esta etapa corresponde al objetivo 6
ETAPA 7: PRESENTACIÓN
Los comentarios se añaden entre llaves { }. Esto se añade normalmente al
seudocódigo del programa en su realización (objetivo 6 y 8).
13
CONSTANTES
# caracteres Cad 60
TIPOS
14
Fecha expedición F_exp Array[1..3] of max
pasaporte
cadenas para validar Valin, valif, valia, Valin: string[1], valif: string[11],
valib
valia: string[4], valib: string[2]
ALGORITMO EN SEUDOCÓDIGO
Programa Servicio_Turismo {hecho en Venezuela para la empresa TOURSVEN}
Comienzo
e←0; leer(L1);
Repetir
Si L1[1]=st entonces
Comienzo
15
fin_Si
Incrementar (e)
hasta_que e=0
fin_noms;
Comienzo
Repetir
Si cod≠0 entonces
Comienzo
fin_Si
hasta_que deti
fin_letras
Comienzo
Repetir
Comienzo
fin_Si
Hasta_que detec
16
Fin_valipas
Comienzo
deti←falso
Repetir
Leer(o)
Si_no
deti←verdad
hasta_que deti
Fin_vori
Comienzo
Repetir
Leer (c)
Comienzo
fin_Si
17
Hasta_que deti
Fin_letr2
PROCEDIMIENTO valife (y, m, d: max; variable f1, f2, f3: max ) {valida fechas}
Variable detec: logi;
Comienzo
Repetir
Comienzo
fin_1_Si
Comienzo
fin_2_Si
Comienzo
fin_3_Si
Comienzo
fin_4_Si
18
Comienzo
fin_5_Si
Comienzo
detec←falso
fin_6_Si
Entonces
Comienzo
fin_7_Si
Hasta_que detec
Fin_valife
Comienzo
Q←w+1
Comienzo
Fin_1_mientras
Comienzo
(Q)
Fin_2_mientras
Fin_Nap
Comienzo
Q←w+1
Comienzo
g[Q].n_pas←D2; Incrementar(Q)
Fin_1_mientras
Comienzo
g[Q].n_pas←0
Incrementar (Q)
Fin_2_mientras
Fin_Npas
20
PROCEDIMIENTO Fexp (w, w2; variable g) {fecha_expedicion pasaporte}
Variables S: rcap; f1, f2, f3: max
Comienzo
Comienzo
Incrementar (S)
Fin_1_mientras
Comienzo
Incrementar (S)
Fin_2_mientras
Fin_Fexp
Comienzo
S←w+1
Comienzo
Fin_1_mientras
Comienzo
(S)
Fin_2_mientras
Fin_ori
Comienzo
Comienzo
Incrementar (S)
Fin_1_mientras
Comienzo
Incrementar (S)
Fin_2_mientras
Fin_Fcv
22
PROCEDIMIENTO Fdim (w, w2; variable g) {fecha declaracion_impuesto}
Variables S: rcap; h1, h2, h3: max
Comienzo
Comienzo
Incrementar (S)
Fin_1_mientras
Comienzo
Incrementar (S)
Fin_2_mientras
Fin_Fdim
Si w≠0 entonces
Comienzo
Leer (w2)
Fin_Si
Si_no comienzo
23
Escribir („¿cuántos clientes ingresará?‟)
Leer (w2)
fin_Si_no
Comienzo
w←w+w2
fin_si
leer_tecla
Fin_Ingresa
Comienzo
Repetir
Si (lista[I].nom_ap)=t entonces
Comienzo
24
posic←I; encont←verdad
fin_Si
Incrementar (I)
Fin_buscali
Comienzo
k[pos].nom_ap←L
Fin_mnomb
Comienzo
k[pos].n_pas←D2
Fin_mnpas
Comienzo
25
Escribir („introduzca nueva fecha_expedicion: aaaa mm dd separado por
espacio‟)
Fin_mfex
Comienzo
k[pos].orig←o
Fin_mdor
Comienzo
Fin_mcva
Comienzo
26
Valife (y, m, d, f1, f2, f3) {validación de fechas}
Fin_mdim
Comienzo {Modifica_principal}
Leer (pmod)
Si pos≠0 entonces
Comienzo
Leer (mo)
En_caso_de mo hacer
Fin_en_caso_de
Fin_Si
leer_tecla
27
Fin_Modifica
Si w≠0 entonces
Modifica (w, p)
Leer_tecla
Fin_verim
PROCEDIMIENTO venci (entradas nac, y, m, a1, m1: max; variable sis, ven:
logi ) {verifica si hay fechas vencidas para n_vige y reporte}
Comienzo
Fin_venci
Comienzo
Comienzo
Comienzo
28
nac←1
venz[S]←indi
fin_1_Si
Comienzo
nac←2
venz[S]←indi
fin_2_Si
Fin_desde
Fin_n_exp
Comienzo
Comienzo
venc[S]←indi
Fin_desde
Fin_n_CV
Comienzo
29
Comienzo
vedi[S]←indi
Fin_desde
Fin_n_DI
Comienzo
Comienzo
Comienzo
Fin_Si
Fin_desde
Fin_total_vi
Limpiar_pantalla
leer_tecla
30
Comienzo
Si w≠0 entonces
N_vige (y, m, p)
Leer_tecla
Fin_verino
FUNCIÓN Indm (entrada K: rcap; variable lista: clien_T): max {encuentra el índice
del elemento menor}
Variables imi, indi: rcap
Comienzo
imi←1
Si (lista[indi].n_pas)<(lista[imi].n_pas) entonces
imi←indi
Indm←imi
Fin_Indm
Comienzo
Comienzo
31
aux2[me]←lista[me]
lista[me]←lista[K]
lista[K]←aux2[me]
Fin_desde
Fin_Seleccs
Limpiar_pantalla
Seleccs (list)
leer_tecla
Fin_Lorden
Si w≠0 entonces
Lorden (p)
Leer_tecla
Fin_verior
Comienzo
Limpiar_pantalla
32
Escribir („ingrese nombre_apellidos a eliminar‟)
Leer (nel)
Si pos≠0 entonces
Comienzo
k[pos].nom_ap←‟eliminado‟; k[pos].n_pas←0
Fin_Si
leer_tecla
Fin_Elimi
Si w≠0 entonces
elimi (w, p)
Leer_tecla
Fin_veriel
33
PROCEDIMIENTO sumaVZ (y, m: max; k: clien_T; variable sumvz, sumex: rgs;
vig: vigent) {suma pasaportes venezolanos y extranjeros}
Variables S: rcap; a1, t1, nac: max; indi, sis: logi
Comienzo
sumvz←0; sumex←0
comienzo
a1←k[S].f_exp[1]; t1←k[S].f_exp[2]
Comienzo
Vig[S]←NOT indi
fin_1_Si
Comienzo
Vig[S]←NOT indi
fin_Si_2
fin_desde
Fin_sumaVZ
Comienzo
sumcv←0
34
Desde S←1 hasta capcid hacer
Comienzo
fin_desde
Fin_sumaCV
Comienzo
sumdi←0
Comienzo
fin_desde
Fin_sumaDI
PROCEDIMIENTO sumaRV (entradas vig, vig2, vig3; variable sumvi: rgs) {suma
recaudos vigentes}
Variable S: rcap
Comienzo
sumvi←0
35
Comienzo
Incrementar (sumvi)
fin_desde
Fin_sumaRV
Limpiar_pantalla
escribir („REPORTE‟)
ir_xy (15, 7); escribir („clientes con pasaporte extranjero‟, ex) ir_xy
leer_tecla
Fin_Reporte
Si w≠0 entonces
36
Reporte (y, m, p)
Leer_tecla
Fin_veriep
Comienzo
Comienzo
q←s+2
Fin_desde
Fin_Lpas
Comienzo
Comienzo
q←s+2
Fin_desde
Fin_Lori
Comienzo
37
Desde S←1 hasta capcid hacer
Comienzo
q←s+2
Fin_desde
Fin_Lnom
Comienzo
Comienzo
q←s+2
ir_xy (39, q)
comienzo
fin_2_desde
Fin_1_desde
Fin_Lexp
Comienzo
Comienzo
q←s+2
ir_xy (51, q)
38
2_desde F←1 hasta 3 hacer
comienzo
fin_2_desde
Fin_1_desde
Fin_Lcva
Comienzo
Comienzo
q←s+2
ir_xy (63, q)
comienzo
fin_2_desde
Fin_1_desde
Fin_Ldim
Limpiar_pantalla
Lpas (p)
Lori (p)
39
Lnom (p)
Lexp (p)
Lcva (p)
Ldim (p)
leer_tecla
Fin_Listado
Si w≠0 entonces
Listado (p)
Leer_tecla
Fin_verili
PROCEDIMIENTO Salir
Comienzo
Ir_xy (20,19)
leer_tecla
Fin_salir
Comienzo
Repetir
Limpiar_pantalla
40
Ir_xy (20,9); escribir („presione una de estas teclas‟)
Leer (opción)
„s‟: Salir
Si_no
Comienzo
fin
Fin_En_caso_de
Hasta_que opción=‟s‟
Fin_Menu2
PROCEDIMIENTO MenuP
Variables opción: op; w, y, m, d, dow: max; k: clien_T
Comienzo
w←0
repetir
41
limpiar_pantalla
operativo de la computadora}
TOURSVEN, Bienvenidos‟)
leer (opción)
„s‟. Salir
Si_no
Comienzo
fin
Fin_En_caso_de
42
hasta_que opción=‟s‟
Fin_MenuP
MenuP
Fin_Servicios_Turismo
Es correcto.
Para todas las entradas que no satisfacen las precondiciones, el
programa termina y produce una salida que refleja el hecho de que ha
ocurrido un error en la entrada.
Es correcto
Para todas las entradas que no se ajusten a las precondiciones, el
programa indica el tipo de error de entrada y concede al usuario la
oportunidad de corregirlo y continuar.
43
insertar letras al principio de cada nombre y apellido, que puede llevar números en
otra parte si es necesario. Se muestra un mensaje invitando a teclear el tipo de
datos correcto.
44
Bonett Borges 4825316 E 2009 11 2010 11 2010 10
Franco 01 01 15
45
Gómez Grandi Ana 11320101 V 2010 07 2010 12 2010 06
26 05 14
46
OBJETIVO 8 PROGRAMA CODIFICADO
El programa está escrito en lenguaje TURBO PASCAL versión 7.0
BIBLIOGRAFÍA
47