Sunteți pe pagina 1din 33

Estructuras fundamentales de datos e introducción a la algoritmia.

Clasificación de los datos.

Enteros
Numéricos punto fijo
Reales
punto flotante

Carácter
Alfanuméricos
Simples Cadena

Lógicos
Puntero
Constantes
Variables

Continentes
Campos
Contenidos
Estáticas
Registros
Arreglos
Ficheros secuenciales
Datos

Estructurados
Ficheros secuenciales

Pila
Densas
Cola

Dinámicas Listas
Encadenadas Simple
O Doble
Enlazadas Circulares

Árboles

Estructuras estáticas: son aquellas cuyo tamaño y estructura queda fijado en tiempo de definición y
permanecen inalterables durante la ejecución del proceso en el que fueron declaradas.
Estructuras dinámicas: son aquellas cuyo tamaño u estructura puede variar en tiempo de ejecución y su
única limitación (tamaño máximo) está dado por el tamaño de la memoria que la soporta.

Página 1 de 33
Acciones estructuradas.

o Simple. Es la ejecución condicional de una acción.

SI condición ENTONCES
Acción;
FIN SI.
Primero se observa la certeza de la condición, si ésta conduce a una respuesta
cierta, la acción es ejecutada a continuación de la observación, la cual finaliza la
ejecución.

o Alternativa. Es la ejecución alternativa de una entre dos acciones.

SI condición ENTONCES
Acción1;
SINO
Acción2;
FIN SI.

Primero se observa la certeza de la condición, la cual es seguida de la acción1 si


la condición es cierta, o de la acción 2 si la condición es falsa.

o Selección múltiple. Es la ejecución condicional de una entre varias acciones.

SEGÚN indicador HACER


Valor1: acción1;
…………………
Valorn: acciónn;
Otros: acción n+1;
FIN SEGÚN.

La ejecución del texto provoca la búsqueda en la lista de los valores de aquél que
corresponde al valor observado por el indicador. Se ejecutará una de entre todas las
acciones enumeradas. La acción n+1 se asocia en todos los casos en los cuales el
indicador no pertenece al conjunto de todos los n valores explícitamente enumerados.

o Repetitivas. Es la ejecución múltiple de una sola acción.

1. Repetir. (post-test)

REPETIR
Acción;
HASTA QUE condicion.

la ejecución de este texto provoca sucesivamente la ejecución de la acción, a


continuación la observación de la condición y ejecuta la acción hasta que la
condición sea falsa. La acción se ejecuta por lo menos una vez.

2. Mientras. (pre-test)

MIENTRAS condición HACER


Acción;
FIN MIENTRAS.

La acción se ejecuta mientras la condicion sea verdadera. La acción se


ejecuta como mínimo 0 ≤ (mientras) ≤ N.

Página 2 de 33
3. Manejada por contador.

PARA Vc := Vi HASTA Vf , I HACER


Acción;
FIN PARA.

Vc es una variable de tipo numérico llamada variable de control.


Vi, Vf e I son variables de tipo numérico, constantes de tipo num o
expresiones aritméticas. Vi recibe el nombre de valor inicial, Vf valor final e I
es el incremento que se expresa cuando es distinto de 1, éste puede ppsitivo
o negativo, pero no cero.
Si el incremento es positivo: Vi < Vf.
Si el incremento es negativo: Vi > Vf.
Dentro del para no es correcto modificar el valor de la variable de control.
Cuando finaliza el para, Vc queda indefinido.

En el mientras y el repetir la variable condicional debe ser alterada dentro del


ciclo por instrucción del algoritmo, a diferencia del para que no puede ser
alterada dentro del ciclo.

Página 3 de 33
Secuencias

Concepto y características
Una secuencia es un conjunto de datos relacionados entre sí que deben cumplir con ciertas
características:
o Existencia del primer elemento de la secuencia: el acceso a este elemento, permite el
acceso posterior a los demás elementos de la secuencia.
o Relación de sucesión entre los elementos: todo objeto de la secuencia. salvo el último,
precede a uno de los demás elementos, su sucesor.
o Finitud: puede ser conocida o no. Puede estar dada por la cantidad de elementos o bien
por una marca de fin. Todas las secuencias deben ser finitas por lo que deben estar
acotadas por una condición de fin para evitar entrar en un ciclo infinito.
o Existencia del último elemento de la secuencia: debe estar definido un indicador de fin
de secuencia: el elemento final, permite detener la enumeración de la secuencia por la
observación de la característica de este elemento.
Declaración
Var
Sec: secuencia de caractéres;
V: caractér;
Sec: nombre de la secuencia.
V: variable con la que recorreremos la secuencia, accediendo a sus elementos de uno en uno.

Representación gráfica
Una secuencia suele representarse gráficamente de la siguiente forma:

Clasificación de las secuencias


Por su contenido:
Puras: todos los elementos son de la misma especie o tipo. Se caracteriza porque el
último elemento es tratado de igual forma que los demás. Este tipo de secuencia es
manejada con estructuras puras (post-test y manejada por contador)
Impuras: son aquellas secuencias donde existe un elemento extraño que no es tratado y
el cual indica el fin de la secuencia. En este caso, la secuencia se maneja con una
estructura del tipo pre-test.
Por la cantidad de elementos:
Definidas: se conoce el número de elementos de la secuencia. Puede ser tratada con
una estructura manejada por contador.
Indefinidas: cuando el número de elementos de la secuencia no es conocido. Por lo
tanto, la enumeración de ésta secuencia se detendrá cuando se cumpla la condición de
haber encontrado la marca de fin. En consecuencia, se utiliza una estructura pre-test.
Caracteristicas complementarias:

Orden: existe un orden cuando la relacion sucesora es estroicta entre el primer elemento y el
ultimo. Debe estar explicita en el planteo del problema.
Completitud: indica que entre elemento y su sucesor no existen ausencias. No se puede
suponer, tiene que estar definida en el planteo del problema, ademas puede estar
ordenada o no.

Página 4 de 33
Subsecuencias

Son secuencias de menor nivel que pertenecen a una secuencia mayor de la cual heredan su
caracteristicas. Se pueden presentar de dos maneras: en forma anidadas o enlazadas y en
forma incluidas o jerarquizadas.
Subsecuencias anidadas o enlazadas: son las palabras.
- Palabra con contenido: conjunto de caractéres distintos de blanco y de marca. Es una
secuencia impura.
- Palabra vacía: conjunto de caractéres blancos. Es una secuencia impura.
Subsecuencias incluidas o jerarquizadas: comparten todos los elementos. Un ejemplo es el
texto.

Algoritmos de secuencias puras e impuras


Acción Sec_Pura es Acción Sec_Impura es
Algoritmo Algoritmo
Iniciar_adquisición; Iniciar_adquisición;
Repetir Obtener_elemento;
Obtener_elemento; Mientras elemento<>marca hacer
Tratar_elemento; Tratar_elemento;
Hasta que elemento=último; Obtener_elemento;
FinAcción. FinMientras;
Tratamiento_final;
FinAcción.

