/* * 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