Docsity
Docsity

Prepara tus exámenes
Prepara tus exámenes

Prepara tus exámenes y mejora tus resultados gracias a la gran cantidad de recursos disponibles en Docsity


Consigue puntos base para descargar
Consigue puntos base para descargar

Gana puntos ayudando a otros estudiantes o consíguelos activando un Plan Premium


Orientación Universidad
Orientación Universidad


Apuntes sobre Pascal Parte3, Apuntes de Informática

Apuntes de Estructura de Datos y de la Información sobre Pascal, Organizacion de un programa en pascal, Tipos de datos, Entrada salida, Estructuras de control, Subalgoritmos de procedimiento y Subalgoritmo de funcion, Paso de parametros.

Tipo: Apuntes

2013/2014

Subido el 22/01/2014

gutierrez93
gutierrez93 🇻🇪

4.5

(60)

383 documentos

1 / 23

Toggle sidebar

Esta página no es visible en la vista previa

¡No te pierdas las partes importantes!

bg1
IF V[LI] MOD 2=0 THEN PAR:=1
ELSE PAR:=0
ELSE
IF V[LI] MOD 2=0 THEN PAR:=1+PAR(LI+1,LS)
ELSE PAR:=PAR(LI+1,LS);
END;
EJER 35: Hacer un procedimiento recursivo que visualice el contenido de una lista enlazada simple tal que
asi: si la lista tiene a b c, visualizaría a b c c b a
PROCEDURE VISUAL(LISTA:PUNTERO);
BEGIN
IF LISTA<>NIL THEN
BEGIN
WRITE(LISTA^.INFO);
VISUAL(LISTA^.SIG);
WRITE(LISTA^.INFO);
END;
END;
TEMA VII−ÁRBOLES
1.− Definición de la estructura de datos árbol.
2.− Arboles Binarios. Definición y terminología.
3.− Implementación en pascal de los arboles binarios.
4.− Recorrido de los arboles:
4.1.− Recorrido en INORDEN.
4.2.− Recorrido en PREORDEN.
4.3.− Recorrido en POSTORDEN.
5.− Arboles binarios de búsqueda (ABB)
6.− Operaciones con arboles binarios de búsqueda:
51
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff
pf12
pf13
pf14
pf15
pf16
pf17

Vista previa parcial del texto

¡Descarga Apuntes sobre Pascal Parte3 y más Apuntes en PDF de Informática solo en Docsity!

IF V[LI] MOD 2=0 THEN PAR:=

ELSE PAR:=

ELSE

IF V[LI] MOD 2=0 THEN PAR:=1+PAR(LI+1,LS)

ELSE PAR:=PAR(LI+1,LS);

END;

EJER 35: Hacer un procedimiento recursivo que visualice el contenido de una lista enlazada simple tal que asi: si la lista tiene a b c, visualizaría a b c c b a PROCEDURE VISUAL(LISTA:PUNTERO); BEGIN IF LISTA<>NIL THEN BEGIN WRITE(LISTA^.INFO); VISUAL(LISTA^.SIG); WRITE(LISTA^.INFO); END; END; TEMA VII−ÁRBOLES 1.− Definición de la estructura de datos árbol. 2.− Arboles Binarios. Definición y terminología. 3.− Implementación en pascal de los arboles binarios. 4.− Recorrido de los arboles: 4.1.− Recorrido en INORDEN. 4.2.− Recorrido en PREORDEN. 4.3.− Recorrido en POSTORDEN. 5.− Arboles binarios de búsqueda (ABB) 6.− Operaciones con arboles binarios de búsqueda:

6.1.− Búsqueda de un elemento en un ABB. 6.2.− Inserción de un elemento en un ABB. 6.3.− Borrado de un elemento en un ABB. 7.− Arboles binarios de expresión aritmética. 1.− DEFINICIÓN DE LA ESTRUCTURA DE DATOS ÁRBOL: Es una estructura no lineal de datos homogéneos tal que establece una jerarquía entre sus elementos. 2.− ÁRBOLES BINARIOS. Es un árbol que o bien esta vacío, o bien esta formado por un nodo o elemento Raíz y dos arboles binarios, llamados subarbol izquierdo y subarbol derecho. Es un árbol que tiene o 0,1, 2 hijos su nodo. Como máximo dos hijos por elem. TERMINOLOGÍA: NODO: cada uno de los elementos de un árbol. SUCESORES DE UN NODO: son los elementos de su subarbol izquierdo y de su subarbol derecho. NODO HIJO: son los sucesores directos de un Nodo. NODO TERMINAL O NODO HOJA: es aquel que no tiene hijos. NIVEL DE UN NODO: es un número entero que se define como 0 para la raíz y uno más que el nivel de su padre para cualquier otro nodo. n=0 Para la Raíz. para cualquier otro nodo 1+ el nivel de su padre. RAMA: es cualquier camino que se establece entre la raíz y un nodo terminal. ALTURA O PROFUNDIDAD DE UN ARBOL: es el máximo nivel de los nodos de un árbol que coincide con el número de nodos de la rama más larga menos 1(−1) 3.−IMPLEMENTACIÓN EN PASCAL DE LOS ARBOLES BINARIOS. TYPE ARBOL = ^NODO; NODO=RECORD INFO:......; IZQ,DER:ARBOL;

Si el àrbol no esta vacio se realizan los siguientes pasos: 1º.− Recorrer en INORDEN el subarbol izquierdo. 2º.− Procesar la Raiz. 3º.− Recorrer en INORDEN el subarbol derecho. Recorrido de un árbol en INORDEN: PROCEDURE INORDEN (RAIZ:ARBOL); BEGIN IF RAIZ <> NIL THEN BEGIN INORDEN (RAIZ^.IZQ); PROCESAR (RAIZ^.INFO); INORDEN (RAIZ^.DER); END; END; 4.2.− RECORRIDO EN PREORDEN: El árbol sería recorrido así: 1,15,5,9,17,3,2,19,23, Si el árbol no esta vacio se realizan los siguientes pasos: 1º.− Procesar Raiz. 2º.− Recorrer en PREORDEN el izquierdo. 3º.− Recorrer en PREORDEN el derecho. PROCEDURE PREORDEN (RAIZ:ARBOL); BEGIN IF RAIZ <> NIL THEN

BEGIN

PROCESAR (RAIZ^.INFO);

PREORDEN (RAIZ^.IZQ);

PREORDEN (RAIZ^.DER);

END;

END;

4.2.− RECORRIDO EN POSTORDEN:

El árbol sería recorrido así: 5,17,3,9,15,25,23,19,2, Si el árbol no esta vacio se realizan los siguientes pasos: 1º.− Recorrer en POSTORDEN el izquierdo. 2º.− Recorrer en POSTORDEN el derecho. 3º.− Procesar raiz. PROCEDURE POSTORDEN (RAIZ:ARBOL); BEGIN IF RAIZ <>NIL THEN BEGIN POSORDEN (RAIZ^.IAZQ); POSORDEN (RAIZ^.DER); PROCESAR (RAIZ^.INFO); END; END; EJER 38: Hacer un seguimiento del siguiente algoritmo con el árbol que se da. PROCEDURE EJERCICIO(RAIZ:PUNTERO); BEGIN IF RAIZ<>NIL THEN BEGIN