Secuencia de caractéres
Conjunto de caractéres dispuestos en forma aleatoria y secuencial.

La máquina de caractéres
La máquina de caractéres es una máquina abstracta capaz de procesar las secuencias de
caractéres. Está compuesta por los siguientes elementos:
1. Una ventana: a través de la ventana se podrán observar los objetos que componen la
secuencia de caractéres, permitiendo el acceso de a uno por vez.
2. Un botón “arrancar”: la función de éste es colocar la cinta en la máquina para ser
tratada.
3. Un botón “avanzar”: mediante éste botón se podrá recorrer la secuencia, elemento a
elemento, siempre en la misma dirección (de izquierda a derecha), accediendo a ellos
de a uno por medio de la ventana. Luego de arrancar la secuencia, se la debe avanzar
una vez para que el primer elemento de la secuencia aparezca en la ventana.

Página 5 de 33
Acciones con secuencias
Arrancar la secuencia: Arr (Sec);
Avanzar la secuencia: Avz (Sec, V);
Entonces las acciones Iniciar_adquisición corresponde a arrancar la secuencia, y
Obtener_elemento sería avanzar la secuencia.
Para crear una secuencia se utiliza la misma acción que para arrancar una existente, pero hay
que tener en cuenta que la secuencia creada se debe cerrar para agregar al final de la misma
la marca de fin, de lo contrario el proceso de creación no concluirá perdiéndose así la totalidad
de los datos ingresados.
Arr (Sal); Crea una secuencia de nombre Sal, definida previamente en el ambiente.
Cerrar (Sal); Agrega la marca de fin a Sal y la almacena definitivamente.
Existen dos formas de controlar la finalización de una secuencia impura en la estructura pre-
test:
1. preguntando por la marca de fin, que podría ser “*”
Mientras (V<>”*”) hacer
2. utilizando el condicional No FDS (Nombre de Secuencia) - No Fin De Secuencia
Mientras No FDS (Sec) hacer

Tratamiento de secuencias de registros.

 Campo: es una agrupación de datos simples con un objetivo (aportar mayor


información), cada campo tiene que recibir un nombre y tendrá su tipo y tamaño propio.

 Campo continente: es un campo formado por contenido. Hay que dar el contenido.

 Campo contenido: requiere que se le de tamaño y tipo. Depende de un campo mayor.

 Registro: es un agrupamiento de campos continentes y contenidos. Estructura


compuesta de un número fijo de componentes llamados campos, donde cada uno de
ellos viene definidos por su nombre y su tipo (no necesariamente deben ser todos de un
mismo tipo). La menor unidad de información de un registro se denomina campo.

 Representación de un registro.

o Lineal, gráfica o esquemática: consiste en la continuidad de celdas, donde cada


dato tiene su rectángulo. La continuidad determina la relación lógica que existe
entre los campos.
o Jerárquica o arbórea: es puramente gráfica, se utiliza en diseños globales y viene
por traslado de la representación de los sistemas. Trabaja con nodos de
información.

Nodos: son rectángulos que representan una entidad física lógica.

o Por nivel o literario: es la representación jerárquica de los datos donde cada nodo
o cada elemento ocupa un renglón de escritura y las relaciones de dependencia y
subordinación se nota mediante el uso de sangría. Describimos a continuación el
ambiente.

Alumno = registro
Legajo 6N;
Ape_nbre AN40;

Página 6 de 33
Fe_nac fecha;
FIN REGISTRO.

De esta forma vamos a definir un registro en el ambiente.


Para poder acceder a las componentes de una variable registro, utilizamos una
expresión llamada selector de campo. Esta expresión está formada por el nombre
de la variable registro y el nombre del campo al cual queremos acceder, separado
por un punto.

Registros de longitud variable:


-
Por Ocurrencia: + Un solo formato, con posibilidad de extenderse

+ Toma su longitud en función de su contador

+ Al contador siempre se lo define como rango

Ejemplito:
Alumno = Registro

nombre : AN;

leg : Entero;

materiasAprobadas : Entero;

notas = Registro Ocurre Segun materiasAprobadas

fecha : Fecha;

calificacion : Entero;

FinRegistro

FinRegistro

- Por Enumeracion:

+ Tengo registros distintos pero que tienen una parte común

+ La parte común es fija

+ Se lee siempre utilizando el registro mas grande

Ejemplo:

Satelite = Registro

Página 7 de 33
tipo = 'A';

nombre : AN;

masa : Real;

FinRegistro

Planeta = Registro

tipo = 'B';

nombre : AN;

masa : Real;

aceleracionG : Real;

FinRegistro

Estrella = Registro

tipo = 'C';

nombre : AN;

masa : Real;

aceleracionG : Real;

luminosidad : Real;

FinRegistro

Arreglos

Concepto
Un arreglo es una estructura de datos en la que se almacena una colección de datos del mismo
tipo. Se caracteriza por:
o Los elementos del arreglo se colocan en posiciones contiguas, tienen continuidad física
y se almacenan en memoria interna.
o Es estática, es decir, tiene un tamaño definido y fijo.
o Tiene un único nombre que representa a todos los elementos y estos se diferencian por
un índice.
o Acceso directo a los elementos individuales del arreglo.
o Se puede recorrer en orden inverso.

Página 8 de 33
Declaración
Tipo
Alumnos: arreglo [1..100] de enteros;
Alumnos: nombre del arreglo.
[1..100]: longitud del arreglo. En este caso se tiene un arreglo de 100 elementos.

El intervalo de longitud del arreglo suele ser de tipo simple, como entero o caractér, pero nunca
real.
Planes: arreglo [“A”..“F”] de enteros;

Un elemento del arreglo se identifica por el nombre del arreglo y el índice adecuado contenido
entre corchetes.
Alumnos[1]; Alumnos[2];…; Alumnos[100];
Planes[“A”]; Planes[“B”];…; Planes[“F”];

Los elementos componentes de un arreglo pueden ser tanto datos simples como datos
estructurados.
Tipo
Alu=registro
Leg: entero (5);
Nomb: an (30);
DNI: entero (8);
Finregistro;
A: arreglo [1..100] de Alu;

Operaciones con arreglos

Los arreglos no se pueden leer/escribir en una sola operación o sentencia. La lectura o


escritura de un arreglo se debe hacer elemento a elemento, para lo cual se utilizan las
estructuras repetitivas.
Lectura: c) Bucle Repetir
a) Bucle Para I:=1;
Para i:=1 hasta 100 hacer Repetir
Esc (Alumnos[i]); Esc (Alumnos[i]);
FinPara; i:=i+1;
Hasta que i>100;
b) Bucle Mientras
I:=1; Escritura:
Mientras i<=100 hacer Bucle Para
Esc (Alumnos[i]); Para i:=1 hasta 100 hacer
i:=i+1; Alumnos[i]:=0;
FinMientras; FinPara;

Clasificación de arreglos:
Los arreglos de clasifican en:
 Unidimensionales: También llamados vectores, son aquellos que poseen una sola
