F
8
Direccin Lgica
Primer
Elemento
ABRIR(F) // F = fopen (NombreArchivo, modo);
// F.open(NombreArchivo, ios::out);
0
1
2
...
i-1
...
N-1
0
52
104
...
52*(i-1)
...
52*(N-1)
Elemento de i
de la fila F
Direccin Fisica
Direccin fsica del
elemento i de F
UNMSM-FISI 2008-2 E. Datos. Prof. G. A. Salinas A. 20
2. Primitivas de Acceso
V
1
V
2
V
3
...
V
i
...
V
N
F
8
Direccin Lgica
Primer
Elemento
DIRECCION LOGICA. El direccionamiento consiste en la Posicin
que ocupa el registro en el archivo
0
1
2
...
i-1
...
N-1
0
52
104
...
52*(i-1)
...
52*(N-1)
Elemento de i
de la fila F
Direccin Fisica (Bytes)
Direccin fsica del
elemento i de F
DIRECCION FISICA. El direccionamiento consiste en el ESPACIO
ocupado (bytes) por el registro en el FILE
UNMSM-FISI 2008-2 E. Datos. Prof. G. A. Salinas A. 21
2. Primitivas de Acceso
V
1
V
2
V
3
...
V
i
...
V
N
F
8
Direccin Lgica
Primer
Elemento
Los ARCHIVOS en C usan direcciones fsicas
0
1
2
...
i-1
...
N-1
0
52
104
...
52*(i-1)
...
52*(N-1)
Elemento de i
de la fila F
Direccin Fsica(bytes)
Direccin fsica del
elemento i de F
CALCULO DE DIRECCION FISICA. Para posicionar el apuntador
en un registro especifico es necesario calcular la direccin fsica del
espacio ocupado por los REGISTROS ANTERIORES A L .
UNMSM-FISI 2008-2 E. Datos. Prof. G. A. Salinas A. 22
2. Primitivas de Acceso
V
1
V
2
V
3
...
V
i
...
V
N
F
8
Direccin Lgica
Primer
Elemento
Requiere definir: long int DirFisica, DirLogica;
0
1
2
...
i-1
...
N-1
0
52
104
...
52*(i-1)
...
52*(N-1)
Elemento de i
de la fila F
Direccin Fsica(bytes)
Direccin fsica del
elemento i de F
CALCULO DE DIRECCION FISICA.
DirFisica = DirLogica*TamaoRegistro en Bytes;
DirFisica = DirLogica*sizeof(REGISTRO);
UNMSM-FISI 2008-2 E. Datos. Prof. G. A. Salinas A. 23
2. Primitivas de Acceso
Permite poner el siguiente elemento. Esto es, AVANZA una posicin y
PONE o escribe el valor de V en direccin fsica.
PONER(F, V) // fwrite(&V, sizeof(TDV), 1, F);
// F.write(&V, sizeof(TDV));
fwrite(&V, sizeof(ALUMNO), 1, F);
Variable que desea
grabar
Archivo donde se desea
grabar
Cantidad de registros que
se desea grabar
LA funcion sizeof determina
el tamao en bytes del
registro ALUMNO
UNMSM-FISI 2008-2 E. Datos. Prof. G. A. Salinas A. 24
2. Primitivas de Acceso
Permite poner el siguiente elemento. Esto es, AVANZA una posicin y
TOMA o lee el valor y lo almacena en V.
TOMAR(F, V) // fread(&V, sizeof(TDV), 1, F);
// F.read(&V, sizeof(TDV));
fread(&V, sizeof(ALUMNO), 1, F);
Variable que desea leer o
tomar
Archivo de donde se
desea leer
Cantidad de registros que
se desea leer
LA funcion sizeof determina
el tamao en bytes del
registro ALUMNO
UNMSM-FISI 2008-2 E. Datos. Prof. G. A. Salinas A. 25
2. Primitivas de Acceso
Permite MARCAR el siguiente elemento. Esto es, AVANZA una posicin
y pone o escribe la marca de fin fila de en dicha posicin
V
1
V
2
V
3
F
8
Cabezal de
Lectura
Ultimo
elemento de la
fila
Marca de Fin
de fila
MARCAR(F, V) // fclose(F); // F.close( );
UNMSM-FISI 2008-2 E. Datos. Prof. G. A. Salinas A. 26
2. Primitivas de Acceso
Recordemos, cuando se abre un archivo en modo lectura o escritura, el
APUNTADOR se posiciona al INICIO del archivo y si se abre para
ANADIR el apuntador se posiciona al FINAL.
Cada vez que se realiza una
operacin de LECTURA o
ESCRITURA de cualquier tipo
de datos, el APUNTADOR del
archivo se mueve al FINAL de
dicho registro o dato, del tal
forma que se posiciona en el
SIGUIENTE REGISTRO.
La funcin fseek( ) permite reposicionar el apuntador
Es IMPORTANTE
asegurarse que el
apuntador se encuentre
en la posicin deseada
antes de realizar
cualquier operacin
UNMSM-FISI 2008-2 E. Datos. Prof. G. A. Salinas A. 27
2. Primitivas de Acceso
La funcin fseek( ) permite reposicionar el apuntador a una
direccin determinada.
Modo Nombre Operacin
0 SEEK_SET Cuenta desde el inicio del Archivo
1 SEEK_CUR Cuenta desde posicin actual del apuntador del archivo
2 SEEK_END Cuenta desde el final del archivo
fseek(FILE, DirFisica, PuntoReferencia);
fseek(F, DirFisica, SEEK_SET);
Punto de Referencia
Direccin fsica del registro
donde se desea posicionar
La variable de tipo FILE
donde se desea actuar
UNMSM-FISI 2008-2 E. Datos. Prof. G. A. Salinas A. 28
2. Primitivas de Acceso
La funcin ftell( ) permite conocer la posicin actual del apuntador
long int DirFisica;
DirFisica = ftell(FILE);
DirFisica = ftell(F);
Variable de tipo long int
Variable de Tipo FILE
Variable DirFisica
expresada en bytes
Esta funcin se utiliza para conocer la posicin actual del apuntador de un
archivo abierto. La posicin, DirFisica, se expresa en bytes contados desde
el inicio del FILE.
UNMSM-FISI 2008-2 E. Datos. Prof. G. A. Salinas A. 29
2. Primitivas de Acceso
La funcin rewind( ) permite posicionar el apuntador al inicio.
rebobinar (F)
rewind(FILE);
rewind(F);
Rebobinar
Variable de Tipo FILE
Pone el apuntador al
inicio del archivo
Esta funcin se utiliza para colocar el apuntador al inicio del archivo,
evitando el uso de la funcin fseek( ).
UNMSM-FISI 2008-2 E. Datos. Prof. G. A. Salinas A. 30
2. Primitivas de Acceso
La funcin rename( ) permite cambiar el nombre de un archivo.
renombrar (ALUMNO, NEOALUMNO)
rename(ALUMNO, NeoALUMNO);
Nuevo nombre del archivo,
puede incluir la ruta
Nombre anterior del archivo,
puede incluir la ruta
Esta funcin se utiliza para cambiar el nombre de un archivo indicando su
ruta. Es funcin se aplica cuando los archivos estn cerrados.
UNMSM-FISI 2008-2 E. Datos. Prof. G. A. Salinas A. 31
2. Primitivas de Acceso
La funcin remove( ) permite eliminar un archivo.
remover (ALUMNO)
remove(ALUMNO);
Nuevo nombre del archivo,
puede incluir la ruta
Nombre anterior del archivo,
puede incluir la ruta
Esta funcin se utiliza para eliminar un archivo indicando su nombre
indicando su ruta. Es funcin se aplica cuando los archivos estn cerrados.
UNMSM-FISI 2008-2 E. Datos. Prof. G. A. Salinas A. 32
2. Primitivas de Acceso
Predicado lgico que indica el estado de acceso al archivo. Si ULTIMO(F)
es VERDAD indica que se lleg al final del archivo y FALSO en otro caso.
V
1
V
2
V
3
F
8
Cabezal de
Lectura
ULTIMO(F)
Estado:FALSO
ULTIMO(F)
Estado:VERDAD
V
1
V
2
V
3
8
F
ULTIMO(F) // feof(F); // F.eof( );
UNMSM-FISI 2008-2 E. Datos. Prof. G. A. Salinas A. 33
3. Operaciones
Las operaciones a realizarse sobre una fila son:
CREAR.(Ingresar registros)
Crea una fila con un nmero determinado de elementos.
RECORRER. (Visualizar o mostrar registros)
Implica recorrer cada elemento de fila una nica vez.
BUSCAR.
Implica la localizacin de un elemento determinado utilizando un
dato clave (un valor o una posicin).
MEZCLA.
Dado dos filas ordenadas, con los elementos de dichas filas obtener
una tercera fila tambin ordenada.
UNMSM-FISI 2008-2 E. Datos. Prof. G. A. Salinas A. 34
5. Archivo de ndices
Mantener grandes archivos ordenados es COSTOSO
Para indexar generalmente se suele generar un ARCHIVO
AUXILIAR de INDICES. Existe varios mtodos: Utilizando
arboles binarios, archivos planos, etc. Veamos de Archivos
Planos.
UNMSM-FISI 2008-2 E. Datos. Prof. G. A. Salinas A. 35
5. Archivo de ndices
Implementacin de los archivos de ndices
Archivos de ALUMNOS
Archivo de ndices
Imaginemos ahora
que deseamos buscar
a un ALUMNO por
su APELLIDO
struct ALUMNO{
int Cod;
int Estado; //1: Valido, 0:
Invalido/ELIMINADO
char APat[20];
char AMat[20];
char Nom[20];
char Tel[10];
float Nota;
};
struct ALUINDEX{
char APat[20];
long Indice;
};
SOLUCIONES
- Bsqueda secuencial
- Ordenar por apellido
- Archivos de ndices
por apellido
UNMSM-FISI 2008-2 E. Datos. Prof. G. A. Salinas A. 36
5. Archivo de ndices
Implementacin de los archivos de ndices
Archivos de ALUMNOS
Archivo de ndices ordenado
[ABAD] [003]
[BARRAZA] [001]
[CALVO] [006]
[CERPA] [002]
[EBBEL] [004]
[FELIPE] [005]
[MORALES] [007]
[ZAVALA] [000]
[ZAVALA] [000]
[BARRAZA] [001]
[CERPA] [002]
[ABAD] [003]
[EBBEL] [004]
[FELIPE] [005]
[CALVO] [006]
[MORALES] [007]
UNMSM-FISI 2008-2 E. Datos. Prof. G. A. Salinas A. 37
5. Archivo de ndices
Implementacin de los archivos de ndices
Archivo de ndices ordenado, aqu
podemos buscar mas fcilmente
[ABAD] [003]
[BARRAZA] [001]
[CALVO] [006]
[CERPA] [002]
[EBBEL] [004]
[FELIPE] [005]
[MORALES] [007]
[ZAVALA] [000]
Direccin lgica
UNMSM-FISI 2008-2 E. Datos. Prof. G. A. Salinas A. 38
7. Esquema de Interaccin
ALU
Und.
Control
RAM
Disco
Duro
Proceso RECUPERAR (Tomar)
Proceso SALVAR (Poner)
UNMSM-FISI 2008-2 E. Datos. Prof. G. A. Salinas A. 39
8. BIBLIOGRAFIA
CORTEZ VASQUEZ, Augusto P.
2002 ESTRUCTURA DE DATOS Y ALGORITMOS. Universidad Ricardo
Palma, Lima.
SCHILDT, Herbert
1994 TURBO C/C++ 3.1 MANUAL DE REFERENCIA, McGRAW-HILL.
Madrid
www.conclase.com