Aloritmos
long num_reg_desb; long num_reg_disp_desb; long tam_indice_maestro; Existen algunos métodos que nos ayudarán a llevar a cabo esta tarea: int crear_indice(string &) int subir_indice_maestro() Por otrolado están las rutinas de acceso público para operar sobre los archivos: Constructor() crear() abrir() vaciar() buscar() Por último están un conjunto de rutinas que sirven de soporte a las anteriores para poder extraer y depositar información en los archivos en forma de bloques.
El método crear se encarga de crear un archivo maestro para la organización ISAM a partir de otro archivo de entrada.Podemos llamar entonces al archivo de entradas como: entrada y nuestro archivo maestro: maestro. De aquí salen un archivo maestro, un archivo de desborde y un archivo de índices. crear() 1. abrir entrada 2. num_reg_ppal = 0 3. R.M. (!entrada.eof()) 3.1 LEER_SEC(entrada, R) 3.2 reg_ppal.data = R, reg_ppal.disp=falso, reg_ppal.prox=-1 3.3 r = ESCRIBIR_PPAL(maestro, num_reg_ppal, ®_ppal, 1) 3.4 Si(r = Verdadero) 3.4.1 num_reg_ppal ++ 4. tam_ppal = num_reg_ppal 5. cerrar entrada 6. num_blq_ppal = techo(num_reg_ppal/num_reg_blq) 7. abrir desborde 8. reg_desb.disp = verdadero 9. num_reg_desb = num_reg_ppal * 0.20 10. R.P. (n_disp = 0; n_disp < num_reg_desb; disp++) 10.1 r=ESCRIBIR_PPAL(desborde, n_disp, reg_desb, 1) 10.2 Si (r == Verdadero) 10.2.1 pila_disponible.push(n_disp) 11.cerrardesborde 12.crear_indices(maestro)
crear_indices() Son necesarios: reg_indice reg_maestro 1. niveles = techo (log (num_blq_ppal) / log (tam_buffer / tam_reg_indice)) ? 2. Construir un arreglo de nombres de índices (nom_indices) 3. R.P. (i=0, j=0; i=0; i--) 5.1 reg_leidos = LEER_REG_IND(nom_indice[i], iblq, vec_reg_ind, num_reg_blq_ind) 5.2 j=0 5.3 encontro = falso 5.4 R.M. ((j < reg_leidos -1) &&encontro == falso) 5.4.1 Si (dato < vec_reg_ind[j+1].clave) 5.4.1.1 encontro = verdadero 5.4.1.2 iblq = vec_reg_ind[j].ind_bloque si no 5.4.1.3 j++ 5.5 Si (encontro = falso) 5.5.1 iblq = vec_reg_ind[j].ind_bloque En este punto obtenemos el indice en el Archivo Maestro. // Preparación del Registro para ser almacenado 7. Crear arreglo de registros del tamaño del bloque (v_reg). 8. reg_leidos =leer(maestro, iblq, v_reg, num_reg_blq) // Verificar si hay una localidad disponible en el area principal // También se determina el sitio donde va almacenado i=0; encontro = falso; num_disp = 0; pos = reg_leidos – 1; libre = -1; band = falso
R.M. (i < reg_leidos) 9.1Si (v_reg[i].disp = verdadero ^ libre = -1) 9.1.1 libre = i 9.2Si (dato.clave < v_reg[i].data.clave ^ band = falso) 9.2.1 pos = i – 1...
Regístrate para leer el documento completo.