dimensión, lo que implica un solo índice.
 Bidimensionales: Un arreglo bidimensional es un arreglo con dos índices y son
conocidos como tablas o matrices. Para localizar o almacenar un valor en el arreglo se
deben especificar dos posiciones, uno para la fila y otro para la columna.
 Multidimensionales: Tienen dos o más índices o dimensiones y se clasifican según estos
en bidimensionales (dos índices o dimensiones), tridimensionales (tres índices o
dimensiones), etc.

Página 9 de 33
Declaración
Se deben indicar:
1) Nombre del arreglo
2) Tipo del arreglo (todos los elementos serán del mismo tipo)
3) Intervalo permitido por cada índice
Tipo
Mat: arreglo [1..15, 1..50] de Alu;

Los diferentes tipos de índices no necesitan ser intervalos del mismo tipo
Tipo
Mat: arreglo [1..10, “A”..“F”] de enteros;

Los elementos se referencian con el formato:


Mat[2,5]; elemento de la fila 2 y columna 5.

Si el arreglo es de tipo registro, se tendrá que usar el selector de campo.


Mat[2,5].leg;

Representación gráfica

Manipulación de tablas
Los recorridos se realizan mediante bucles anidados, uno por cada dimensión o índice.

Para i:=1 hasta 15 hacer


Para j:=1 hasta 50 hacer
Esc (Mat[i,j].Nomb);
FinPara;
FinPara;

Búsqueda en un arreglo
Para realizar la búsqueda de un elemento o varios en un arreglo, se pueden utilizar los
siguientes métodos:

Búsqueda lineal Pura o Simple: consiste en recorrer todo el arreglo, comparando cada
elemento con el buscado.

Ventajas: se aplica tanto en arreglos ordenados como desordenados. Es útil para búsquedas
múltiples.

Página 10 de 33
Desventajas: recorre todo el arreglo aunque e elemento se haya encontrado en el primer lugar.

Algoritmo
Leer(X);
Para i:=1 hasta n hacer
Si A[i]=X entonces
Esc (“Se encontró en posición”,i);
FSi;
FPara;
FAccion

Búsqueda lineal por centinela: es similar a la búsqueda lineal pero con la mejora de que en el
momento en que se encuentra el elemento, se finaliza la búsqueda.

Ventajas: se aplica tanto en arreglos ordenados como desordenados. Cuando encuentra el


elemento, termina la búsqueda.

Desventajas: es lenta cuando el arreglo es grande. No admite búsqueda múltiple, es decir, de


varios elementos.

Algoritmo
Leer(Cent); i:=;
Mientras (A[i] <> Cent) ^ ( i<=N ) hacer
I:= i+a;
FMientras;
Si A[i]= Cent entonces
Esc (“Se encontró en posición”,i);
Sino
Esc (“No se encontró elemento”);
FSi;
FAccion

Búsqueda binaria o dicotómica: consiste en comparar el elemento central del arreglo con el
valor buscado, si este no es igual, se reduce el intervalo de búsqueda a la mitad derecha o
izquierda, según el valor sea mayor o menor que el elemento central del arreglo. Y así se irá
reduciendo el intervalo de búsqueda en mitades mediante dicha comparación, hasta que este
reduzca al mismo elemento de búsqueda, si es que existe. O sea que, la búsqueda termina
cuando se encuentra el elemento o bien cuando se anula el intervalo.

Ventajas: es muy rápida

Desventajas: no se puede usar en arreglos desordenados. No es útil para búsquedas múltiples.

Algoritmo
Izq:=1; Der:=N; Med:=(Izq+Der) Div 2; Leer(X);
Mientras (A[Med]<>X) ^ (Izq <>Der) hacer
Si (X<A[Med]) entonces
Der:= Med-1;
Sino
Izq:= Med+a;
FSi;
Med:=(Izq+Der) Div 2;
FMientras;

Página 11 de 33
Si (X= A[Med]) entonces
Esc (“se encontró en posición”, Med);
Sino
Esc (“No se encontró”);
FSi;
FAcción.

Ordenamiento de un arreglo

Directa
Insercion Binaria
Simples,
Directos o Selección directa
Eltales. Directo o burbuja
Intercambio Directo con test de comprob.
Método de la sacudida

Métodos de ordenación
Indirectos, Inserción (con incrementos decrecientes)
Avanzados o Selección (orden según árbol o método de
Logarítmicos la criba o del montículo, heapsort)
Intercambio (orden por partes met. Ráp)
(quick sort)

Método de inserción directa: en el proceso de encontrar el sitio adecuado conviene alternar


comparaciones y movimientos, es decir, “dejar caer” x, comparándolo con el item anterior aj,
como consecuencia se inserta x o se mueve aj a su derecha y se continua con el item izquierdo
repitiendo el proceso.
Se observa que hay dos condiciones distintas de terminación de éste proceso de “caida”:
- Se encuentra un item aj cuya clave es menor que la de x.
- Se alcanza el extremo izquierdo del arreglo.
Este caso típico de una repetición con dos condiciones de terminación permite utilizar un
centinela, al que llamaremos a0 := x. Suponiendo que tuvimos en cuenta el uso del centinela,
nuestro arreglo tendrá un rango de 0 a n. Caso contrario a0 será una variable del mismo tipo
que el contenido del arreglo, o sea, la variable centinela deberá declararse en el ambiente.
Cabe recordar que para ordenar un arreglo no es conveniente usar otro arreglo, esto se
considera ineficiente por el uso adicional de memoria interna.

Algoritmo
Cargar;
Para i:=2 hasta n hacer
x:=a[i]; a[0]:=; j:=(i-1);
Mientras (x<a[j]) hacer
a[j+1]:=a[j];
j:=j-1;
FMientras;
a[j+a]:=x;
FPara;
FAcción;

Página 12 de 33
Método de selección directa: se basa en los siguientes principios:
- Seleccionar el artículo con clave mínima.
- Enviarlo a su posición definitiva ai a la izquierda. Para eso se intercambian los item de ai
y aj.
A continuación se repiten estas operaciones con los ítems restantes a la derecha de ai. Este
método, es en cierta forma opuesto al de inserción directa, considera todos los ítems del
arreglo origen para encontrar el que tiene menor clave y depositarlo como item siguiente de la
secuencia destino. Recordamos que se entiende por arreglo origen a la parte desordenada y
como secuencia destino a la parte del arreglo ya ordenada.

Algoritmo
Carga;
Para i:=1 hasta (n-1) hacer
x:= a[i]; min:=i;
Para j:=(i+a) hasta n hacer
Si (x>a[j]) entonces
min:=j;
x:=a[j];
FSi;
FPara;
a[min]:= a[i];
a[i]:=x;
FPara;
FAcción.

Método de intercambio directo (burbuja): el algoritmo de intercambio directo se basa en el


