You are on page 1of 17

Algoritmos y Estructuras de Datos- Apuntes teóricos Prof. Lic.

María Gabriela Cerra


Año 2010

ARCHIVOS

 Introducción.

Hasta el momento se presentaron diferentes estructuras de datos, cada una de ellas


clasificadas de acuerdo a distintos criterios. Sin embargo, todas las estructuras tienen una
particularidad en común, son internas y temporales, es decir, son definidas en un algoritmo y
ocupan memoria RAM, se utilizan en ejecución y todos los valores contenidos en ellas se pierden, a
lo sumo, cuando el algoritmo termina de ejecutarse.
La memoria interna o RAM de una computadora es denominada memoria principal y sus
principales características son:
a) Tiene capacidad limitada
b) Es memoria volátil ya que al apagar la computadora o al cortarse la luz, se pierde la información
que en ella reside.
c) Es memoria electrónica, por lo cual su velocidad de acceso es muy elevada (memoria de acceso
aleatorio)

Para determinados problemas es necesario disponer de un tipo de estructura de datos que


permita guardar su información en soporte no volátil o temporal (digamos en disco, cinta, etc.), y de
esa forma preservarla aunque el programa finalice.
La memoria secundaria, auxiliar o externa se refiere a medios de almacenamiento que
están ubicados fuera de la memoria RAM, y que son capaces de retener información luego de que
un programa finaliza o luego de apagar la computadora, como por ejemplo: disco rígido, diskette,
cinta, cd, etc. . Dichos dispositivos secundarios almacenan información en medios magnéticos
(disco rígido, cintas, diskettes, etc.) o medios ópticos (cd, zip, dvd, etc.), esto hace mucho más lenta
su operación. La velocidad de acceso a la memoria afecta notablemente la eficiencia de un
algoritmo. El tiempo de acceso a memoria RAM está en el orden de nanosegundos (10-9 seg), en
tanto que el acceso a disco rígido está medido en milisegundos (10-3 seg).

Las estructuras de datos que se asocian con un dispositivo de memoria auxiliar permanente
donde almacenan la información se denominan archivos.
Usaremos archivos:
- cuando la cantidad de datos que manipula el programa es muy grande y no hay suficiente
espacio en la RAM
- cuando el resultado o la salida de un programa sirva de entrada para otro programa, por lo cual
es necesario guardarlo en forma permanente
- cuando la carga sucesiva de datos se torna engorrosa, pesada y lleva demasiado tiempo, por lo
cual conviene guardarla en forma permanente

Definimos entonces:

Un archivo es una colección de datos del mismo tipo relacionados entre sí, almacenados
en una unidad de memoria secundaria, con un determinado diseño o estructura.

Para dar diseño a los archivos se usan los registros: físicamente un archivo se almacena
como una sucesión de datos estructurados por el diseño de un registro. La información se guarda
con el formato especificado por el registro, y se recupera con ese mismo formato. De esta manera,
Algoritmos y Estructuras de Datos- Apuntes teóricos Prof. Lic. María Gabriela Cerra
Año 2010

un registro será la mínima unidad de información transferible entre un archivo y un programa. Así
podemos decir que “un conjunto de registros con ciertos aspectos en común, y organizados para
algún propósito particular, constituyen un archivo”.

 Organización de los archivos.

La organización de un archivo define la manera en que los registros se distribuyen en el


almacenamiento secundario:
1- secuencial
2- indexado o directo
3- particionado o secuencial indexado

Un archivo secuencial consiste de un conjunto de registros almacenados consecutivamente,


de manera que para acceder al n-ésimo registro, se debe acceder previamente a los (n – 1)
anteriores. Los registros se graban en forma consecutiva en el orden que se ingresan, y se recuperan
en el mismo orden.
Un archivo indexado está formado por un conjunto de registros donde el ordenamiento
físico no se corresponde con el ordenamiento lógico; esto es, se recuperan por su posición dentro
del archivo (o por clave ) sin necesidad de recorrer los anteriores.
Un archivo particionado utiliza estructuras de datos auxiliares para permitir un acceso
pseudo-directo y combina las dos técnicas anteriores. Se agrupan registros, donde cada grupo se
accede directamente (por posición o clave), y dentro de cada grupo los registros se recuperan
secuencialmente (ej. La guía telefónica: voy directamente a la letra de comienzo del apellido, y a
partir de allí busco uno a uno hasta encontrar el apellido).

