Вы находитесь на странице: 1из 23

Estructura de datos

En programacin, una estructura de datos es una forma de organizar un conjunto de datos elementales con el objetivo de facilitar su manipulacin. Un dato elemental es la mnima informacin que se tiene en un sistema. Una estructura de datos define la organizacin e interrelacin de stos y un conjunto de operaciones que se pueden realizar sobre ellos. Las operaciones bsicas son:

Alta, adicionar un nuevo valor a la estructura. Baja, borrar un valor de la estructura. Bsqueda, encontrar un determinado valor en la estructura para realizar una operacin con este valor, en forma secuencial o binario (siempre y cuando los datos estn ordenados).

Otras operaciones que se pueden realizar son:


Ordenamiento, de los elementos pertenecientes a la estructura. Apareo, dadas dos estructuras originar una nueva ordenada y que contenga a las apareadas.

Cada estructura ofrece ventajas y desventajas en relacin a la simplicidad y eficiencia para la realizacin de cada operacin. De esta forma, la eleccin de la estructura de datos apropiada para cada problema depende de factores como la frecuencia y el orden en que se realiza cada operacin sobre los datos.

Tipos simples
Como su nombre indica son los tipos bsicos en Pascal. Son los ms sencillos y los ms fciles de aprender. Por todo esto, sern en los que nos centremos. Los tipos simples ms bsicos son: entero, lgico, carcter y real. Y la mayora de los lenguajes de programacin los soportan, no como ocurre con los estructurados que pueden variar de un lenguaje a otro.

Tipos estructurados
Mientras que una variable de un tipo simple slo referencia a un elemento, los estructurados se refieren a colecciones de elementos. Las colecciones de elementos que aparecen al hablar de tipos estructurados son muy variadas: tenemos colecciones ordenadas que se representan mediante el tipo array, colecciones sin orden mediante el tipo conjunto, e incluso colecciones que contienen otros tipos, son los llamados registros.

Concepto y caractersticas de la memoria

Memoria Esttica
Es la memoria que se reserva en el momento de la compilacin antes de comenzara ejecutar el programa. Los objetos son creados al iniciar el programa y destruidos al finalizar el mismo. Mantienen la misma localizacin en memoria durante todo el transcurso del programa hasta que son destruidos.

Memoria dinmica
La memoria dinmica se refiere a aquella memoria que no puede ser definida ya que no se conoce o no se tiene idea del nmero de la variable a considerarse, la solucin a este problema es la memoria dinmica que permite solicitar memoria en tiempo de ejecucin, por lo que cuanta ms memoria se necesite, ms se solicita al sistema operativo. El sistema operativo maneja la memoria gracias al uso de punteros, por la misma naturaleza del proceso nos impide conocer el tamao de la memoria necesaria en el momento de compilar.

Arreglos Unidimensionales
Un arreglo unidimensional es un tipo de datos estructurado que est formado de una coleccin finita y ordenada de datos del mismo tipo. Es la estructura natural para modelar listas de elementos iguales. El tipo de acceso a los arreglos unidimensionales es el acceso directo, es decir, podemos acceder a cualquier elemento del arreglo sin tener que consultar a elementos anteriores o posteriores, esto mediante el uso de un ndice para cada elemento del arreglo que nos da su posicin relativa. Para implementar arreglos unidimensionales se debe reservar espacio en memoria, y se debe proporcionar la direccin base del arreglo, la cota superior y la inferior. REPRESENTACION EN MEMORIA Los arreglos se representan en memoria de la forma siguiente: x: array [1..5] of integer

Arreglos Bidimensionales
Este tipo de arreglos al igual que los anteriores es un tipo de dato estructurado, finito ordenado y homogneo. El acceso a ellos tambin es en forma directa por medio de un par de ndices. Los arreglos bidimensionales se usan para representar datos que pueden verse como una tabla con filas y columnas. La primera dimensin del arreglo representa las columnas, cada elemento contiene un valor y cada dimensin representa una relacin

Para determinar el nmero total de elementos en un arreglo bidimensional usaremos las siguientes frmulas: RANGO DE RENGLONES (R1) = Ls1 - (Li1+1) RANGO DE COLUMNAS (R2) = Ls2 - (Li2+1) No. TOTAL DE COMPONENTES = R1 * R2 REPRESENTACION EN MEMORIA POR COLUMNAS

Registros o Estructuras