principio de comparar e intercambiar pares de ítems adyacentes hasta que todos estén
ordenados. Como en los métodos anteriores de selección directa, se hacen repetidas pasadas
sobre el arreglo, moviendo en cada una el elemento de clave mínima hasta el extremo
izquierdo del arreglo. En cambio, si se mira el arreglo como si estuviera en posición vertical en
vez de horizontal y se considera los ítems como burbujas en un depósito de agua con “pesos”
acordes con sus claves, de cada pasada sobre el arreglo resulta la ascensión de una burbuja
hasta el nivel de peso que le corresponde, de allí la denominación burbuja.

Algoritmo
Carga;
Bandera:= Falso;
Mientras (Bandera =Falso) hacer
Bandera:= Verdadero;
Para j:=1 a (n-1) hacer
Si ( a[j] > a[j+1] entonces
x:= a[j];
a[j]:= a[j+1];
a[j+1]:= x;
Bandera:= Falso;
FSi;
FPara;
FMientras;
FAcción.

Página 13 de 33
ARCHIVOS O FICHEROS

Un archivo es una colección de datos, es decir, un conjunto de registros, que se almacenan en


memoria externa y de forma permanente.
Un archivo puede ser de longitud infinita, solo está condicionado por la capacidad de la
memoria, por ello no hace falta conocer su longitud.
A todo archivo se le debe asignar un nombre y un tipo.

Organización
Es como se almacenaran los datos. La organización es permanente, una vez definida no se
puede modificar. Es la principal característica de un archivo.

Organización secuencial: implica continuidad física entre los registros, se almacenan en


posiciones físicamente contiguas. Se graba registro por registro, en el mismo orden en que se
ingresan.
Si un archivo secuencial es abierto solo para lectura, no se lo puede usar para escribir, y si es
abierto solo para escritura, no se lo puede usar para leer.
Una vez almacenado el archivo es inalterable.
Para actualizar un archivo secuencial, se lo debe abrir para lectura y crear un archivo de salida,
en el cual se copiarán los registros del archivo maestro (archivo a actualizar), introduciendo al
mismo tiempo las novedades.

Organización directa relativa: antes de empezar se debe definir su longitud o tamaño,


quedando de antemano reservado su espacio, lo cual es una desventaja.
Los registros se graban ordenados por una clave determinada, generándose una tabla con las
posiciones de los mismos. La continuidad de los registros en estos archivos es lógica.
Se puede acceder de forma directa, conociendo el valor posicional del registro, o de forma
secuencial.

Organización directa indexada: el archivo posee dos áreas: una de datos y otra de índice. El
índice puede ser una clave simple o compleja, y permitirá el acceso de forma directa a
cualquier registro.
Los registros de un archivo indexado poseen continuidad lógica. Un registro puede ser
agregado fácilmente al archivo en una posición cualquiera de memoria, manteniendo la
correlatividad de las claves, ya que el carácter sucesor de los registros está dado por una
cuestión lógica, y no física.

Acceso
Es la forma en la que se van a recuperar o leer los registros de un archivo. El tipo de acceso a
un archivo depende de la organización del mismo. El acceso se clasifica en secuencial y
directo, y este a su vez se divide en al azar o puntual y en dinámico o mixto.

Acceso secuencial: para acceder a un registro n cualquiera, hay que leer los n-1 registros
anteriores a él.
Todo archivo, sin importar su organización, puede ser accedido secuencialmente.

Acceso directo: el acceso directo sólo es posible si el archivo tiene una organización directa.
Al azar o puntual: se necesita conocer la posición o la clave del registro al que se quiere
acceder.

Página 14 de 33
Dinámico o mixto: es una combinación del acceso directo y del secuencial. Se accede
primero de manera directa y luego secuencial, para lo cual se debe tener la posición, la
clave o una aproximación de la clave del primer elemento que se busca, y a partir de allí,
se recorre el resto del archivo secuencialmente.

Organización Acceso
Secuencial Secuencial

Secuencial
Directa Puntual
Mixta(Puntual y luego Secuencial)

Tipos de claves
Simple: un solo dato, campo.
Compleja: formada por un campo continente.
Principal: identifica al elemento dentro del subsistema al que pertenece.
Secundaria: campo relevante, pero su función es relacionar al elemento con otros
sistemas.

Procesos con archivos

genérico

Individual
Corte de control

Procesos

Actualización

Múltiple directa
Mezcla Apareo
Indirecta

Unitarios o individuales
Interviene un solo archivo de entrada, pudiéndose obtener uno o más archivos de salida o un
listado. La característica fundamental es que el control de finalización de este tipo de proceso
está dado por el fin del fichero de entrada.

 Genéricos: es el proceso que se encarga de la creación y carga de los archivos.

Página 15 de 33
 Estadístico: Recorrido del archivo para contabilizar elementos, utilizando una tabla
(memoria interna) y al finalizar emitir un cuadro de resumen.

 Emisión: Listados totales(padrones) o parciales.

 Corte de control: es el proceso por el cual se producen paradas momentáneas para


emitir totalizadores parciales o alguna otra acción. Implica la emisión de un listado o
padrón.
Para realizar un corte de control es necesario que el archivo de entrada este ordenado
por clave compleja.
Existen tantos niveles de corte como campos tenga la clave.
Los cortes se producen por cambio de contenido en los distintos niveles de la clave.
Cada nivel posee un contador que se emite cuando se efectúa el corte de ese nivel. Los
contadores se inicializan en dos momentos: 1º) al comienzo del proceso (común para
todos); y 2º) en forma individual cuando se produce el corte correspondiente a ese
contador.
Se utiliza una variable auxiliar por cada campo de la clave compleja, la que se denomina
variable de resguardo, y del mismo tipo. Se produce una comparación entre la variable
de resguardo y el campo actual del registro, si son distintos, se realiza el corte
correspondiente a ese nivel.
Como el corte trabaja con si anidados para cada nivel de corte (del mayor al menor),
esto obliga a efectuar el proceso de emisión de los totales de los niveles de corte menor,
hasta llegar al nivel que desencadenó el corte al variar el contenido del campo clave.

2Algoritmo:

Ejemplo para una clave de 3 niveles, clave=


PROVINC DEPARTAMEN CIUDA
IA TO D
Clave 3 Clave 2 Clave 1

ACCION Corte ES
Inicializar_totalizadores;
Inicializar_adquisición;
Leer_registro;
Reg1 := Clave1; Reg2 := Clave2; Reg2 := Clave3 * Resguardar claves *
MIENTRAS NO FDA(Arch) HACER
VER_CORTE
TRATAR_REGISTRO
Leer_registro;
FMientras;
Corte_3; * corte de mayor nivel *
Emitir_totales;

FACCIÓN.

Acción Ver_corte es
SI Clave3 <> Reg3
ENTONCES Corte3
SINO SI Clave2 <> Reg2
ENTONCES Corte2
SINO SI Clave1 <> Reg1

Página 16 de 33
ENTONCES Corte1
Fsi;
Fsi;
FSI;
Facción.