Según el modo en que se organizan los registros dentro de los archivos, se consideran 2
técnicas de acceso: secuencial y directa. El acceso secuencial permite acceder a los registros uno a
continuación del otro sin saltear ninguno. El acceso directo permite obtener un registro determinado
sin acceder a sus predecesores.

Características de un archivo

TAMAÑO: se refiere a la cantidad de registros que tiene el archivo y al espacio que ocupa el
mismo en memoria.
Espacio = tamaño de un registro * cantidad total de registros del archivo

ACTIVIDAD: se refiere a determinar con qué frecuencia se usa el archivo y cuántos


registros del mismo se utilizan.

CRECIMIENTO: es el tamaño que se prevee que puede tener el archivo al cabo de su vida
útil, en cuanto a la cantidad de registros.

LUGAR DE RESIDENCIA: se refiere al lugar donde se almacena el archivo, y depende


específicamente del tamaño del archivo, de su actividad, crecimiento y del método de acceso. (por
ej. en cinta se guardan los arch. grandes, de baja actividad y gran crecimiento).

ORGANIZACION: se refiere a cómo se organiza el lugar de residencia o almacenamiento.


Secuencial: se guarda un registro a continuación del otro; Indexado: hay un campo clave o índice
por medio del cual se accede al registro en forma directa y por consiguiente no debe haber un orden
Algoritmos y Estructuras de Datos- Apuntes teóricos Prof. Lic. María Gabriela Cerra
Año 2010

en su almacenamiento; Particionado: se divide el archivo en subconjuntos identificados por nombre,


dentro de los cuales se organizan los registros secuencialmente.

TECNICAS DE ACCESO: se refiere a qué método de acceso se usa para recuperar los datos
del archivo. Secuencial: se procesa un registro detrás del otro sin saltear ninguno; Directo: se lee o
graba por clave o índice el registro deseado independientemente de los otros.

Todo archivo de organización secuencial se accede por métodos secuenciales, y los de


organización directa admiten tanto una técnica como la otra.

Archivos de organización secuencial.

 Declaración de archivos.

Por ser estructuras de datos compuestas, los archivos serán declarados en la zona de tipos
definidos por el usuario. Al archivo se lo identifica por un nombre genérico y debe declararse en
base a un registro que lo estructure.

Ejemplo:

Tipos estructurados

LIBRO = registro
TITULO: CARACTER 30
NRO: ENTERO 5
AUTOR :CARACTER 39;
finregistro
ARCH1= archivo de organización secuencial de registro LIBRO

variables

BIBLIO: ARCH1
Reg: LIBRO

Así definimos que vamos a usar un archivo de nombre BIBLIO almacenado en dispositivo
secundario, cuyos datos fueron organizados bajo el formato del registro LIBRO.

Físicamente podemos imaginarlo de la siguiente forma:

título nro autor título nro autor ........ EOF

separación entre registros marca de fin de archivo

La información está estructurada por el diseño del registro LIBRO. Sólo puede guardarse y
recuperarse usando ese diseño de registro.
Algoritmos y Estructuras de Datos- Apuntes teóricos Prof. Lic. María Gabriela Cerra
Año 2010

 Operaciones básicas sobre archivos.

Las operaciones elementales para trabajar con archivos son:


• Vincular o relacionar el archivo físico (que está almacenado en memoria auxiliar) con el
nombre lógico dado dentro del algoritmo
• Abrir un archivo para procesarlo
• Cerrar el archivo luego de terminar de operar con él
• Leer los datos almacenados en el mismo o recuperarlos
• Grabar los nuevos datos en un archivo o modificar los ya existentes

- Asignación de archivos

En un dispositivo de memoria auxiliar se pueden almacenar un gran número de archivos.


Para trabajar con los ellos el Sistema Operativo usa tablas de direcciones que indican donde
comienza cada archivo, y guardan información referente a los mismos (FAT).
Dentro del algoritmo se hace referencia en forma indirecta al archivo físico utilizando un
nombre lógico denominado archivo lógico. El archivo lógico se corresponde con una variable
definida en el algoritmo. El archivo físico es el que está almacenado en memoria auxiliar. Antes de
que el algoritmo pueda operar sobre el archivo físico, el Sistema Operativo debe recibir
instrucciones para establecer un enlace entre el nombre lógico que usa el algoritmo y el archivo
físico.

