Halla la moda de los números de una cifra de una matriz */ CONST

Anuncio
/*
* Halla la moda de los números de una cifra de una
matriz
*/
CONST
N MaxLong=9
N NFilas=24, NColumnas=18, NCapas=5
TIPOS
N TablaN[0..9]
N TMatrizC[1..NCapas, 1..NFilas, 1..NColumnas]
ALGORITMO Moda_09(E TMatrizC m; S B hay; S N moda)
VAR
N i, j, k
TablaN cuentas = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }
INICIO
// contar ocurrencias
PARA i=1 HASTA NCapas HACER
PARA j=1 HASTA NFilas HACER
PARA k=1 HASTA NColumnas HACER
SI m[i,j,k]>=1 Y m[i,j,k]<=9 ENTONCES
// para evitar el error de rango
cuentas[m[i,j,k]] = cuentas[m[i,j,k]]+1
FINSI
FINPARA
FINPARA
FINPARA
// buscar el mayor
moda = cuenta[0]; hay = VERDADERO
PARA i= 1 HASTA 9 HACER
SI cuenta[i] > moda ENTONCES
moda = cuenta[i]; hay = VERDADERO
SINOSI cuenta[i]==moda ENTONCES
hay = FALSO
FINSI
FINPARA
DEVOLVER moda
FIN
/*
* Halla la moda de los números de una matriz
* 1er. nivel de refinamiento
*/
ALGORITMO Moda_Z(E TMatrizZ m; S B hay; S Z moda)
INICIO
Inicializar contadores
PARA cada valor de m HACER
Buscar valor en tabla de contadores
SI está en la tabla
incrementar en 1 su frecuencia
SINO
anotar número con frecuencia 1
incrementar en 1 el número de números encont.
FINSI
FINPARA
moda actual es el primer número encontrado
PARA cada número encontrado HACER
SI frec moda actual < frec núm actual ENTONCES
hay moda
moda actual = núm actual
SINOSI frec moda actual = frec núm actual
no hay moda
SINOSI
FINPARA
FIN
/* 2do. nivel de refinamiento */
CONST
N NFilas=24, NColumnas=18, NCapas=5
N Tamaño = NCapas*NFilas*NColumnas
TIPOS
Z TMatriz[1..NCapas, 1..NFilas, 1..NColumnas]
REGISTRO TNumero
Z num
N frec
FINREGISTRO
1
TNumero TContadores[1..Tamaño]
REGISTRO TCuentas
TContadores cuentas
N ultimo
FINREGISTRO
Tamaño
ALGORITMO Moda_Z(E TMatriz m; S B hay; S Z moda)
ALGORITMO N Posicion(E N n; E TCuentas c)
// devuelve posición de “n” en “c[]” ó 0 si no está
VAR
N pos; B esta
INICIO
pos = 1; esta = FALSO
MIENTRAS (pos<=c.ultimo) Y NO esta HACER
SI c.cuentas[pos].num==n ENTONCES
esta = VERDADERO
SINO
pos = pos+1
FINSI
FINMIENTRAS
SI NO esta ENTONCES
pos = 0
FINSI
DEVOLVER pos
FIN
VAR
TCuentas ocurr
// ocurrencias de cada número
N i, j, k
// índices
N pos
// posición número en “cuentas”
INICIO
ocurr.ultimo = 0
PARA i=1 HASTA Tamaño HACER
ocurr.cuentas[i].num = 0
ocurr.cuentas[i].frec = 0
FINPARA
// anotar frecuencias
PARA i=1 HASTA NCapas HACER
PARA j=1 HASTA NFilas HACER
PARA k=1 HASTA NColumnas HACER
pos = Posicion(m[i,j,k], cuentas)
SI pos==0 ENTONCES
// nuevo número distinto
ocurr.ultimo = ocurr.ultimo+1
ocurr.cuentas[ocurr.ultimo].num = m[i,j,k]
ocurr.cuentas[ocurr.ultimo].frec= 1
SINO
// número ya encontrado previamente
ocurr.cuentas[pos].frec =
ocurr.cuentas[pos].frec+1
FINSI
FINPARA
FINPARA
FINPARA
// buscar el más frecuente (podría ser una función)
moda = ocurr.cuentas[1].num
frec = ocurr.cuentas[1].frec
hay = VERDADERO
PARA i=2 HASTA Tamaño ocurr.ultimo HACER
SI frec < ocurr.cuentas[i].frec ENTONCES
moda = ocurr.cuentas[i].num
frec = ocurr.cuentas[i].frec
hay = VERDADERO
SINOSI frec==ocurr.cuentas[i].frec ENTONCES
hay = FALSO
FINSI
FINPARA
DEVOLVER moda
FIN
Descargar