Acción Corte_n es
Corte n-1 * llama al corte de nivel inmediato inferior *
Emitir totales n
Acumular totales al nivel inmediato superior * tot n+1 : = tot n+1 + tot n *
Reinicializar totales de este nivel * tot n : = 0 *
Reg n : = Clave n
FAcción.

Complejos o múltiples
Existen por lo menos dos ficheros de entrada, pudiendo existir uno o mas archivos de salida.
La finalización del proceso se maneja con la técnica del apareo. Las estructuras de los ficheros
deben tener un elemento comun: la “clave de apareo” o “campo clave”.Los ficheros deben estar
ordenados por el “campo clave”.

 Mezcla o apareo: se realiza mezcla de archivos cuando se reúnen varios archivos en


uno solo, intercalando sus registros de acuerdo a un determinado criterio. Los archivos
de entrada deben estar ordenados por clave de apareo. La mezcla puede ser directa o
indirecta.

Mezcla directa: los archivos de entrada tienen el mismo formato de registro. El


número de registros del archivo de salida es la sumatoria de los registros de los
archivos de entrada.

Mezcla indirecta: los archivos de entrada tienen formatos diferentes, se debe definir
el formato del archivo de salida. El número de registros en el archivo de salida es
indeterminado.
A1 A2 An

MEZCLA

Listado de
As errores

Tipos de Mezcla:

DIRECTA INDIRECTA
Formato de los registros igual distinto
de los Ficheros de
Entrada

Página 17 de 33
Formato de los registros igual al de los ficheros de igual a alguno de los ficheros
del Fichero de Salida entrada de entrada o una combinación
de estos
Cantidad de registros es igual a la sumatoria de las no es posible predecir
del Fichero de Salida cantidades de los registros de
los ficheros de entrada:
n
# As = 


Ciclos de Apareo:
- Incluyente

MIENTRAS NO FDA (Arch 1) o NO FDA(Arch 2) o .... NO FDA(Arch n) HACER

PROCESO

FMientras.

- Excluyente

MIENTRAS NO FDA (Arch 1) y NO FDA(Arch 2) HACER

PROCESO de registros comunes

FMientras.

MIENTRAS NO FDA (Arch 1) HACER ** Uno de estos ciclos


por cada fichero
PROCESO de Registros del Arch 1 interviniente **

Fmientras.

MIENTRAS NO FDA (Arch 2) HACER

PROCESO de Registros del Arch 2

FMientras.

Si hay más de 2 ficheros se necesitarán más ciclos, además del ciclo principal. Por ej: para 3
ficheros se necesitarán 7 ciclos:
1 - Condición: NO FDA (Arch 1) y NO FDA (Arch 2) y NO FDA (Arch 3) - Ciclo principal que
procesa registros comunes.
2 - Condición: NO FDA (Arch 1) y NO FDA (Arch 2)
3 - Condición: NO FDA (Arch 1) y NO FDA (Arch 3)
4 - Condición: NO FDA (Arch 2) y NO FDA (Arch 3)
5 - Condición: NO FDA (Arch 1)
6 - Condición: NO FDA (Arch 2)
7 - Condición: NO FDA (Arch 3)

 Actualización: en ella se puede incorporar, modificar o eliminar información de un archivo


mayor (maestro) y se utiliza como mínimo, dos archivos de entrada y uno de salida.
La actualización de archivos supone:
 La incorporación de nuevos registros – altas
 La modificación de registros existentes – modificaciones

Página 18 de 33
 La eliminación de registros – bajas

Archivo maestro: es el de mayor estructura, al cual se le aplica la actualización.

Archivo de movimientos: es el archivo de estructura menor o igual al de maestro, debe


contener como mínimo el campo clave de apareo para poder realizar la actualización.
Contiene las modificaciones que se necesitan hacer sobre el maestro.

Movimientos

Altas: incorporación de un nuevo registro al archivo maestro manteniendo la unicidad de


las claves.

Modificaciones: corresponde a la existencia de un registro del maestro en el cual se


desea modificar parte o todo su contenido, exceptuando el campo clave.

Bajas: es la eliminación física o lógica de un registro.


o Física: consiste en eliminar totalmente el contenido y la clave de archivo maestro.
La eliminación es permanente.
o Lógica: consiste en marcar o señalar el registro como eliminado. Este tipo de baja
requiere un campo de estado, es un campo que debe estar contenido en el
registro.

Tipos de actualización

Actualización individual: el archivo de movimientos posee movimientos de un solo tipo


(alta, baja o modificación).

Actualización general o combinada: el archivo movimientos contiene movimientos de los


tres tipos (alta, baja y modificación). Esta se clasifica en: por lotes y unitaria.

Por lotes: existen cero o múltiples registros en el archivo movimientos para


cada registro del maestro. Utilizando ciclo incluyente, se considera un archivo de
movimientos consistente y se realizan bajas lógicas.

Unitaria: existen cero o un registro en el archivo movimientos para cada


registro del maestro.

Clasificación de actualización

Actualización secuencial: esta actualización es posible tanto para archivos secuenciales


como para i ndexados.
Como su nombre lo indica, esta actualización recorre secuencialmente el archivo
maestro y a la vez el archivo movimientos mediante el uso de un ciclo excluyente o de
un ciclo incluyente. Se comparan las claves de los registros de ambos archivos: si la
clave del registro maestro es menor a la del registro movimiento, significa que ese
registro maestro no tiene movimiento alguno, entonces se deberá copiar el registro
maestro al archivo de salida (maestro actualizado), en caso de que el maestro sea
secuencial, o, si el archivo es indexado, dejar el registro como esta. Si la clave del

Página 19 de 33
registro maestro es igual a la del registro movimiento implica que posee movimientos,
para lo cual se tendrá que actualizar los campos correspondientes al registro
movimiento, y luego agregar el registro al archivo de salida, si el archivo es secuencial, o
re-escribir el registro en el archivo maestro, si es indexado. Por último, si la clave del
registro maestro es mayor a la del registro movimiento, corresponde a una alta, por lo
que se debe incorporar el registro movimiento al archivo maestro actualizado o maestro.
Este es un proceso seguro, puede ser cuantificado, se puede determinar si fue un éxito o
un fracaso y en qué momento se produjo el error.

Actualización indexada: el archivo maestro está indexado, por lo tanto puede ser leído y
sobrescrito.
El archivo movimientos es el que determina el fin del proceso de actualización (ciclo
unitario). Este archivo es accedido en forma secuencial y con la clave de cada registro
se accede directamente al registro maestro: si existe un registro en el archivo maestro
con la misma clave que la del registro movimiento, puede tratarse entonces de una
modificación o una baja. En el primer caso, modificación, de realizarán los cambios
pertinentes en el registro maestro indicados en el registro movimiento y luego se
rescribirá el registro actualizado. Para el segundo caso, se dará de baja, física o
lógicamente, el registro maestro. Si no existe un registro en el archivo maestro con la
misma clave, se trata de un alta, para lo que se debe copiar el registro movimiento y
escribirlo en el archivo maestro.

Actualización interactiva (in situ): la actualización se produce al instante en el que ocurre