Asignar ( nombrelógico, nombrefísico)

La instrucción de Asignación permite que el Sistema Operativo sea capaz de encontrar el


archivo en el dispositivo de almacenamiento.

Ejemplo: Asignar ( BIBLIO, ‘C:\ biblioteca.dat’)

- Apertura de archivos

Si bien para trabajar con un archivo el primer paso es asignarlo, esta operación no es
suficiente para operar con dicho archivo. Se debe realizar la apertura del mismo indicando el tipo de
operaciones que se van a realizar sobre él: solo lectura (consulta) o escritura (grabado o creación).
Los lenguajes de programación poseen instrucciones específicas para tal fin. En pseudocódigo la
usaremos así:

Abrir ( nombrelógicoarchivo ) tipo de operación

Marca de EOF
1º registro 2º registro ……

puntero de direccionamiento
Algoritmos y Estructuras de Datos- Apuntes teóricos Prof. Lic. María Gabriela Cerra
Año 2010

La apertura de un archivo establece una posición corriente en el mismo (llamada puntero de


direccionamiento, que es una variable que contiene la dirección del registro actual) la cual indica el
dato que va a ser procesado. Es un manejo interno del Sistema Operativo y los lenguajes proveen
instrucciones para su manejo. Dichas instrucciones nos permiten poner en actividad el archivo, es
decir posicionarnos en el primer registro y prepararlo para ser procesado (ya sea de consulta o de
grabación).

Ejemplos:

Abrir (BIBLIO) entrada * si vamos a consultarlo


Abrir (BIBLIO) salida * si vamos a grabarlo/crearlo

- Cierre de archivos

Una vez finalizado el trabajo con el archivo debe ser cerrado, lo cual determina la
desaparición de la posición corriente o puntero de direccionamiento y saca de actividad al archivo.
En el caso de estar usándolo para grabar datos, el cierre del archivo provoca que se agregue
automáticamente al final del mismo una marca especial, llamada de Fin de Archivo (EOF: end of
file).

Cerrar (nombrelógicoarchivo)

Ejemplo: Cerrar (BIBLIO)

- Lectura de archivos

Para consultar los datos que tiene almacenado el archivo usaremos un procedimiento que
nos permite recuperar la información desde el dispositivo secundario, de a un registro por vez.
La instrucción es:

Leer (nombrelógicoarchivo, nombreregistro)

Marca de EOF
1º registro 2º registro ………

puntero antes puntero después de leer


de leer

Lo que produce esta instrucción es que el Sistema Operativo se ubique en la posición


corriente del archivo físico (en el dispositivo de almacenamiento secundario) y lleve a la memoria
RAM los datos allí almacenados y los cargue o asigne a la variable de tipo registro. Luego el
programa trabajará con el contenido del registro campo a campo. Automáticamente se incrementa
la posición corriente del archivo, de tal forma de quedar accesible ahora el siguiente dato.

Ejemplo: Leer ( BIBLIO, REG)


Algoritmos y Estructuras de Datos- Apuntes teóricos Prof. Lic. María Gabriela Cerra
Año 2010

La mínima unidad de información que se puede transferir desde un archivo físico a


memoria RAM es un registro, y viceversa. Es imposible querer recuperar un campo solo o grabar un
par de campos: la transferencia es de un registro completo en ambos sentidos.
Todos los lenguajes proveen procedimientos específicos de lectura de datos, donde se pasan
como parámetros el archivo y el registro a cargar (ambos por referencia).

- Escritura de un archivo

Para grabar datos en dispositivo auxiliar usaremos la operación de escritura de datos, que
también nos permitirá almacenar de a un registro por vez.

Grabar ( nombrelógicoarchivo, nombreregistro)

Marca de EOF
1º registro 2º registro ………

puntero antes puntero después de grabar


de grabar

Ej: Grabar ( BIBLIO, REG)

