Fundamentos de Estructuras de Datos y Gestión de Archivos en Programación
Fundamentos de Estructuras de Datos y Gestión de Archivos
1. Registros (Records)
Registros (Records): Un registro o record sirve para agrupar distintos tipos de datos que deben estar relacionados entre sí. Por ejemplo, los datos de una persona: nombre, edad, etc.
1.1. La Sentencia WITH
La sentencia WITH permite referenciar el nombre del registro en su cabecera. Posteriormente, para acceder a un campo, solo se necesita el nombre del campo, evitando la necesidad de escribir el selector de campo completo junto con el nombre del registro.
1.2. Registros Anidados
Un registro que contiene uno o más campos que son, a su vez, de tipo registro, se denomina registro jerárquico o registro anidado.
2. Archivos (Files)
Un archivo (file) es una colección de datos relacionados entre sí que se encuentra almacenada en algún dispositivo de almacenamiento de una PC.
A diferencia de los arreglos (vectores) y matrices, los archivos se guardan en memoria secundaria, lo que garantiza que:
- Los datos contenidos en el archivo no se pierden cuando la PC se apaga.
- Además, los archivos son dinámicos, en el sentido de que no se establece de antemano la cantidad de datos que se van a almacenar.
Recordemos que los arreglos y matrices, cuyo tamaño se establece en tiempo de compilación, se almacenan en memoria principal.
2.1. Tipos de Archivos
Archivos de Texto (TXT)
Están conformados únicamente por caracteres.
Archivos Tipados (Con Tipo) o Binarios
También llamados archivos binarios, contienen datos de tipo simple o estructurado, tales como integer, real, record, etc., a excepción de otro tipo de archivos. Los archivos con tipos están estructurados en elementos o registros (record) cuyo tipo puede ser cualquiera.
Archivos Sin Tipo
Todos los archivos utilizados hasta ahora suponen algún tipo de estructura. Si no se conoce la estructura del registro, se debe utilizar un archivo sin tipo. Los archivos sin tipo son canales de bajo nivel, utilizados principalmente para acceso directo a cualquier archivo de disco, con independencia de su tipo y estructura.
2.2. Archivos de Acceso Secuencial (Con Tipo)
Dependiendo de la manera en que se acceden los registros de un archivo, este se clasifica como secuencial o como directo. En el caso de los archivos de acceso secuencial, para acceder al registro localizado en la posición N, se deben haber accedido los N-1 registros previos, siguiendo un orden secuencial.
3. Operaciones Fundamentales de Archivos
- La sentencia RESET
- Permite abrir un archivo que ya existe para su utilización.
- La sentencia REWRITE
- Crea y abre un archivo nuevo para ser utilizado.
- READ
- Se utiliza para leer el contenido del registro correspondiente.
- CLOSE
- Permite cerrar un archivo después de haber sido utilizado.
- EOF (End of File)
- La función
EOF(fin de archivo) devuelve el estado de un archivo. Es una función de tipo lógico que indica si el fin de archivo se ha encontrado; devuelveTRUEsi se encontró, yFALSEen caso contrario. - FILEPOS
- Obtenemos la posición del puntero dentro del archivo correspondiente.
- FILESIZE
- La función
FILESIZEnos devuelve el tamaño del archivo especificado en registros. Si el archivo está vacío, devuelve como resultado el número cero. La sintaxis es idéntica a la funciónFILEPOS. - SEEK
- Permite posicionarnos en un determinado registro del archivo, teniendo en cuenta que la numeración de los registros empieza en cero (0).
4. Estructuras de Datos Estáticas: Arreglos y Matrices
4.1. Arreglo (Vector)
A continuación, se presenta un ejemplo de programa que utiliza un arreglo para procesar datos:
Program ejemplo;
var
c: Array [1..5] of integer;
b: Array [1..5] of integer;
i1, i2: integer;
begin
writeln ('Ingrese valores:');
i2 := 0;
for i1 := 1 to 5 do
readln (c[i1]);
for i1 := 1 to 5 do
begin
if (c[i1] mod 2 = 0) and (c[i1] > 0) then
begin
i2 := i2 + 1;
b[i2] := c[i1]; (* Asumiendo que 'vacio' se refiere al arreglo 'b' *)
end;
end;
end.
4.2. Matrices
Ejemplo de programa que utiliza una matriz para encontrar la temperatura máxima:
program ej;
var
m: Array[1..12, 1..31] of integer;
i, j, max: integer;
begin
max := m[1, 1];
for i := 1 to 12 do
for j := 1 to 31 do
if m[i, j] > max then
max := m[i, j];
writeln ('Ingrese mes y día:');
readln (i, j);
writeln ('m[', i, ',', j, '] es la temperatura del día.');
writeln ('La temperatura máxima del año es: ', max);
end.