el cambio. No existe un archivo de movimientos, sino que se cuenta con una Terminal.
Este proceso termina cuando el usuario deja de ingresar actualizaciones.

 ACTUALIZACIÓN (Secuencial)

Ficheros de entrada: por lo menos dos: MAESTRO Y MOVIMIENTOS.


Ficheros de salida: como mínimo uno.

MAESTRO MOVIMIENTO

ACTUALIZACIÓN

NUEVO Listado de
MAESTRO errores

Tipos de Actualización:

POR LOTES UNITARIA


varios registros de un registro movimiento para
movimiento para un registro un registro maestro.
maestro.

Página 20 de 33
Tipos de Ficheros Maestros:

- Histórico
- Común o Normal

Tipos de Ficheros de Movimientos:

- Actualización General o Combinado.


- Actualización Parcial o Individual.

Tipos de Movimientos:

- Alta
- Baja
- Modificación

Algoritmos:

- Actualización por lotes

Utilizando ciclo incluyente, se considera un archivo de movimientos consistente y se realizan bajas


lógicas.

Consideraciones sobre el ambiente:

formato1= registro formato2= registro


Clave = registro Clave = registro
campo1: .... campo1: ....
campo2: .... campo2: ....
freg; freg;
campo3:..... campo3:.....
.... ....
campoN:.... campoN:....
Marca_baja:..... cod_mov: (A,B,M)
freg; freg;

Reg_mae, Reg_sal, Aux: formato1;


Reg_Mov: formato2;

ACCION ACT_POR_L ES

Algoritmo

Abrir_Archivos
Leer_Maestro
Leer_Movimiento
MIENTRAS (Clave_Mae <> High Value) o (Clave_Mov <> High Value) HACER
SI Clave_Mae < Clave_Mov * Maestro sin Movimiento *
ENTONCES Reg_sal : = Reg_mae
ESCRIBIR(Arch_sal, Reg_sal)
Leer_Maestro
SINO SI Clave_Mae = Clave_Mov * Maestro con Movimiento *
ENTONCES Aux : = Reg_mae
MIENTRAS Clave_Mae = Clave_Mov HACER
Proceso_Movim
Leer_Movimiento

Página 21 de 33
FMientras
Reg_sal : = Aux
ESCRIBIR(Arch_sal, Reg_sal)
Leer_Maestro
SINO * Movimiento sin Maestro ~ 1 Alta y 0-1 Modific. y/o Bajas *
* Asigna campo por campo, porque Aux y Reg_mov
tienen distinto formato *
Aux.clave : = Reg_mov.clave
Aux.campo1 : = Reg_mov.campo1
Aux.campo2 : = Reg_mov.campo2
........
Aux.campoN : = Reg_mov.campoN
Aux.Marca_baja := ‘ ‘
Leer_Movimiento
MIENTRAS Clave_Aux = Clave_Mov HACER
Proceso_Movim
Leer_Movimiento
FMientras
Reg_sal : = Aux
ESCRIBIR(Arch_sal, Reg_sal)
FSI;
FSI;
Fmientras;

Cerrar(Arch_sal)
FACCIÓN.

Acción Leer_Movimiento es
LEER(Arch_mov, Reg_mov)
SI FDA(Arch_mov)
ENTONCES Clave_mov : = High_value
FSI;
FAcción.

Acción Leer_Maestro es
LEER(Arch_mae, Reg_mae)
SI FDA(Arch_mae)
ENTONCES Clave_mae : = High_value
FSI;
FAcción.

Acción Proceso_Movim es
* Comparar la información del Registro de Movimientos y, de acuerdo a los valores que
traigan, y alterar los contenidos del Registro Auxiliar (Aux). *
SI Cod_Mov = ‘M’ * Modificación *
ENTONCES Proceso_modif_maestro
SINO SI Cod_Mov = ‘B’ * eliminación lógica *
ENTONCES Marcar_registro
Fsi;
Fsi;

FAcción.

Acción Proceso_ modif_maestro es


Si Reg_Mov.campo1 <> ‘ ‘
entonces Aux.campo1 := Reg_mov.campo1
fsi;

Página 22 de 33
Si Reg_Mov.campo2 <> ‘ ‘
entonces Aux.campo2 := Reg_mov.campo2
fsi;
Si Reg_Mov.campo1 <> ‘ ‘
entonces Aux.campo3 := Reg_mov.campo3
fsi;
* ... y así sucesivamente para todos los campos del registro...*
FAcción.

Acción Marcar_registro es
Aux.Marca_baja:= ‘*’ * en vez de asterisco, se puede asignar la fecha del día,
o cualquier otro dato, según el problema *
FAcción.

Página 23 de 33
- Actualización unitaria

Utilizando ciclo incluyente

ACCION ACT_UNIT ES

Algoritmo

Abrir_Archivos
Leer_Maestro
Leer_Movimiento
MIENTRAS (Clave_Mae <> High Value) o (Clave_Mov <> High Value) HACER
SI Clave_Mae = Clave_Mov
ENTONCES Proceso_iguales
SINO SI Clave_Mae < Clave_Mov
ENTONCES Reg_sal : = Reg_mae
ESCRIBIR(Arch_sal, Reg_sal)
Leer_Maestro
SINO Proceso_distintos
Fsi;
FSi;
Fmientras;
Cerrar Archivos

FACCIÓN.

Acción Leer_Movimiento es
LEER(Arch_mov, Reg_mov)
SI FDA(Arch_mov)
ENTONCES Clave_mov : = High_value
FSI;
FAcción.

Acción Leer_Maestro es
LEER(Arch_mae, Reg_mae)
SI FDA(Arch_mae)
ENTONCES Clave_mae : = High_value
FSI;
FAcción.

Acción Proceso_iguales es
SI Cod_Mov = ‘ALTA’
ENTONCES ESCRIBIR(‘Error alta no existe’)
Reg_sal : = Reg_mae
ESCRIBIR(Arch_sal, Reg_sal)
SINO SI Cod_Mov = ‘MODIF’
ENTONCES Proceso_modif_maestro
Reg_sal : = Reg_mae
ESCRIBIR(Arch_sal, Reg_sal)

SINO * eliminación lógica *


Marcar_registro
Reg_sal : = Reg_mae
ESCRIBIR(Arch_sal, Reg_sal)
Fsi;
Fsi;

Página 24 de 33
Leer_Maestro
Leer_Movimiento

FAcción.

Acción Proceso_distintos es
SI Cod_Mov = ‘BAJA’
ENTONCES ESCRIBIR(‘Error baja no existe’)
SINO SI Cod_Mov = ‘MODIF’
ENTONCES ESCRIBIR(‘Error mofificación no existe)
SINO * Asigna campo por campo, porque Reg_sal y Reg_mov
tienen distinto formato *
Reg_sal.clave : = Reg_mov.clave
Reg_sal.campo1 : = Reg_mov.campo1
Reg_sal.campo2 : = Reg_mov.campo2
........
Reg_sal.campoN : = Reg_mov.campoN
Reg_sal.Marca_baja := ‘ ‘
ESCRIBIR(Arch_sal, Reg_sal)
Fsi;
Fsi;
Leer_Movimiento