Lo que produce esta instrucción es la transferencia de los datos cargados en el registro REG
de la memoria RAM, al dispositivo secundario donde reside el archivo BIBLIO, en la posición
corriente del mismo. También automáticamente se incrementa la posición corriente del archivo,
quedando accesible el próximo lugar a donde grabar el siguiente dato.
Todos los lenguajes proveen procedimientos específicos de escritura de archivos, a los
cuales se les pasa como parámetros el archivo ( por referencia ) y el registro (por copia).

- Detección del fin del archivo

Usaremos una función que nos permitirá detectar el fin de datos del archivo.

EOF( nombrelógicoarchivo)

Devuelve verdadero si el puntero de direccionamiento apunta a la marca de fin de archivo y


falso en caso contrario. Es decir, nos habilita a leer un registro cuyo contenido sea de datos válidos.
Cuando se abre un archivo, el puntero de direccionamiento apunta al primer registro, que es el nº 0.
Luego de cada operación de lectura/escritura, el puntero pasa en forma automática al registro de la
posición siguiente.
La función EOF debe ser usada antes de leer un registro.

Ej: EOF(archi)

En cada lenguaje se implementa de distinta manera, pero siempre el archivo se pasa como
parámetro por referencia.
Algoritmos y Estructuras de Datos- Apuntes teóricos Prof. Lic. María Gabriela Cerra
Año 2010

- Archivos como parámetros

Los archivos pueden ser pasados como parámetros de funciones y procedimientos, con el
cuidado de que siempre sean pasados por referencia (no deseamos crear una copia en la RAM de
un archivo que almacena grandes cantidades de datos, no??!!!!)

Ejemplos de operaciones con archivos secuenciales

**** CREACIÓN DE UN ARCHIVO de películas

Programa uno;

Tipos estructurados

PELI= registro
NRO : ENTERO 3
TITULO : CARACTER 30
GENERO : CARACTER 20
Finregistro

VID = archivo de org. secuencial de diseño PELI

variables
regis: PELI /* variable de tipo registro para las películas*/
video: VID /* archivo de películas*/

Hacer
ASIGNAR ( video, ‘C:\peliculas.dat’) /*relación entre arch. Lógico y físico*/

ABRIR (video) SALIDA

IMPRIMIR: ‘Ingrese título de una película’


LEER: regis. tit /* se lee desde teclado el título de una película*/
REPETIR MIENTRAS (regis.tit <> 'zzzzz')
LEER: regis.num, regis.gen /* se ingresan género y número de película*/
GRABAR (VIDEO, REGIS) /* se graba el registro en el arch. físico*/
IMPRIMIR:’ ingrese título de otra película’
LEER: regis.tit
FINREPETIRMIENTRAS
CERRAR(VIDEO)
FinHacer
FinPrograma.

**** CONSULTAR
Se procesa el archivo de películas para contabilizar las películas dramáticas e imprimir los títulos de
todas las películas en stock
Algoritmos y Estructuras de Datos- Apuntes teóricos Prof. Lic. María Gabriela Cerra
Año 2010

Programa segundo;

Tipos estructurados

PELI = regsitro
NRO : ENTERO 3
TITULO : CARACTER 30
GENERO : CARACTER 20
Finregistro

VID= arch. De org. secuencial de diseño PELI

Variables
video: VID
regis: PELI
contdrama: entero 3
Hacer
ASIGNAR( VIDEO , ‘C:\ peliculas.dat’)
ABRIR (VIDEO) ENTRADA
Contdrama:=0 /*contador de películas dramáticas*/

REPETIR MIENTRAS (NOT EOF(VIDEO)) /* verif. de existencia de datos válidos*/

LEER (VIDEO, REGIS)


Si ( REGIS.GENERO = ‘drama’) entonces
Contdrama:= contdrama +1
finsi
IMPRIMIR: REGIS.TITULO /* se imprimen los títulos de todas las pelis */
FINREPETIRMIENTRAS
CERRAR(VIDEO)
IMPRIMIR: ‘El total de películas dramáticas es:’, contdrama
FinHacer
FinPrograma.

**** MODIFICAR
Aclaración: las operaciones de agregar, borrar registros y modificarlos se hacen usando un archivo
auxiliar, ya que al ser archivos secuenciales no hay forma de volver a reposicionarse en el registro
leído (pues el puntero de direccionamiento se pasa automáticamente al siguiente culminada la
lectura del registro actual).