(¿cuantos números impares hay?) primer caso − arbolo vacio= segundo caso − si la raiz es impar sería 1+los impares del subarbol izquierdo+los impares del subarbol derecho FUNCTION IMPARES(RAIZ:ARBOL):INTEGER; BEGIN IF RAIZ=NIL THEN IMPARES:= ELSE IF RAIZ^.INFO MOD 2<>0 THEN IMPARES:=1+IMPARES(RAIZ^.IZQ)+IMARES(RAIZ^.DER) ELSE IMPARES:=IMPARES(RAIZ^.IZQ)+IMARES(RAIZ^.DER); END; 6.− OPERACIONES CON ARBOLES BINARIOS DE BUSQUEDA. 6.1.− BUSQUEDA DE UN ELEMENTO. Hacer un procedimiento que se llama BUSCAR que reciba como parámetro el puntero raiz de un ABB, un elemento a buscar en la variable ELEM del mismo tipo que los que forman el arbol y una variable POS en la que devolverá la dirección de memoria del nodo que contiene el elemento ELEM, en caso de no encontrarse ese elemento devolverá nil. PROCEDURE BUSCAR (RAIZ:ARBOL; ELEM:INTEGER;VAR POS:ARBOL); BEGIN IF RAIZ=NIL THEN POS:=NIL ELSE IF RAIZ^.INFO=ELEM THEN POS :=RAIZ ELSE IF ELEM < RAIZ^.INFO THEN BUSCAR ( RAIZ^.IZQ, ELEM, POS) ELSE BUSCAR (RAIZ^.DER, ELEM, POS)

END;

6.2.− INSERCION DE UN ELEMENTO.

Hacer un procedimiento que reciba como parámetro el puntero a la raiz de un ABB y el elemento ELEM y lo inserte en su sitio correspondiente. PROCEDURE INSERTAR (VAR RAIZ:ARBOL; ELEM:INTEGER); BEGIN IF RAIZ=NIL THEN BEGIN NEW (RAIZ); RAIZ^.INFO:=ELEM; RAIZ^.IZQ:= NIL; RAIZ^.DER:= NIL; END ELSE IF RAIZ^.INFO=ELEM THEN WRITE (REPETIDO) ELSE IF ELEM < RAIZ^.INFO THEN INSERTAR (RAIZ^.IZQ, ELEM) ELSE INSERTAR (RAIZ^.DER, ELEM); END; 6.3.− BUSCAR Y ELIMINAR UN ELEMENTO. elem 1º− encontrar 1−nodo sin hijos 2º− suprimir 2−nodo con 1 hijo 3−nodo con 2 hijos Con 2 hijos: se sustituye el elemento a borrar por su anterior en un recorrido en INORDEN, y una vez hecho hay que deshacerse de este último. Dentro del subarbol izquierdo del elemento a suprimir, el que esté más a la derecha es el que ocupa su posición, ya que es su anterior en un recorrido en INORDEN. PROCEDURE ENCONTAR(RAIZ:ARBOL;ELEM:...;VAR ANT:ARBOL); VAR

BEGIN

ANT := P ;

TEMP := P^. IZQ ;

WHILE ( TEMP ^. DER <> NIL ) DO

BEGIN

ANT := TEMP ;

TEMP := TEMP ^. DER ;

END ;

P ^. INFO := TEMP ^. INFO ;

IF ( ANT=P ) THEN ANT ^. IZQ := TEMP ^. IZQ

ELSE ANT ^. DER := TEMP ^. IZQ ;

END ;

END;

EJER 41: Dado un árbol binario de busqueda , que contiene el nombre, el apellido y la edad de un grupo de personas , ordenados por edades. Se pide : Hacer un algoritmo que visualice los datos de las personas de mayor a menor edad. TYPE ARBOL = ^ NODO ; NODO = RECORD NOMBRE : STRING[20] ; APELLIDO : STRING[30] ; EDAD : BYTE ; DER , IZQ : ARBOL ; END ; VAR RAIZ : ARBOL ;

PROCEDURE VISUALIZAR(RAIZ : ARBOL) ;

BEGIN

IF ( RAIZ <> NIL ) THEN

BEGIN

VISUALIZAR(RAIZ ^. DER) ;

WRITELN(RAIZ ^. NOMBRE) ;

WRITELN(RAIZ^. APELLIDO) ;

WRITELN(RAIZ ^. EDAD ) ;

VISUALIZAR(RAIZ ^. IZQ) ;

END ;

END;