FAcción.

Acción Proceso_ modif_maestro es


Si Reg_Mov.campo1 <> ‘ ‘
entonces Reg_mae.campo1 := Reg_mov.campo1
fsi;
Si Reg_Mov.campo2 <> ‘ ‘
entonces Reg_mae.campo2 := Reg_mov.campo2
fsi;
Si Reg_Mov.campo1 <> ‘ ‘
entonces Reg_mae.campo3 := Reg_mov.campo3
fsi;
* ... y así sucesivamente para todos los campos del registro...*
FAcción.

Acción Marcar_registro es
Reg_mae.Marca_baja:= ‘*’ * en vez de asterisco, se puede asignar la fecha del día,
o cualquier otro dato, según el problema *
FAcción.

ACTUALIZACIÓN (Indexados)

Página 25 de 33
Ficheros de entrada: por lo menos dos: MAESTRO Y MOVIMIENTOS.
Ficheros de salida: el mismo MAESTRO, actualizado.

MAESTRO MAESTRO MOVIMIENTO


Backup

ACTUALIZACIÓN
INDEXADOS

Listado de
errores

Tipos de Actualización:

POR LOTES UNITARIA


varios registros de los movimientos se ingresan
movimiento para un registro por pantalla, sin orden.
maestro. Procesos interactivos.

Algoritmo:

- Actualización unitaria

Archivo Maestro indexado por clave


Archivo Movimiento ordenado por clave y cod_mov.

ACCION ACT_UNIT_INDEX ES

Algoritmo

Abrir (arch_mov)
Abrir I/O (arch_mae)
Leer (arch_mov, Reg_mov )

MIENTRAS NO FDA(arch_mov) HACER


clave_mae : = clave_mov
Leer (arch_mae, Reg_mae )

SI No existe
ENTONCES SI cod_mov = ‘B’
ENTONCES ESCRIBIR(‘Error baja no existe’)
SINO SI cod_mov = ‘M’
2 ENTONCES ESCRIBIR(‘Error modificación no existe’)
SINO
* Asigna campo por campo, porque Reg_mae y Reg_mov
tienen distinto formato *
Reg_mae.campo1 : = Reg_mov.campo1
Reg_mae.campo2 : = Reg_mov.campo2
........

Página 26 de 33
Reg_mae campoN : = Reg_mov.campoN
Reg_mae.Marca_baja := ‘ ‘
ESCRIBIR(arch_mae, Reg_mae)
FSI;
FSI;
SINO SI cod_mov = ‘A’
ENTONCES ESCRIBIR(‘Error clave existe, alta no es posible’)
SINO SI cod_mov = ‘M’
ENTONCES Modificar Registro Maestro
RE-ESCRIBIR(arch_mae, Reg_mae)

SINO **{baja lógica}**


Marcar Registro Maestro
RE-ESCRIBIR(arch_mae, Reg_mae)

** o {baja física}**
BORRAR(arch_mae, Reg_mae)

FSI;
FSI;
FSI;

Leer (arch_mov, Reg_mov )

Fmientras;
Cerrar(Arch_mov)
Cerrar(Arch_mae)

FACCIÓN.

Listas

Página 27 de 33
Las listas son estructuras dinámicas, compuestas por nodos linealmente ordenados con
adyacencia lógica, las cuales pueden crecer o reducirse. Se recorren secuencialmente y solo
están limitadas por la cantidad de memoria.

Nodo: es un registro que posee como mínimo dos campos: uno para datos y otro es un
“puntero interno”, el cual provee la dirección del próximo nodo. Un nodo es una variable
dinámica.

Variable dinámica: es una variable simple o una estructura de datos creada en tiempo de
ejecución y accedida mediante un puntero.

Puntero: es una variable simple y estática que almacena la dirección de memoria de una
variable dinámica.

Listas particularizadas: son las pilas y las colas. En realidad son una restricción de acceso.
Pilas: todas las inserciones, eliminaciones y lectura de nodos se realizan desde el mismo
extremo. A esta estructura se la denomina LIFO (Last In First Out – último en entrar,
primero en salir).

Colas: los puntos de entrada y salida están separados, es decir que, las inserciones de
nodos se realizarán por un extremo y las eliminaciones o lectura por el otro. A es
estructura se la denomina FIFO (First In First Out – primero en entrar, primero en salir).

Clasificación de las listas

Listas simples o simplemente encadenadas: es una secuencia de nodos que se encuentran


enlazados uno con el siguiente mediante un puntero interno. La lista posee un puntero externo
(PRIM) que indica cual es su primer elemento. Ésta, termina en el nodo cuyo puntero interno
apunte al elemento nulo (NIL).
La lista simple solo puede ser recorrida en un sentido, comenzando por el nodo indicado por
PRIM.

Listas dobles o doblemente encadenadas: es una lista en la que cada nodo se encuentra
enlazado al nodo anterior y al siguiente mediante punteros internos (ANT y SIG), a excepción
del primero, cuyo puntero ANT apunta a NIL, y del último, cuyo puntero SIG también apunta a
NIL. Por esto, la estructura de cada nodo será:
- El/los campos correspondientes a los datos;
- Dos punteros internos que indican la posición del elemento anterior y del siguiente.
La lista doble posee dos punteros externos (PRIM y ULT), de manera que uno apunte al primer
nodo y el otro al último. Ésta lista puede ser recorrida en ambos sentidos comenzando por
cualquiera de los dos punteros externos.

Página 28 de 33
Listas circulares: en estas listas no existe el elemento nulo. Pueden ser simples o dobles:
Listas circulares simples: es una lista simple en la cual el último nodo no apunta a NIL,
sino al primer nodo, quedando así formado un círculo de nodos, el cual lógicamente no
tiene fin.

Listas circulares dobles: es una lista doble en la que el puntero interno SIG del último
nodo, apunta al primer nodo y el puntero interno ANT del primer nodo apunta al último
nodo.

PILAS

Una pila es una lista de elementos en la cual se puede insertar o eliminar elementos unicamente por uno
de sus extremos. En consecuencia, los elementos de una pila seran elimidados en orden inverso al que se
insertaron, es decir, el ultimo elemento que se ingresa en la pila es el primero que se elimina. Las pilas
pertenecen al grupo de estructuras de datos lineales, ya que los componentes ocupan lugares sucesivos en
la estructura.

La estructura de datos tipo pila se puede definir como una coleccion de datos que solo puede ser accedida
por un extremo, normalmente conocido como TOPE.

Para la representacion de pilas utilizaremos arreglos, en consecuencia debera definirse cual sera el tamaño
maximo de la pila, y ademas una variable auxiliar, la cual sera un apuntador al ultimo elemento ingresado,
a la que llamaremos TOPE. Ademas se tiene la limitacion de espacio en memorias reservada, propias de
los arreglos. Luego de que el arreglo llege a su maximo no sera posible ampliar su tamaño.