Ejemplo 1: Modifica el precio de los productos incrementándolos en un 5%

Programa tresA;
Tipos estructurados

MAES= registro
PROD1 : ENTERO 2
STOCKAC : ENTERO 3
PRECIO : REAL 5,2
Algoritmos y Estructuras de Datos- Apuntes teóricos Prof. Lic. María Gabriela Cerra
Año 2010

Finregistro

STOCK = arch. De org. secuencial de diseño MAES /* Archivo a actualizar */

STOCKNUE = arch. de org secuencial de diseño MAES /*Arch. nuevo actualizado */

Variables
STO: stock
NUEVO: stocknue
Ma: maes
Sa: maes

Hacer
ASIGNAR (STO , ‘kiosco.dat’)
ASIGNAR (NUEVO , ‘salida.dat’ )

ABRIR (STO) ENTRADA


ABRIR (NUEVO) SALIDA

REPETIR MIENTRAS (NOT EOF (STO))

LEER (STO, MA) /*lee un reg de stock , le modif. precio y lo graba en nuevo*/
SA.PROD1:= MA.PROD1
SA.STOCKAC:= MA.SATOCKAC
SA.PRECIO:= MA.PRECIO * 1.05
GRABAR (NUEVO, SA)

FINREPETIRMIENTRAS
CERRAR(STO)
CERRAR(NUevo)
FinHacer
FinPrograma.

Ejemplo 2: Modifica un archivo existente con datos de un archivo de detalle y lo graba en uno
nuevo

Programa tresB;
Tipos estructurados

MAES= registro
PROD1 : ENTERO 2
STOCKAC : ENTERO 3
PRECIO : REAL 5,2
Finregistro

STOCK = arch. De org. secuencial de diseño MAES /* Archivo a actualizar */

DET = registro
PROD2 : ENTERO 2
Algoritmos y Estructuras de Datos- Apuntes teóricos Prof. Lic. María Gabriela Cerra
Año 2010

CANTVEN : ENTERO 3
finregistro

VENTAS = arch. De org. secuencial de diseño DET /* Archivo con cuyos datos se
actualiza el archivo STOCK */

STOCKNUE = arch. de org secuencial de diseño MAES /*Arch. nuevo actualizado */


Variables
STO: stock
VEN: ventas
NUEVO: stocknue
Ma: maes
Sa: maes
Deta: det
Sigue:carácter 1

Hacer
ASIGNAR( STO , ‘kiosco.dat’)
ASIGNAR( VEN , ‘movimientos.dat’ )
ASIGNAR(NUEVO , ‘salida.dat’ )

ABRIR (STO) ENTRADA


ABRIR (NUEVO) SALIDA

REPETIR MIENTRAS (NOT EOF (STO))

LEER (STO, MA) /*lee un reg de stock y lo busca en el arch de ventas*/


SIGUE:=’S’
ABRIR (VEN) ENTRADA
REPETIR MIENTRAS (NOT EOF (VEN)) AND (SIGUE=’S’ )
LEER (VEN, DETA)
/*si encuentra el producto actualiza el stock y graba en arch nuevo*/
SI (MA.PROD1 = DETA.PROD2) ENTONCES
SA.PROD1:= MA.PROD1
SA.STOCKAC:= MA.SATOCKAC – DETA.CANTVEN
SA.PRECIO:= MA.PRECIO
GRABAR (NUEVO, SA)
SIGUE:=’N’
FINSI
FINREPETIRMIENTRAS
SI (SIGUE =’S’) ENTONCES /* si no hay ventas, graba el reg sin modificar*/
SA:= MA
GRABAR (NUEVO, SA)
FINSI
CERRAR(VEN)
FINREPETIRMIENTRAS
CERRAR(STO)
CERRAR(NUevo)
FinHacer
FinPrograma.
Algoritmos y Estructuras de Datos- Apuntes teóricos Prof. Lic. María Gabriela Cerra
Año 2010

* AGREGAR REGISTROS Copia todos los registros del archivo original a uno nuevo y le
agrega los nuevos registros al final.

Programa cuatro;

Tipos estructurados