Que es un registro?
Un registro es una estructura heterognea de datos, denominados campos y a los que accedemos por nombre. Al igual que cualquier otro dato, el tipo registro (Record) antes de poder se utilizado debe ser declarado en la seccin de tipos. La nica operacin (a parte de la lectura) que se puede realizar con una variable registro como tal es la asignacin, es decir, se pueden copiar todos los campos de una variable registro a otra variable registro del mismo tipo. Adems un registro puede ser pasado como parmetro a una funcin o procedimiento.

Declaracin de registros
La sintaxis para declarar un registro es la siguiente: Type Nombre_reg = record Lista id1 : Tipo1; Lista id2: Tipo2; Lista id3: Tipo3; . . . Lista idN: TipoN; End; Nombre_reg: Nombre de la estructura o registro. Lista id: Lista de uno o ms nombres de campos que componen el registro. Tipo: Puede ser cualquier tipo de dato estndar o definido por el usuario.

Representacin Grafica de un Registro


(*Un registro se suele representar grficamente en funcin de sus campos *)

Empleado

Tipo cadena Ejemplo: Type Empleado = record

Tipo Entero

Tipo cadena

Tipo real

Nombre: String [30]; Edad: Integer; Domicilio: String [40]; Salario: Real; End;

Utilizacin de la Sentencia With


La tarea de escribir el selector de campo completo cada vez que se referencia un campo de un registro es tediosa, sobre todo si el nmeros es grande. La sentencia WITH permite referenciar el nombre del registro en su cabecera y posteriormente para llamar a algn campo slo se necesita el nombre del campo y no el selector de campo completo, con el nombre del registro (por ejemplo, Edad en vez de Cliente).

Sintaxis:

With Camp o registrodo Begin (* Sentencias que hacen referencia a los campos del registro *) End; 7

Camp o registro: Nombre o nombres del registro. Sentencias: Relacionadas con los campos. Ejemplo: Program Ejemplo; Type Empleado = record Nombre: String [20]; Edad: Integer; Empresa: String [30]; End; Var Socio: Empleado; Deducciones: Real; Begin With Socio d o Begin Readln (Nombre); Neto:= Salario - Deducciones; Writeln (Empresa); End; End.

Tipos de Registros
8

Registros Anidados En los casos anteriores todos los campos de los registros eran tipos de datos simples, cadenas o arrays. Es posible declarar un tipo de registro con campos que sean otros registros. Un registro con uno o ms campos que son tipo registro se llama registro jerrquico o registro anidado. Los campos que componen un registro pueden tener cualquier tipo y, en particular, pueden ser registros. Ejemplo TYPE Tipo Cadena20 = array[1..20] of char; Tipo Cadena10 = array[1..10] of char; Fecha = record Mes : TipoCadena10; Dia : 1..31; Ao : 1900..2000 End; Registro Personal = RECORD Nombre : Tipo Cadena20; Nacimiento : Fecha; Edad, Dependientes : integer; Sueldo Hora : real End; Var Empleado: Registro Personal; Para acceder a los campos que se encuentran dentro de un registro anidado (o registro jerrquico) se aade el identificador de campo detrs del selector del registro interno. Por ejemplo, (Empleado.Nacimiento.Mes) se refiere al primer campo del registro interno de tipo Fecha.

Almacenamiento de Datos en Pascal


Concepto de Archivo
Un archivo o fichero informtico es un conjunto de bits almacenado en un dispositivo. Un archivo es identificado por un nombre y la descripcin de la carpeta o directorio que lo contiene. Los archivos informticos se llaman as porque son los equivalentes digitales de los archivos en tarjetas, papel o microfichas del entorno de oficina tradicional. Los archivos informticos facilitan una manera de organizar los recursos usados para almacenar permanentemente datos en un sistema informtico.