Debe tener en cuenta que la variable max es el numero maximo de elementos que puede alojar la pila.

Página 29 de 33
Operaciones con Pilas:

Poner un elemento en una pila:

Modulo poner_pila (pila,max,tope,dato)

Inicio

si tope <> max (si la pila no esta llena)

tope <-- tope+1 (actualizo el tope)

pila[tope] <-- dato

sino

escribir "desbordamiento"(no hay esoacio en la pila)

fsi

final

el siguiente modulo se utiliza para quitar un elemento en una pila

Modulo quitar_pila (pila,max,tope,dato)

Inicio

si tope=0 (si la pila esta vacia)

escribir "subdesbordamiento"

sino

dato <-- pila[tope]

tope <-- tope-1 (se actualiza el tope)

fsi

Final

Página 30 de 33
COLAS

Una cola es una lista de elementos en la que éstos se introducen por un extremo y se eliminan por otro.
Los elementos se eliminan en el mismo orden en el que se insertaron. Por lo tanto el primer elemento en
entrar a la cola será el primero en salir. Debido a esta caracteristica, las colas tambien se conocen el
nombre de FIFO o PEPS primero en entrar, primero en salir.

un ejemplo de cola seria una fila en el banco

Recursividad

Es la propiedad por la cual un proceso puede llamarse a sí mismo para resolver un problema.

Características de un proceso recursivo:


o Secuencia de pocos pasos.
o Una llamada a sí mismo.
o Una condición de fin.
o Tiende a reemplazar las estructuras repetitivas.
o Menor número de variables locales que en las estructuras iterativas.
o Se requiere mucha memoria para almacenar los datos en una pila.

Cuándo usar la recursividad:


 No debe usarse si los datos o el problema no están planteados en forma recursiva, en
ese caso es conveniente usar la iteración.
 No utilizar recursividad a menos que se tenga un medio para terminar la llamada
recursiva.
 No utilizar recursividad cuando no hay una ventaja clara.
 Es conveniente cuando el problema o los datos están definidos en forma recursiva.
 El único fin de la recursividad es manejar árboles, ya que son estructuras recursivas.
 Un caso recursivo puede plantearse de forma iterativa, pero no siempre al revés.

Niveles de recursividad:
La recursividad se presenta en dos niveles:

Página 31 de 33
1. A nivel de dato – Definición recursiva.
2. A nivel de acción – Proceso recursivo.

1. A nivel de dato: es cuando un objeto se define en función de sí mismo. Se define un


conjunto infinito de objetos mediante un enunciado finito. Ejemplo: listas, árboles.

2. A nivel de acción: implica una función o procedimiento que se invoca a sí mismo,


condicionado mediante un tope o condición de fin. Las acciones se definen en versiones
más pequeñas de sí mismas.

Tipos de recursividad
Directa: un subprograma se llama a sí mismo una o más veces.
Indirecta: un subprograma A llama a un subprograma B y éste a su vez llama a A.

Caso base: es el caso para el que la solución puede establecerse de forma no recursiva.

Caso general o recursivo: caso para el cual la solución se expresa en términos de una versión
más pequeña de sí misma.

Pasos para aplicar recursividad:


I. Comprender el problema.
II. Determinar el o los casos bases.
III. Determinar el caso recursivo.

Árboles

Un árbol es un tipo de datos estructurado, de carácter dinámico, que dispone de la información


de manera jerárquica. Está compuesto por nodos. Cada nodo va a estar enlazado con el
próximo, ya no por orden lineal sino de acuerdo a una jerarquía. Fundamentalmente, la relación
clave es la de padre-hijo entre los nodos de un árbol. Si existe una arista o rama dirigida del
nodo a al nodo b, entonces a es padre de b y b es un hijo de a.
El árbol se almacena en memoria interna. La única manera de manejarlo es con la recursividad
ya que es una estructura totalmente recursiva (se define y se ejecuta recursivamente).
Los árboles pueden tener cualquier cantidad de punteros internos. El árbol más chico es el
“binario”, pero existen árboles “n-arios”.

Nodo raíz: es el nodo superior, representa la entidad mayor dentro de un árbol. Ningún nodo
puede apuntar a él.
Nodo descendiente: se encuentra debajo de otro nodo, es decir, depende de otro de nivel
superior.
Nodos hermanos: dos nodos son hermanos si tienen el mismo padre. Se llamarán hermano
izquierdo y derecho respectivamente.
Nodo interior: todo nodo no terminal, con descendientes.
Nodo terminal u hoja: es el que no tiene hijos o descendientes.

Camino: es una secuencia de nodos conectados dentro de un árbol.

Página 32 de 33
Longitud de un camino: es el número de nodos que componen el camino menos uno, o bien el
número de aristas o ramas que los une.

Nivel de un nodo
El nivel o profundidad de un nodo se define como una cantidad mayor en uno al número de sus
ascendentes.

Altura de un árbol
La altura de un árbol es el número de nodos en el camino más largo desde la raíz a una hoja,
es decir, el número de niveles distintos.

Grado de un árbol
El grado de un árbol es el número de descendientes que puede tener cualquier nodo e incluso
la raíz, es el número de punteros internos.

Árboles binarios
Un árbol binario es aquel en el que cada nodo no puede tener más de dos hojas o
descendientes. Es un conjunto vacío o un conjunto que consta de un nodo raíz enlazado a dos
árboles binarios disjuntos denominados subárboles de izquierda y de derecha. Cada uno de
estos de estos subárboles son, a su vez, un árbol binario, y deben ser subconjuntos disjuntos
de nodos, es decir, ningún nodo puede estar en ambos subárboles.

Diagrama de un árbol binario

Árboles binarios equilibrados


Un árbol binario se dice que está equilibrado si cada nodo tiene exactamente dos hojas o
ninguna, y si cada una está al mismo nivel. También se dice que está completo.

Diagrama

Recorrido de un árbol binario


Es el proceso de acceder a todos los nodos de un árbol. El árbol puede ser recorrido en varios
órdenes. Los tres recorridos típicos se clasifican de acuerdo al momento en que se visita la raíz
en relación con la visita de sus subárboles: 1) recorrido en pre-orden: primero se accede a la
raíz, luego al subárbol izquierdo y por último al derecho; 2) recorrido en orden: se accede
primero al subárbol izquierdo, después a la raíz y luego al subárbol derecho; 3) recorrido en
post-orden: se visitan primero los subárboles izquierdo y derecho respectivamente y después la
raíz.

Algoritmos

Diagrama ejemplo

Al recorrer el árbol y escribir los caracteres de los nodos en la secuencia en que estos se van
encontrando, se obtienen las siguientes ordenaciones:
1. Pre-orden:
2. Orden:
3. Post-orden:
Se pueden ver las tres formas de expresiones: el recorrido en pre-orden produce la notación
prefija; el recorrido en post-orden genera la notación post-fija o inversa y el recorrido en orden
produce la notación convencional.

Página 33 de 33

S-ar putea să vă placă și