PELI= registro
NRO : ENTERO 3
TITULO : CARACTER 30
GENERO : CARACTER 20
Finregistro

VID = archivo de org. secuencial de diseño PELI


NUE= arch. De org. Secuencial de diseño PELI

variables
num : ENTERO 3 /* variable donde se lee el número de la película */
tit : CARACTER 30 /* variable donde se lee el título de la película */
gen : CARACTER 20 /* variable donde se lee el género de la película */
regis: PELI /* variable de tipo registro para las películas*/
video: VID /* archivo de películas*/
nuevo: NUE

Hacer
ASIGNAR ( video, ‘C:\peliculas.dat’) /*relación entre arch. Lógico y físico*/
ASIGNAR (nuevo , ‘C:\pelisnuevas.dat’)
ABRIR (video) ENTRADA
ABRIR (nuevo) SALIDA
REPETIR MIENTRAS (NOT EOF (video))

LEER (video, regis) /*lee un reg del video y lo graba en nuevo*/

GRABAR (NUEVO, regis)

FINREPETIRMIENTRAS
CERRAR (video)

/*A continuación de los anteriores, se agregan los registros nuevos al archivo Nuevo*/

IMPRIMIR: ‘Ingrese título de una película’


LEER: regis. tit /* se lee desde teclado el título de una película*/
REPETIR MIENTRAS (regis.tit <> 'zzzzz')
LEER: regis.num, regis.gen /* se ingresan género y número de película*/
GRABAR (NUEVO, REGIS) /* se graba el registro en el arch. físico*/
IMPRIMIR:’ ingrese título de otra película’
LEER: regis.tit
FINREPETIRMIENTRAS
Algoritmos y Estructuras de Datos- Apuntes teóricos Prof. Lic. María Gabriela Cerra
Año 2010

CERRAR(NUEVO)
FinHacer
FinPrograma.

* BORRAR REGISTROS Se copian a un archivo nuevo todos los registros que deben
permanecer en el archivo, exceptuando los que se eliminan

Programa cinco;

Tipos estructurados

PELI= registro
NRO : ENTERO 3
TITULO : CARACTER 30
GENERO : CARACTER 20
Finregistro

VID = archivo de org. secuencial de diseño PELI


NUE= arch. De org. Secuencial de diseño PELI

variables
num : ENTERO 3 /* variable donde se lee el número de la película */
tit : CARACTER 30 /* variable donde se lee el título de la película */
gen : CARACTER 20 /* variable donde se lee el género de la película */
regis: PELI /* variable de tipo registro para las películas*/
video: VID /* archivo de películas*/
nuevo: NUE

Hacer
ASIGNAR ( video, ‘C:\peliculas.dat’) /*relación entre arch. Lógico y físico*/
ASIGNAR (nuevo , ‘C:\pelisnuevas.dat’)
ABRIR (video) ENTRADA
ABRIR (nuevo) SALIDA
REPETIR MIENTRAS (NOT EOF (video))

LEER (video, regis) /*lee un reg del video y lo graba en nuevo si no es de


*/ género policial */
SI (regis.genero <> ‘policial’) ENTONCES
GRABAR (NUEVO, regis)
FINSI
FINREPETIRMIENTRAS
CERRAR (video)
CERRAR (nuevo)
Finhacer
Finprograma.

La desventaja de usar archivos secuenciales radica en la necesidad de usar archivos auxiliares en


caso de modificación, alta y baja de registros.
Archivos aleatorios o de organización indexada o de acceso directo
Algoritmos y Estructuras de Datos- Apuntes teóricos Prof. Lic. María Gabriela Cerra
Año 2010

Los archivos de organización indexada o directa almacenan sus registros o datos en


posiciones físicas NO consecutivas, por lo cual para acceder a sus elementos se lo hace por posición
o clave.
Las operaciones a aplicar sobre archivos de acceso directo son la mismas que se
mencionaron para archivos secuenciales, más un conjunto específico de instrucciones que permiten
posicionarse en un registro determinado.

- Asignación de archivos

Asignar ( nombrelógico, nombrefísico)

- Apertura de archivos

Se debe realizar la apertura del mismo indicando el tipo de operaciones que se van a realizar
sobre él: solo lectura (consulta) o escritura (grabado: modificación o creación). Los lenguajes de
programación poseen instrucciones específicas para tal fin. En pseudocódigo la usaremos así:

Abrir ( nombrelógicoarchivo ) tipo de operación

Marca de EOF
1º registro 2º registro ……

puntero de direccionamiento

Ejemplos:

Abrir (BIBLIO) entrada * si vamos a consultarlo


Abrir (BIBLIO) salida * si vamos a crearlo
Abrir (BIBLIO) entrada/salida * si vamos a modificarlo

- Cierre de archivos

Cerrar (nombrelógicoarchivo) ej. Cerrar(BIBLIO)

- Lectura de archivos

Leer (nombrelógicoarchivo, nombreregistro) ej. Leer(BIBLIO, reg)

- Escritura de un archivo

Grabar ( nombrelógicoarchivo, nombreregistro) ej. Grabar(BIBLIO,reg)

- Detección del fin del archivo

EOF( nombrelógicoarchivo) ej. EOF(BIBLIO)

- Posicionamiento en un registro determinado


Algoritmos y Estructuras de Datos- Apuntes teóricos Prof. Lic. María Gabriela Cerra
Año 2010

Permite posicionar el puntero de direccionamiento en un registro determinado. El número de


registro debe ser un valor entero entre 0 y el (tamaño – 1) del archivo (cantidad total de registros del
mismo).

Ir ( nombrelógicoarchivo, nro_de_registro)

Ej. Ir (BIBLIO, 5) mueve el puntero al 6º registro pero no lo procesa.


(recordar que numera desde 0)

- Obtención de la posición del registro actual

Es una función que devuelve el número del registro corriente, es decir el que está apuntado
por el puntero de direccionamiento.

Posición (nombrelógicoarchivo)

Ej. Posición (BIBLIO)  retorna 3 si está apuntando al 4º registro (recordar que numera
desde 0 )

- Tamaño del archivo

Es una función que retorna la cantidad total de registros del archivo (valor entero entre 0 y
N). Si devuelve 0 significa que el archivo existe pero no tiene registros (archivo vacío).

Tamaño (nombrelógicoarchivo) Ej. Tamaño (BIBLIO)

Ejemplos de operaciones con archivos aleatorios

Se quiere realizar un programa que realice la creación, altas, bajas, modificaciones y


consultas de un archivo de estudiantes de un instituto. La información que se cuenta en el archivo
es la siguiente: Nombre del alumno, domicilio y edad.

programa accesoAleatorio;

tipos estructurados
Domicilio= registro
calle : cadena 20
numero: entero 4
ciudad: cadena 40
finregistro
Alumno = registro
nombre : cadena 20
edad : entero 2
dom : Domicilio
borrado: carácter 2
finregistro
ArchivoAlumnos = archivo de org. directa de diseño Alumno;

var
Algoritmos y Estructuras de Datos- Apuntes teóricos Prof. Lic. María Gabriela Cerra
Año 2010

archi : ArchivoAlumnos
opcion : carácter 1

procedimiento Crear ( REF archi: ArchivoAlumnos);


{Permite crear un nuevo archivo}
variables
alu: Alumno

Hacer
ABRIR (ARCHI) salida

IMPRIMIR: ‘INGRESE NOMBRE ALUMNO, ZZZ PARA FINALIZAR’


LEER: alu. nombre
REPETIR MIENTRAS (alu. nombre <> ‘ZZZ’)

Imprimir: 'Edad: '


Leer: alu.edad
Imprimir: ‘Domicilio: calle’
Leer: alu.dom.calle
Imprimir: ‘Número’
Leer: alu.dom.numero
Imprimir: ‘Ciudad’
Leer: alu.dom.ciudad
Alu.borrado:=’no’
GRABAR(ARCHI, alu)
Imprimir: ‘ingrese otro apellido’
Leer: alu.nombre
Finrepetir mientras
CERRAR(ARCHI)
Finhacer
FinProcedimiento

procedimiento Modificar (REF archi: ArchivoAlumnos);