Archivos de Texto
Un archivo de texto es simplemente uno que almacena cualquier texto, en un formato como ASCII o Unicode, con pocos o ninguno caracteres de control. La costumbre ha hecho que se nombren con la extensin de archivo .txt aunque pueden tener cualquier otra, a capricho del usuario (son vlidas y habituales: .inf, .80, .dat, .tmp, .prv, .hlp, .htm, etc.

En sistemas Unix las convenciones de nombres de archivos son ms relajadas. La extensin .txt se ha hecho popular en los ltimos tiempos, pero habitualmente el contenido del archivo se determina con programas que examinan los primeros bytes, como por ejemplo el comando "file".

Ventajas de almacenar datos en archivos


Los archivos informticos facilitan una manera de organizar los recursos usados para almacenar permanentemente datos en un sistema informtico. Los archivos de una computadora se pueden crear, mover, modificar, aumentar, reducir y borrar. Tambin un archivo es un documento donde uno introduce algn tipo de Dato para almacenar en un objeto que lo pueda leer o modificar como una computadora.

10

Comandos para manipular Archivos de Texto


Assign: asigna un nombre a la variable interna que representa el archivo adjunto o abierto en modo Append, el cual debe ser de tipo archivo. Esta llamada no abre el archivo, esta solo asigna un nombre a la variable del archivo, y marca el archivo como cerrado. Reset: Abre un archivo para lectura. Admite cualquier tipo de archivo. Rewrite: Abre un archivo para escribir en el. El archivo puede ser de cualquier tipo. Si la funcin Rewrite encuentra un archivo con el mismo nombre, este archivo es truncado a cero. Si no lo encuentra, simplemente es creado un nuevo. Write: Escribe el contenido de una variable en el archivo. Read: Lee uno o mas valores desde el archivo, y los almacena en la variable. si el archivo no es especificado, entonces se activara la entrada estndar desde el teclado. FileSize: Regresa el nmero total de registros en un archivo. Esta funcin no puede ser llamada con un archivo de tipo texto. Si el archivo esta limpio la funcin retorna cero. IOResult: Contiene el resultado de la ultima llamada a cualquier proceso de entrada o salida de datos, cuando la directiva de compilacin {$i} esta activa, invalidando el cheque de entrada y salida. Si ioresult es cero, la operacin fue completada correctamente. Si un valor diferente de cero es retornado quiere decir que ha ocurrido algn error. Erase: Elimina un archivo que no ha sido abierto de el disco. El archivo debe ser asignado con Assign, pero no debe ser abierto con Reset o Rewrite. Append: Abre un archivo en modo "adjuntar" o "append" a el proyecto sobre el que se esta trabajando. Cualquier informacin que se quiera escribir en el archivo tiene que ser adjuntada a la variable que contiene la informacin del archivo. Solo puede abrirse en modo "append" archivos de tipo texto. Despus de la llamada a Append, el archivo debe ser escrito en el disco. EOF: Regresa True o Verdadero si el puntero del archivo ha llegado a el final del archivo, o si el archivo esta limpio. EOLN: retorna Verdadero o True si el puntero a alcanzado el final de la lnea, el cual esta delimitado por el carcter ASCII 10, o si el final del archivo ha sido alcanzado. Esta funcin puede ser utilizada en archivo de tipo Text. Close: Cierra un Arhivo abierto. 11

Archivos Directos y Aleatorios


Un archivo de acceso directo esta formado por un conjunto de partes individuales que pertenecen al mismo tipo de datos. Cada uno de los componentes del archivo es llamado registro. Cada uno de los componentes de este tipo de archivos es accesible directamente. Los archivos de acceso directo son tambin llamados archivos con tipos o tipeados. A diferencia de los archivos secuenciales, los archivos tipeados no estan compuestos de lineas de caracteres, sino que se acomodan en registros con estructuras fijas. La longitud de los registros esta determinada por la cantidad de bytes que se necesitan para almacenar el tipo de datos que contendr el registro. Declaracin de un archivo Para declarar un archivo de acceso directo se realiza con las palabras reservadas FILE OF, su sintaxis es la siguiente: Variable Archivo: FILE OF Tipo Elementos; Esta declaracin se realiza en la seccin correspondiente a la declaracin de las variables. Ejemplo: PROGRAM Archivo_Tipeado; VAR Archivo : FILE OF Integer; BEGIN END.

Comandos para manipular Archivos Directos


Assign: asigna un nombre a la variable interna que representa el archivo adjunto o abierto en modo Append, el cual debe ser de tipo archivo. Esta llamada no abre el archivo, esta solo asigna un nombre a la variable del archivo, y marca el archivo como cerrado.
Ejemplo:

Program Example5; {Program para demostrar la funcin assign. }

Var F: text;

12

Begin Assign (F,''); Rewrite (f); { Los siguientes se pueden poner en cualquier archivo reorientacin de que la lnea de comandos.}

Writeln (f, 'Esto va a la salida estndar!'); Close (f); Assign (F,' Test.txt '); rewrite (f); writeln (f,' Esto no quiere ir a la salida estndar!'); close (f); End.

Reset: Abre un archivo para lectura. Admite cualquier tipo de archivo.


Program Example51; {Program para demostrar la function Reset.}

Function FileExists (Name: String): Boolean; Var F: File;

Begin {$i-} Assign (F, Name); Reset (F); {$I+} FileExists :=( IOResult=0) and (Name<>''); Close (f); End;

Begin If FileExists (Paramstr (1)) then Writeln ('Archivo Encontrado') Else Writeln ('Archivo no Encontrado'); End.

13

Rewrite: Abre un archivo para escribir en el. El archivo puede ser de cualquier tipo. Si la funcin Rewrite encuentra un archivo con el mismo nombre, este archivo es truncado a cero. Si no lo encuentra, simplemente es creado un nuevo.
Program Example52;

{Program to demonstrate the Rewrite function. }

Var F: File; I: longint;

Begin Assign (F,'Test.tmp'); {Create the file. Record size is 4} Rewrite (F, Sizeof (I)); For I: =1 to 10 do BlockWrite (F, I, 1); close (f); { F contains now a binary representation of 10 longints going from 1 to 10} End.

Write: Escribe el contenido de una variable en el archivo.


Write (VarArchivo, 'Prueba de archivos'); { Se hace lo mismo solo que ahora se especifica la variable del archivo y luego lo que se desea escribir}

Read: Lee uno o mas valores desde el archivo, y los almacena en la variable. si el archivo no es especificado, entonces se activara la entrada estndar desde el teclado.
Program Example50;

{Program to demonstrate the Read(Ln) function.}

Var S: String;

14

C: Char; F: File of char; Begin Assign (F,'ex50.pp'); Reset (F); C: ='A'; Writeln ('The characters before the first space in ex50.pp are : '); While not Eof (f) and (C<>' ') do Begin Read (F, C); Write (C); End; Writeln; Close (F); Writeln ('Type some words. An empty line ends the program.'); Repeat Readln (S); Until S=''; End.

FileSize: Regresa el nmero total de registros en un archivo. Esta funcin no puede ser llamada con un archivo de tipo texto. Si el archivo esta limpio la funcin retorna cero.
Program Example24;

{Program to demonstrate the FileSize function.}

Var F: File Of byte; L: File of Longint;

Begin Assign (F, paramstr (1)); Reset (F); Writeln ('File size in bytes: ', FileSize(F)); Close (F); Assign (L, paramstr (1));

15

Reset (L); Writeln ('File size in Longints: , FileSize(L)); Close (f); End.

IOResult: Contiene el resultado de la ultima llamada a cualquier proceso de entrada o salida de datos, cuando la directiva de compilacin {$i} esta activa, invalidando el cheque de entrada y salida. Si ioresult es cero, la operacin fue completada correctamente. Si un valor diferente de cero es retornado quiere decir que ha ocurrido algn error.
Ejemplo: Program Example IOResult; {Program to demonstrate the IOResult function. } Var F: text;

Begin Assign (f, paramstr (1)); {$i-} Reset (f); {$i+} If IOresult<>0 then Writeln ('File ', paramstr (1),' doesn't exist') Else Writeln ('File ', paramstr (1),' exists'); End.

Erase: Elimina un archivo que no ha sido abierto de el disco. El archivo debe ser asignado con Assign, pero no debe ser abierto con Reset o Rewrite.
Program Example20;

{ Program to demonstrate the Erase function. }

Var F : Text;

16

begin { Create a file with a line of text in it} Assign (F,'test.txt'); Rewrite (F); Writeln (F,'Try and find this when I''m finished !'); close (f); { Now remove the file } Erase (f); End.

Append: Abre un archivo en modo "adjuntar" o "append" a el proyecto sobre el que se esta trabajando. Cualquier informacin que se quiera escribir en el archivo tiene que ser adjuntada a la variable que contiene la informacin del archivo. Solo puede abrirse en modo "append" archivos de tipo texto. Despus de la llamada a Append, el archivo debe ser escrito en el disco.
Program Example3;

{ Program to demonstrate the Append function. }

Var f : text;

begin Assign (f,'test.txt'); Rewrite (f); { file is opened for write, and emptied }

Writeln (F,'This is the first line of text.txt'); close (f); Append(f); { file is opened for write, but NOT emptied. any text written to it is appended.} Writeln (f,'This is the second line of text.txt'); close (f); end.

EOF: Regresa True o Verdadero si el puntero del archivo ha llegado a el final del archivo, o si el archivo esta limpio.
Var T1,T2 : text;

17

C : Char;

begin { Set file to read from. Empty means from standard input.} assign (t1,paramstr(1)); reset (t1); { Set file to write to. Empty means to standard output. } assign (t2,paramstr(2)); rewrite (t2); While not eof(t1) do begin read (t1,C); write (t2,C); end; Close (t1); Close (t2); end.

EOLN: retorna Verdadero o True si el puntero a alcanzado el final de la lnea, el cual esta delimitado por el carcter ASCII 10, o si el final del archivo ha sido alcanzado. Esta funcin puede ser utilizada en archivo de tipo Text.
Program Example19;

{ Program to demonstrate the Eoln function. }

begin { This program waits for keyboard input. } { It will print True when an empty line is put in, and false when you type a non-empty line. It will only stop when you press enter.} While not Eoln do Writeln (eoln); end.

18

Close: Cierra un Arhivo abierto.


Program Example9;

{ Program to demonstrate the Close function. }

Var F : text;

begin Assign (f,'Test.txt'); ReWrite (F); Writeln (F,'Some text written to Test.txt'); close (f); { Flushes contents of buffer to disk, closes the file. Omitting this may cause data NOT to be written to disk.} end.

FilePos: Retorna la posicin el actual registro del puntero del archivo en el archivo. Esta funcin no puede ser llamada con el tipo de archivo text. Un error del compilador ser generado si esto es intentado.
Program Example23;

{ Program to demonstrate the FilePos function. }

Var F : File of Longint; L,FP : longint;

begin { Fill a file with data : Each position contains the position ! } Assign (F,'test.tmp'); Rewrite (F); For L:=0 to 100 do begin FP:=FilePos(F);

19

Write (F,FP); end; Close (F); Reset (F); { If all goes well, nothing is displayed here. } While not (Eof(F)) do begin FP:=FilePos (F); Read (F,L); if L<>FP then Writeln ('Something wrong: Got ',l,' on pos ',FP); end; Close (F); Erase (f); end.

Seek: define la posicin del puntero del archivo al registro deseado.


Program Example56;

{ Program to demonstrate the Seek function. }

Var F : File; I,j : longint;

begin { Create a file and fill it with data } Assign (F,'test.tmp'); Rewrite(F); { Create file } Close(f); FileMode:=2; ReSet (F,Sizeof(i)); { Opened read/write } For I:=0 to 10 do BlockWrite (F,I,1);

20

{ Go Back to the begining of the file } Seek(F,0); For I:=0 to 10 do begin BlockRead (F,J,1); If J<>I then Writeln ('Error: expected ' ,i,', got ',j); end; Close (f); end.

Truncate: Trunca el archivo abierto a la posicin del archivo actual.


Program Example71;

{ Program to demonstrate the Truncate function. }

Var F : File of longint; I,L : Longint;

begin Assign (F,'test.tmp'); Rewrite (F); For I:=1 to 10 Do Write (F,I); Writeln ('Filesize before Truncate : ',FileSize(F)); Close (f); Reset (F); Repeat Read (F,I); Until i=5; Truncate (F); Writeln ('Filesize after Truncate Close (f); end. : ',Filesize(F));

21

BlockWrite: Escribe registros desde el buffer al archivo. BlockRead: Esta funcin lee count o registros de un archivo
Program Example6;

{ Program to demonstrate the BlockRead and BlockWrite functions. }

Var Fin, fout : File; NumRead,NumWritten : Word; Buf : Array[1..2048] of byte; Total : Longint;

begin Assign (Fin, Paramstr(1)); Assign (Fout,Paramstr(2)); Reset (Fin,1); Rewrite (Fout,1); Total:=0; Repeat BlockRead (Fin,buf,Sizeof(buf),NumRead); BlockWrite (Fout,Buf,NumRead,NumWritten); inc(Total,NumWritten); Until (NumRead=0) or (NumWritten<>NumRead); Write ('Copied ',Total,' bytes from file ',paramstr(1)); Writeln (' to file ',paramstr(2)); close(fin); close(fout);

end.

22

Unidad Grafica

23