EJER 42: Dado un ABB que contiene números enteros. Se pide : − Hacer un procedimiento que reciba como parámetros: el puntero a raiz del arbol , y un número entero. El procedimiento debe buscar el elemento NUM y una vez encontrado visualizar todos sus antecesores (los anteriores). TYPE ARBOL = ^ NODO ; NODO = RECORD INFO : INTEGER ; DER , IZQ : ARBOL ; END ; VAR RAIZ : ARBOL ; ENC : BOOLEAN ; NUM : INTEGER; PROCEDURE BUSCAR(RAIZ : ARBOL ; NUM : INTEGER) ;

3.1.− Procedimiento grafovacio o iniciar grafo. 3.2.− Añadir vértice. 3.3.− Añadir arco. 3.4.− Borrar vértice. 3.5.− Borrar arco. 4.− Recorrido de un grafo. 4.1.− En profundidad. 4.2.− En anchura. 1.−DEFINICIÓN DE LA ESTRUCTURA TIPO GRAFO Y TERMINOLOGIA. Es una estructura de datos no lineal formada por un conjunto finito de Vertices unidos por un conjunto finito de Arcos. 1 2 3 4 5 6 G : grafo V(G) = {1,2,3,4,5,6} conjunto de vertices A(G) = {(1,2),(1,4),(2,1),(2,3),(2,5),(3,2),(3,5), (4,1),(4,5),(4,6),(5,2),(5,3),(5,4),(6,4)} TERMINOLOGÍA Grafo no dirigido : Cuando los arcos tienen los dos sentidos. Grafo dirigido : Cuando los arcos tienen un único sentido. Vertices adyacentes : Dos vertices son adyacentes cuando están conectados mediante un arco. Se dice que el arco es incidente a dichos vertices. Grado de un vertice : El nº de arcos que inciden en dicho vertice. Si el grafo es dirigido se habla de grado de entrada y grado de salida de dicho vertice. Camino de un vertice : Del Vi al Vj. Es la secuencia de vertices que hay desde

uno a otro. Longuitud de un camino : Es el nº de arcos que forman el camino. Grafo valorado : Es un grafo en el que cada arco tienen asociado un valor o peso. 2.− IMPLEMENTACIÓN EN PASCAL. 2.1.− MATRICES DE ADYACENCIA. El conjunto de arcos se representa mediante una matriz cuadrada de grado igual al número máximo de vertices que puede tener el grafo. La matriz se representa mediante elementos booleanos ( un valor verdadero ( .T. ) , significa que hay camino.

1 2 3 4 5 6 1 T T T F F F 2 T F F F T T 3 T F F T T F 4 F F T F T F 5 F T T T F F 6 F T F F F F

  • Conjuntovertices a) Implementación Estática. TYPE TIPOVERTICE = 1.. N ; TIPOARCO = RECORD ORIGEN,DESTINO : TIPOVERTICES ; END ; CONJUNTOVERTICES = ARRAY [1.. N ] OF BOOLEAN ; CONJUNTOARCOS = ARRAY [1.. N , 1 .. N ] OF BOOLEAN ; TIPOGRAFO = RECORD VERTICES : CONJUNTOVERTICES ; ARCOS : CONJUNTOARCOS ; END ; VAR GRAFO : TIPOGRAFO ;

A continuación vamos a ver los algoritmos de las operaciones más comunes que se realizan con grafos: 3.1.− PROCEDIMIENTO GRAFOVACIO O INICIAR GRAFO. a ) Estática. PROCEDURE GRAFO_VACIO ( VAR GRAFO : TIPOGRAFO ) ; VAR X , Y : INTEGER ; BEGIN FOR X := 1 TO N DO BEGIN GRAFO. VERTICES [ X ] := FALSE ; FOR I:= 1 TO N DO BEGIN GRAFO. ARCOS [ X , Y ]:= FALSE ; END ; END ; END ; a ) Dinámica. PROCEDURE GRAFO_VACIO ( VAR GRAFO : TIPOGRAFO ) ; BEGIN GRAFO ^. SIG:= NIL ; GRAFO ^. ADYA := NIL ; END ; 3.2.− AÑADIR VERTICE. a ) Estática. PROCEDURE AÑADE_VER ( VAR GRAFO : TIPOGRAFO ; VERT : TIPOVERTICE ) ;

