Corte de Control¶
Estructura del Corte de Control¶
Primero vamos a ver la estructura generica del algoritmo (o el esqueleto):
Definimos un registro que tiene 3 claves:
reg = Registro
clave3: N(8)
clave2: N(4)
clave1: N(2)
clave0: N(2)
campo1: ("Si", "No")
campo2: N(2)
campo3: AN(50)
fin Registro
Nota: de esta forma la clave3 es la de mayor peso, seguido por la clave2, y luego por la clave1.
Ahora el archivo y la variable para recorrer:
Arch: Archivo de reg ordenado por clave3, clave2, clave1 y clave0
r: reg
Las variables que se van a ocupar son:
- Resguardo de clave (Reg1, Reg2, Reg3)
- Contadores y Acumuladores
La subaccion corte_n va a tener las siguientes acciones:
subaccion corte_n es
llamada al corte_n-1
Emitir resultados del nivel
Acumular totales al nivel superior
Reiniciar totales de este nivel
Resguardar la nueva clave
fin subaccion
Nota: la primera accion no se va a realizar si estamos en el corte de menor peso.
Esqueleto del algoritmo:
Algoritmo
Inicializar_archivos
Inicializar_totalizadores
Inicializar_resguardos
Mientras NFDA(Arch) Hacer
Tratar_corte
Tratar_registro
Leer_registro
Fin Mientras
Corte_3
Emitir_totales
cerrar_archivo
Fin accion
Ahora la subaccion Tratar_corte:
Subaccion Tratar_Corte es
Si r.clave3 <> Reg3 entonces
Corte_3
sino
Si r.clave2 <> Reg2 entonces
Corte_2
sino
Si r.clave1 <> Reg1 entonces
Corte_1
fin si
fin si
fin si
fin subaccion
Nota: las subacciones: Inicializar, tratar_registro y Emitir_totales, no se escribieron dado a que dependen del enunciado.
Un ejemplo¶
Ahora un ejemplo con el mismo archivo, con el siguiente enunciado:
"Se pide mostrar cuantas entradas existen en el archivo, discriminando por la clave1, clave2, clave3 y total general."
Accion ejemplo es
Ambiente
reg = Registro
clave3: N(8)
clave2: N(4)
clave1: N(2)
clave0: N(2)
campo1: ("Si", "No")
campo2: N(2)
campo3: AN(50)
fin Registro
Arch : archivo de reg ordenado por clave3, clave2, clave1 y clave0
r : reg
Reg3: N(8)
Reg2: N(4)
Reg1: N(2)
contt, cont3, cont2, cont1: entero
subaccion inicializar es
Abrir E/(Arch)
leer(Arch, r)
contt := 0
cont3 := 0
cont2 := 0
cont1 := 0
Reg3 := r.clave3
Reg2 := r.clave2
Reg1 := r.clave1
Fin subaccion
subaccion corte_1 es
Esc("Para el ", Reg1, " existen: ", cont1)
cont2 := cont2 + cont1
cont1 := 0
Reg1 := r.clave1
fin subaccion
subaccion corte_2 es
corte_1
Esc("Para el ", Reg2, " existen: ", cont2)
cont3 := cont3 + cont2
cont2 := 0
Reg2 := r.clave2
fin subaccion
subaccion corte_3 es
corte_2
Esc("Para el ", Reg3, " existen: ", cont3)
contt := contt + cont3
cont3 := 0
Reg3 := r.clave3
fin subaccion
Subaccion tratar_corte es
Si r.clave3 <> Reg3 entonces
corte_3
sino
si r.clave2 <> Reg2 entonces
corte_2
sino
si r.clave1 <> Reg1 entonces
corte_1
fin si
fin si
fin si
fin subaccion
subaccion tratar_registro es
cont1 := cont1 + 1
Fin subaccion
subaccion emitir_totales es
Esc("El total general de entradas es: ", contt)
fin subaccion
Algoritmo
Inicializar
Mientras NFDA(Arch) hacer
tratar_corte
tratar_registro
leer(Arch, r)
Fin Mientras
corte_3
emitir_totales
cerrar(arch)
fin accion
Otro ejercicios¶
Manteniendo el mismo archivo pero cambiando un poco el enunciado:
- Se pide mostrar cuantas entradas que tengan el campo1 = "Si" existen en el archivo, discriminando por la clave1, clave2, clave3 y total general.
- Se pide mostrar cuantas entradas que tengan existen en el archivo, discriminando por la clave1, clave2 y clave3.
- Se pide mostrar cuantas entradas que tengan existen en el archivo, discriminando por la clave2, clave3 y total general.
- Se pide mostrar cuantas entradas poseen un numero mayores o iguales a 50 en el campo2 y cuantas entradas (en el campo2) se tienen menores a 50 del archivo, discriminando por la clave1, clave2, clave3 y total general.
- Generar un archivo con el siguiente formato: Clave3, clave2, total de Si y total de No, para el archivo anterior explicado.