variables
alu: Alumno;
nom: Cadena 20;
hacer
IMPRIMIR: 'Introduzca el nombre del alumno a modificar’
LEER: nom
ABRIR (archi) ENTRADA/SALIDA
esta:= false;
REPETIR MIENTRAS (NOT (EOF(archi))) and (not esta)
LEER (archi, alu)
SI ( alu.nombre = nom) ENTONCES
Esta:= true
IMPRIMIR: 'Introduzca la edad nueva'
LEER: alu.edad
i.= POSICION (archi) /* obtiene nro registro actual*/
Algoritmos y Estructuras de Datos- Apuntes teóricos Prof. Lic. María Gabriela Cerra
Año 2010

IR (archi, i – 1 ); /* se reposiciona en el registro anterior*/


GRABAR (archi, alu); /* graba el registro modificado*/
FINSI
FINREPETIRMIENTRAS
CERRAR(archi)
Finhacer
finprocedimiento

procedure Consultar(var archi: ArchivoAlumnos); /* ES IGUAL AL VISTO PARA Arch.


SECUENCIAL*/
{Permite consultar los datos de un alumno}
begin
......
end;

procedimiento Eliminar(var archi: ArchivoAlumnos); /*hace eliminación lógica*/


{Permite eliminar los datos de un alumno en forma lógica}
variables
alu: Alumno;
nom: Cadena 20;
hacer
IMPRIMIR: 'Introduzca el nombre del alumno a borrar’
LEER: nom
ABRIR (archi) ENTRADA/SALIDA
esta:= false;
REPETIR MIENTRAS (NOT (EOF(archi))) and (not esta)
LEER (archi, alu)
SI ( alu.nombre = nom) ENTONCES
Esta:= true
Alu.borrado:=’si’ /* borrado lógico por marca*/
i.= POSICION (archi) /* obtiene nro registro actual*/
IR (archi, i – 1 ); /* se reposiciona en el registro anterior*/
GRABAR (archi, alu); /* graba el registro modificado*/
FINSI
FINREPETIRMIENTRAS
CERRAR(archi)
Finhacer
finprocedimiento

procedimiento Agregar (REF archi: ArchivoAlumnos);


{Permite agregar un nuevo alumno al archivo}
variables
alu: Alumno

Hacer
ABRIR (ARCHI) entrada/salida

IR (ARCHI, Tamaño (archi)) /* se posiciona al final del archivo, después del último registro,
recordar que numera los registros desde 0*/
Algoritmos y Estructuras de Datos- Apuntes teóricos Prof. Lic. María Gabriela Cerra
Año 2010

IMPRIMIR: ‘INGRESE NOMBRE ALUMNO, ZZZ PARA FINALIZAR’


LEER: alu. nombre
REPETIR MIENTRAS (alu. nombre <> ‘ZZZ’)

Imprimir: 'Edad: '


Leer: alu.edad
Imprimir: ‘Domicilio: calle’
Leer: alu.dom.calle
Imprimir: ‘Número’
Leer: alu.dom.numero
Imprimir: ‘Ciudad’
Leer: alu.dom.ciudad
Alu.borrado:=’no’
GRABAR(ARCHI, alu)
Imprimir: ‘ingrese otro apellido’
Leer: alu.nombre
Finrepetir mientras
CERRAR(ARCHI)
Finhacer
FinProcedimiento

hacer { Comienzo del programa principal}


Asignar (archi, 'c:\alumnos50.dat');
Repetir

Imprimir: 'Menú Principal:'


Imprimir : '1.- Agregar Alumno'
Imprimir : '2.- EliminarAlumno'
Imprimir : '3.- Modificar Alumno'
Imprimir : '4.- Consultar Alumno'
Imprimir : '5.- Crear archivo '
Imprimir : '6.- Salir del sistema'
Imprimir : 'Elija una opción:'
CASO opcion
Opcion= '1': Agregar(archi)
Opcion= '2': Eliminar(archi)
Opcion= '3': Modificar(archi)
Opcion= '4': Consultar(archi)
Opcion= '5': Crear (archi)
fincaso
hasta (opcion ='6' )
finhacer
finprograma.

Bibliografía de referencia:
- Fundamentos de Programación. Algoritmos y estructuras de datos. Luis Joyanes Aguilar.
- Programación en Turbo/Borland Pascal 7.0, Luis Joyanes Aguilar
- Algoritmos, datos y programas. Conceptos básicos, De Giusti, Madoz y otros.

You might also like