BEGIN

GRAFO. VERTICE [ VERT ] := TRUE ;

END ;

3.3.− AÑADIR ARCO.

a ) Estática. PROCEDURE AÑADE_ARC ( VAR GRAFO : TIPOGRAFO ; ARC : TIPOARCO ) ; BEGIN IF ( GRAFO. VERTICES [ ARC. ORIGEN ] = TRUE ) AND ( GRAFO. VERTICES [ ARC. DESTINO ] = TRUE ) THEN GRAFO. ARCOS [ ARC. ORIGEN , ARC. DESTINO ] := TRUE ; END ; 3.4.− BORRAR VERTICE. a ) Estática. PROCEDURE BORRA_VER ( VAR GARFO : TIPOGRAFO ; VER : TIPOVERTICE ) ; BEGIN GRAFO. VERTICE [ VER ] := FALSE ; END ; 3.5.− BORRAR ARCO. a ) Estática. PROCEDURE BORRA_ARC ( VAR GRAFO : TIPOGRAFO ; ARC : TIPOARCO ) ; BEGIN GARFO. ARCOS [ ARC. ORIGEN , ARC. DESTINO ] := FALSE ; END ;

BEGIN

IF ( AUX ^. INFO = ARC. DESTINO ) THEN BEGIN

ENC := TRUE ;

ANT ^. ADYA := AUX ^. ADYA ;

DISPOSE ( AUX ) ;

END;

ELSE

BEGIN

ANT := AUX ;

AUX := AUX ^. ADYA ;

END;

END;

END;

END;

END;

4.− RECORRIDO DE UN GRAFO.

Recorrer un grafo significa pasar por todos sus vertices y procesar la información que de esto se desprende , dependiendo del problema que se nos planteó. Este recorrido se puede hacer de dos maneras distintas : − En profundidad. − En anchura. 4.1.− EN PROFUNDIDAD. El recorrido en profundidad ( a pesar de la idea anterior ) no implica que debamos pasar por todos los nodos ( o vertices ) y los tengamos que procesar. Los pasos a realizar son los siguientes : − Se parte de un vertice V. Se marca' como vertice procesado o visitado y se procesa. − Se meten en una pila todos sus adyacentes y se marcan como visitados , y se repite elproceso 2 ` hasta que la pila quede vacia. PROCESO 2 : Se saca un elemento de la pila ; se procesa y se meten en la pila todos sus adyacentes no

visitados. 4.2.− EN ANCHURA. El recorrido en anchura consta de los siguientes pasos : − Se parte de un vertice V. Se `marca' como vertice procesado o visitado y se mete en una cola. A continuación se repetiran los siguientes pasos hasta que la cola esté vacía : 1º .− Se saca un elemento de la cola y se procesa. 2º .− Se meten en la cola sus vertices adyacentes no visitados y se marcan como visitados.

A B D C E F

Visitados : A , B , D , C , E , F Ejercicio. Se tiene un grafo no dirigido valorado cuyos vertices contienen nombres de ciudades y los arcos representan los vuelos entre las ciudades , siendo el peso , la distancia en Km. Se pide : − Declaración de tipos y algoritmo que visualize la ciudad más cercana a Madrid con vuelo directo. a ) TYPE TIPOARCO = RECORD ORIGEN,DESTINO : STRING ; DISTANCIA : INTEGER ; END ; PUNTEROARCO = ^ NODOARCO ; NODOARCO = RECORD DISTANCIA : INTEGER ; CIUDAD : STRING ; ADYA : PUNTEROARCO ; END ; TIPOGRAFO = ^ NODOVERTICE ; NODOVERTICE = RECORD INFO : TIPOVERTICES ;