Está en la página 1de 60

UNIDAD I

MODELOS DE REPRESENTACION DE ESTRUCTURAS DE DATOS


Ing. Mario M. López Winnipeg
1. MODELOS DE REPRESENTACION DE ESTRUCTURAS DE DATOS

1.0 Introducción
1.1 Abstracción
1.2 Estructura de datos
1.3 Tipos de datos abstractos
1.4 Modelo estático
1.5 Modelo dinámico
1.6 Modelo persistente
1.7 Modelo simulado
1.0 INTRODUCCION

Objetivo central

Aplicar los conceptos de estructuras de datos y sus


algoritmos de manipulación, para la implementación
de estructuras de datos clásicas y creación de nuevas
estructuras en la solución de problemas.
1.0 INTRODUCCION
Resolver problemas
¿Qué clase de problemas?

¿Cómo es el proceso para resolver un


problema?

¿Cuándo se dice que la solución es


eficiente y de calidad?
1.0 INTRODUCCION
Problemas, programas, algoritmos y estructuras de datos

Algoritmos
+
PROBLEMA PROGRAMA
Estructuras
de datos

• Problema: Conjunto de hechos o circunstancias que dificultan


la consecución de algún fin.
• Algoritmo: Conjunto de reglas finito e inambiguo.
• Estructura de datos: Disposición en memoria de la
información.
• Programa: Algoritmos + Estructuras de datos.
1.0 INTRODUCCION
Ejemplos de problemas
1.0 INTRODUCCION

Corrector ortográfico
palabro

A, ala, algoritmos, barco, cosa,


curso, datos, estructuras,
evaluación… prácticas…

Sí N
o
Correcta Error
1.0 INTRODUCCION
Corrector ortográfico
• Supongamos un ordenador a 2 GHz.
• Supongamos que el diccionario tiene 5
millones de palabras, y el acceso y
comparación de cada palabra tarda 100 ciclos
de reloj.
• Cada palabra tarda 0,25 segundos.
• ¡¡La corrección de un párrafo de 100
palabras tardaría 25 segundos!!
Corrector ortográfico

• 1000 palabras en 2 segundos = 1 palabra en 2 milisegundos.


• ¡125 veces más rápido que la búsqueda básica!
1.0 INTRODUCCION
Planificador de rutas
1.0 INTRODUCCION
Planificador de rutas

Calcular
ruta
1.0 INTRODUCCION
Planificador de rutas

En sólo 2 s
1.0 INTRODUCCION
Planificador de rutas
1.0 INTRODUCCION
Planificador de rutas
• ¿Cómo representar la información (lugares y
carreteras)?

• ¿Cómo calcular el camino más corto entre


dos lugares?
1.0 INTRODUCCION
Planificador de rutas
• Representación mediante un grafo:
– Lugares = nodos.
– Carreteras
Oviedo
= arcos
3
entre nodos.
Coruña 04
Bilbao
171

45
5

32
0
28
Vigo 356 Gerona

4
Zaragoza 0

395
296 10
32
5 Barcelona
19
Valladolid
3

9
34
Madrid
3 25
40 1
191 Valencia
335

Badajoz 241
Jaén
150

2
24
99

Sevilla Murcia
256 278
5
12

Cádiz Granada
1.0 INTRODUCCION
Otro problema con grafos
• Problema del viajante: encontrar una ruta
que pase por todas las ciudades con el
mínimo coste.
Coruña Oviedo 304
Bilbao
171

45
5

32
0
28
Vigo 356 Gerona

4
Zaragoza
EN ESTE CASO ES296 0

395
10
32
5 Barcelona
19

Valladolid
3

SENCILLO, PERO

9
34
Madrid
3 25
40
¿Y SI TENEMOS...?
1
191 Valencia
335

Badajoz
241

Jaén
150

2
24
99

Sevilla Murcia
256 278
5
12

Cádiz Granada
1.0 INTRODUCCION
1.0 INTRODUCCION

Evolución e historia de la
programación
Lenguajes
de bajo nivel

(Basic, Fortran,
Ensamblador, …)
1.0 INTRODUCCION
430 LET f=f(m): LET c=c(m): PRINT AT f,c;a$(m,8);AT
f+1,c;a$(m,14);AT f+2,c;a$(m,20): PRINT AT f,c;a$(m,7 TO 8);AT
f+1,c;a$(m,13 TO 14);AT f+2,c;a$(m,19 TO 20): BEEP .01,-10:
PRINT a$(m): BEEP .02,0: BRIGHT 0: GO TO 350
440 BEEP .07,15: BEEP .06,25: BEEP .07,35: BEEP .07,35: BEEP
.09,40: RETURN
450 INK 8: LET xx=c(n)*8-2: LET yy=177-(f(n)*8): PLOT xx,yy:
DRAW 27,0: DRAW 0,-27: DRAW -27,0: DRAW 0,27
460 LET xx=c(m)*8-2: LET yy=177-(f(m)*8): PLOT xx,yy: DRAW 27,0:
DRAW 0,-27: DRAW -27,0: DRAW 0,27: INK 0: RETURN
470 RESTORE 260: FOR n=1 TO 22
475 IF n=17 THEN LET g$(6,2)=".": GO TO 540 ¿?
480 READ p$ http://dis.um.es/~ginesgm/museo.html
490 FOR m=0 TO 7: READ f: POKE USR p$+m,f: NEXT m
520 IF n<12 THEN LET g$(n,1)=p$
530 IF n>11 THEN LET g$(n-11,2)=p$
540 NEXT n: RETURN
700 PAPER 5: LET y$=b$(k,1): LET t$=b$(k,2): LET f=f(k): LET
c=c(k): BEEP u,25: PRINT AT f,c+2;t$;AT f+1,c+2;" ";AT
f+2,c+2;" ": BEEP u,49: BEEP u,25
710 PRINT AT f,c+1;t$;" ";AT f+1,c+1;" ";y$;AT f+2,c+1;" v":
Ejemplo de programa BASIC
BEEP u,49: BEEP u,25
720 PRINT AT f(k),c(k);b$(k,2);" ";b$(k,2);AT f(k)+1,c(k);"
";b$(k,1);" ";AT f(k)+2,c(k);" v ": BEEP u,49: PAPER 7: RETURN
1.0 INTRODUCCION
Lenguajes de bajo nivel
• No existen procedimientos ni funciones
• No existen registros ni tipos definidos por el usuario
• No existen bloques estructurados (while, repeat, etc.)
• En definitiva: no hay abstracciones

• Y sin embargo… funciona:


1.0 INTRODUCCION
Evolución e historia de la
programación
Lenguajes Lenguajes
de bajo nivel estructurados

(Basic, Fortran,
Ensamblador, …) (Pascal, C,
Modula, ADA, …)
1.0 INTRODUCCION
UNIT calculo;
Concepto de
INTERFACE módulo/unidad
const
NMAX= 10; Separación de
MAX_GUARDA= 2000; interface/implementación
type
TDatosEnt= array [1..NMAX] of integer;
TDatosSal= record
NPasos: Shortint; Tipos definidos
Paso: array [1..NMAX-1] of record por el usuario
O1: byte;
O2: byte;
Fn: byte;
end; Procedimientos
end; y funciones
procedure Operar (var Arr: TDatosEnt; O1, O2, Func, Nivel: byte; var Vale: boolean); forward;
procedure CalculaCifras (var Entrada: TDatosEnt); forward;
procedure CalculaCifrasRec (var Entrada: TDatosEnt; PA, PB, Func, Nivel: byte); forward;
Lenguajes estructurados
1.0 INTRODUCCION
IMPLEMENTATION
Separación
var
suma, num: integer;
interface/
CopiaOrden: TDatosEnt; implementación
procedure OrdenaComb (var Entrada: TDatosEnt; Nivel: byte);
var
i, j, maxim, pmaxim, tmp: integer;
begin Procedimiento
CopiaOrden:= Entrada; con parámetros
num:= Nivel;
for i:= 1 to Nivel-1 do begin
maxim:= CopiaOrden[i];
pmaxim:= i;
j:= i+1; Bloques de
while j<=Nivel do begin control
if CopiaOrden[j]>maxim then begin
maxim:= CopiaOrden[j]; estructurados
....
end;
end;
end; Lenguajes estructurados
1.0 INTRODUCCION

• Procedimientos y funciones son abstracciones de


control
• Los tipos definidos por el usuario son abstracciones
de datos
• Las unidades, módulos o paquetes son abstracciones
de nivel superior: abstracciones de funcionalidades

Lenguajes estructurados
1.0 INTRODUCCION
Lenguajes estructurados
Inconvenientes:
• Los datos y los procedimientos de manipulación
sobre los mismos van por separado.
• Es necesario garantizar la ocultación de la
implementación.
• Proliferación de variables globales. ¿Qué papel
juegan?
• Los programas son cada vez más complejos y
difíciles de mantener.
1.0 INTRODUCCION

Evolución e historia de la
programación
Lenguajes Lenguajes Lenguajes
de bajo nivel estructurados orientados a objetos

(Basic, Fortran,
Ensamblador, …) (Pascal, C, (Smalltalk, C++, Java,
Modula, ADA, …) Eiffel, …)
Lenguajes orientados a objetos
// Interface
Una clase es un
class Timer { Tipo Abstracto de
private:
double StartTime; Datos
double ClockRate;
public: Encapsulación de
Timer (void); datos y
bool StartTimer (void);
double ReadTimer (void); operaciones
bool Exists;
};

class Elipse {
protected:
double Fcx, Fcy; Los datos son
double Frx, Fry, Fang;
void FsetXY (int x1, int y1, int x2, int y2); privados
public:
Elipse (int x1, int y1, int x2, int y2); Las
Elipse * Clonar (void); operaciones
void Pinta (IplImage *image, int color= 0, int ancho= -1);
}; son públicas
1.0 INTRODUCCION
Lenguajes orientados a objetos
// Implementación
Separación
Timer::Timer (void) interface/
{ implementación
LARGE_INTEGER *QW= new LARGE_INTEGER;
Exists= QueryPerformanceFrequency(QW);
ClockRate= QW->LowPart;
delete QW;
}

bool Timer::StartTimer (void)


{
LARGE_INTEGER *QW= new LARGE_INTEGER;
bool res= QueryPerformanceCounter(QW);
StartTime= QW->LowPart;
delete QW;
return res;
}
1.0 INTRODUCCION

Lenguajes orientados a objetos


• Una clase encapsula los datos de un tipo y las
operaciones sobre el mismo
• Una clase es, al mismo tiempo, un tipo abstracto de
datos y un módulo que encierra un conjunto de
funciones relacionadas
• Separación clara entre interface (parte visible desde
fuera) e implementación (oculta)
1.0 INTRODUCCION

Resolución de problemas
¿Cómo resuelve un problema de
programación un ingeniero?

A) Tecleando código en una máquina.

B) Siguiendo un proceso metódico.


1.0 INTRODUCCION
Resolución de problemas
¿Cómo construye un puente
ARQUITECTO un arquitecto?
INFORMÁTICO
1. Estudio de viabilidad, 1. Análisis del
análisis del terreno, problema
requisitos pedidos, etc.
2. Diseñar los planos del
2. Diseño del
puente y asignar los programa
materiales. (alg. y estr.)
3. Poner los ladrillos de 3. mplementación
acuerdo con los planos. (programación)
4. Supervisión técnica del
puente. 4. Verificación y
pruebas
Resolución de problemas
MÉTODO CIENTÍFICO INFORMÁTICO

1.Observación. 1. Análisis del


problema
2. Diseño del
2.Hipótesis.
programa
(alg. y estr.)
3.Experimentación. 3. mplementación
(programación)
4.Verificación. 4. Verificación y
pruebas
1.0 INTRODUCCION
Conclusiones
1. Proceso de análisis/diseño. No empezar
tecleando código como locos.
2. Usar abstracciones, respetando los dos
principios básicos:
• Encapsulación: las funciones relacionadas
deben ir juntas (clases, módulos, paquetes,
etc.).
• Ocultación de la implementación: los
aspectos de implementación no son visibles
fuera del módulo, clase, etc.
1.1 ABSTRACCIÓN

• Abstracción: Es la representación de las


características esenciales de un objeto o
entidad.
• Abstraer: Dar nombre a las cosas.
• Referenciar: Hacer uso del nombre.
1.1 ABSTRACCIÓN

¿QUÉ ES LA ABSTRACCIÓN DE DATOS?


• La abstracción de datos es una técnica o
metodología que permite diseñar estructuras
de datos.
• Consiste básicamente en representar bajo
ciertos lineamientos de formato las
características esenciales de una estructura
de datos.
• Este proceso de diseño se olvida de los
detalles específicos de implementación de
los datos.
1.2 ESTRUCTURA DE DATOS

¿QUÉ ES ESTRUCTURA DE DATOS?


• Cualquier colección o grupo de datos organizados
de tal forma que tengan asociados un conjunto
de operaciones para poder manipularlos, se dice
que conforma una estructura de datos.
1.3 TIPO DE DATO ABSTRACTO (TDA)

• Es la representación de una entidad u objeto para


facilitar su programación. Se compone de:
– Estructura de datos: Es la estructura de programación
que se selecciona para representar las características
de la entidad modelada
– Funciones de Abstracción: Son funciones que
permiten hacer uso de la estructura de datos, y que
esconden los detalles de dicha estructura,
permitiendo un mayor nivel de abstracción.
1.3 TIPO DE DATO ABSTRACTO (TDA)

• Se plasma la abstracción realizada al


diseñar una estructura de datos, esto pasa
a ser el mapa o plano con el cual se
construirá la estructura de datos y se
definirán claramente las reglas en las que
podrá usarse el TDA.
• La especificación lógica de un TDA consiste
de los siguientes cuatro puntos:
1.3 TIPO DE DATO ABSTRACTO (TDA)

l. Elementos que conformarán la estructura de datos.


Es el tipo de los datos que se guardará en la estructura.
Ejemplo:
números enteros, caracteres, fechas, registros con los datos de un
empleado, etcétera.
2.Tipo de organización en que se guardarán los elementos.
Existen cuatro tipos de organización para los datos en la estructura.
– Lineal: Si hay una relación de uno a uno entre los elementos.
– Jerárquica: Si hay una relación de uno a muchos entre los
elementos.
– Red: Si hay una relación de muchos a muchos entre los elementos.
– Sin relación: Si no hay relaciones entre los elementos
1.3 TIPO DE DATO ABSTRACTO (TDA)

3. Dominio de la estructura.
Este punto es opcional, y en él se describirá la capacidad de la
estructura en cuanto al rango posible de datos por guardar.

4. Descripción de las operaciones de la estructura.


– Cada operación que está relacionada con la estructura debe
describirse como:
– Nombre de la operación.
– Descripción breve de su utilidad.
– Datos de entrada a la operación.
– Datos que genera como salida la operación.
– Precondición: Condición que deberá cumplirse antes de
utilizar la operación para que se realice sin problemas.
– Poscondición: Condición en que queda el TDA después de
ejecutar la operación.
1.3 TIPO DE DATO ABSTRACTO (TDA)

• Especificación lógica del TDA: Cadena

– Elementos: todos los caracteres alfabéticos (letras


mayúsculas y minúsculas), caracteres numéricos y
caracteres especiales.

– Estructura: hay una relación lineal entre los caracteres

– Dominio: existen entre O y 80 caracteres en cada valor del


TDA CADENA. El dominio serán todas aquellas secuencias de
caracteres que cumplan con las reglas.
1.3 TIPO DE DATO ABSTRACTO (TDA)

operación…
Agregafinal
• Utilidad: Sirve para agregar un carácter al final de una cadena.
• Entrada: Cadena S y el carácter L, que se añadirá a la cadena S.
• Salida: Cadena S modificada.
• Precondición: La cantidad de caracteres en S es menor que 80.
• Poscondición: La cadena S tiene el carácter L que queda al
extremo derecho de la cadena.
1.3 TIPO DE DATO ABSTRACTO (TDA)

Operación
llena
• Utilidad: Sirve para verificar si una cadena está llena o no.
• Entrada: .Cadena S que será verificada.
• Salida: VERDADERO si la cadena S contiene ya 80 caracteres,
FALSO en caso contrario
• Precondición: Ninguna
• Poscondición: Ninguna (pues la cadena S no se modifica).
1.3 TIPO DE DATO ABSTRACTO (TDA)
En la abstracción de datos se pueden definir tres niveles de
trabajo:

• 1. El nivel lógico o abstracto se define la estructura de datos y las


operaciones relacionadas con ella. La descripción es independiente
del lenguaje de programación en el se usará la estructura.

• 2. El nivel físico o de implementación. En este nivel se decide el


lenguaje de programación para la implementación, los tipos de
datos ya definidos servirán para representarla y se implementarla

• 3. En el nivel aplicación o de uso el programador usará el TDA para


resolver determinada aplicación. El uso del TDA se limita a llamar
las operaciones sobre la estructura que se requiera cuidando
siempre de cumplir con las reglas de cada operación especificadas
en el nivel lógico.
1.4 MODELO ESTÁTICO DE IMPLEMENTACIÓN
1.4 MODELO ESTÁTICO DE IMPLEMENTACIÓN
1.5 MODELO DINAMICO DE IMPLEMENTACIÓN

• Los apuntadores pueden ser de cualquier tipo, se declaran


anteponiendo un *:

• int *puntero; //apuntador a un entero


• char *cad; //apuntador a caractér
• void *puntero; //puntero a cualquier tipo de dato

• El operador & se utiliza para obtener la dirección de una variable.

• En C se utiliza la función malloc para pedir memoria y free para


liberarla
1.6 MODELO PERSISTENTE DE IMPLEMENTACIÓN

PRIMERA INVESTIGACION
ELABORE UN PROGRAMA QUE LEA UN ARCHIVO
TEXTO EN C

+20 -20 PTS.


1.7 MODELOIMPLEMENTANDO
SIMULADOLADE IMPLEMENTACIÓN
CLASE MEMORIA

0 5
0 1 1 6

1 2
1 6
2 7
2 3

4 7
3 2
Libre = 0

8
4 3
5
8
5 6 3 -1
6 4
7

7 8 4
5
8 -1
Dato Link

max Libre = 0
M
1.7 MODELO SIMULADO DE IMPLEMENTACIÓN
DEFINIENDO LA ESTRUCTURA DE LA ZONA DATO

0 1

1 2
Dato Link
2 3

3 4
Libre = 0

4 5

5 6

6 7

7 8

8 -1
Dato Link

M
1.7 MODELO SIMULADO DE IMPLEMENTACIÓN
IMPLEMENTANDO METODOS DE LA CLASE MEMORIA
Libre = 0
CONSTRUCTOR SMEMORIA::CREAR()
INICIO
0 1
PARA CADA I DESDE 0 HASTA max
M[ I ].LINK = I+1
1 2
FIN
M[ max ].LINK = -1
LIBRE = 0 2 3
FIN
3 4

M 4 5

5 6

6 7

7 8

8 -1

Dato Link
1.7 MODELO SIMULADO DE IMPLEMENTACIÓN
IMPLEMENTANDO METODOS DE LA CLASE MEMORIA
0 5
PROCEDURE SMEMORIA::PEDIR_ESPACIO( ES DIR)
INICIO 1 6
X = LIBRE
SI X<> -1 ENTONCES 1 6
LIBRE = M [ X ].LINK 7
2
FIN SI
DIR = X
7
FIN 2
8
3
SUPOGASE EL OBJETO A DE TIPO SMEMORIA
8
A.PEDIR_ESPACIO(X) 3
A.PEDIR_ESPACIO(Y) -1
A.PEDIR_ESPACIO(Z) 4

4
X=0
5
Y=1
Z=2

Libre = 3
1.7 MODELO SIMULADO DE IMPLEMENTACIÓN
IMPLEMENTANDO METODOS DE LA CLASE MEMORIA
0 5
FUNCION SMEMORIA::LIBERAR_ESPACIO( DIR)
3 6
INICIO
SI DIR <> -1 ENTONCES
M [ DIR ].LINK = LIBRE 1 6
LIBRE = DIR 1 7
FIN SI
FIN 7
2
SUPOGASE EL OBJETO A DE TIPO SMEMORIA 8
0

LIBERAR_ESPACIO( 0 ) 8
LIBERAR_ESPACIO( 2 ) 3 -1
4

4
5

Libre = 2
1.7 MODELO SIMULADO DE IMPLEMENTACIÓN
IMPLEMENTANDO METODOS DE LA CLASE MEMORIA
FUNCION SMEMORIA::DISPONIBLE( )
INICIO 0 5
X = LIBRE 3 6
C = 0 // CONTADOR
MIENTRAS X <> -1
C=C+1 1 6
X=M[ X ].LINK 7
FIN 1
// RETORNAR C
FIN 7
FUNCTION SMEMORIA::OCUPADO()
2
8
INICIO 0
C= ( max +1 ) - DISPONIBLE
// RETORNAR C 8
FIN 3
FUNCION SMEMORIA::ESTADO( DIR ) -1
INICIO 4
X = LIBRE C = FALSO // BANDERA
MIENTRAS ( X <> -1) Y (C = FALSO)
SI X = DIR ENTONCES C = VERDADERO 4
FIN SI 5
X=M[ X ].LINK
FIN
// RETORNAR C // VERDADERO SI DIR ESTA LIBRE
FIN // FALSO SI DIR ESTA OCUPADA
Libre = 2
1.7 MODELO SIMULADO DE IMPLEMENTACIÓN
SIMULANDO MANEJO DE MAS DE UNA DIRECCION
MODIFICANDO LOS METODOS DE NUESTRA CLASE SMEMORIA
PROCEDURE SMEMORIA::PEDIR_ESPACIO( ES DIR) INICIO
X = LIBRE
SI X<> -1 ENTONCES 0 5
LIBRE = M [ X ].LINK 1 6
FIN SI
DIR = X
1 6
FIN
-1 7
// La modificación se refiere a que se puede pedir la
cantidad de espacio requerido por el usuario. 7
2
8
PROCEDURE SMEMORIA::PEDIR_ESPACIO( ES DIR, CANT ) INICIO
3
X = LIBRE
SI CANT< DISPONIBLE ENTOCES 8
DIR = LIBRE
3 -1
PARA CADA D= 1 HASTA (CANT -1) 4
X = M [ X ].LINK
LIBRE = M [ X ].LINK 4
M [ X ].LINK = -1 5
FIN SI
FIN

EJEMPLO
PEDIR_ESPACIO(Z, 2) // Z TENDRIA EL VALOR 0
Libre = 2
1.7 MODELO SIMULADO DE IMPLEMENTACIÓN
SIMULANDO MANEJO DE MAS DE UNA DIRECCION
MODIFICANDO LOS METODOS DE NUESTRA CLASE SMEMORIA
PROCEDURE SMEMORIA::PEDIR_ESPACIO( ES DIR, CANT ) INICIO
X = LIBRE
SI CANT< DISPONIBLE ENTOCES 0 5
DIR = LIBRE 1 6
PARA CADA D= 1 HASTA (CANT -1)
X = M [ X ].LINK
1 6
LIBRE = M [ X ].LINK
M [ X ].LINK = -1 -1 7
FIN SI
FIN 7
2
8
EJEMPLO
-1
PEDIR_ESPACIO(Z, 2) // Z TENDRIA EL VALOR 0
PEDIR_ESPACIO(M,1) // M TENDRIA EL VALOR DE 2
8
3 -1
4

4
5

Libre = 3
1.7 MODELO SIMULADO DE IMPLEMENTACIÓN
SIMULANDO MANEJO DE MAS DE UNA DIRECCION
MODIFICANDO LOS METODOS DE NUESTRA CLASE SMEMORIA
FUNCION SMEMORIA::LIBERAR_ESPACIO( DIR)
INICIO
SI DIR <> -1 ENTONCES 0 5
M [ DIR ].LINK = LIBRE 1 6
LIBRE = DIR
FIN SI 6
FIN 1
3 7
// Modificado para manejar varias direcciones

FUNCION SMEMORIA::LIBERAR_ESPACIO( DIR) 7


2
INICIO 8
-1
SI ESTADO(DIR) = FALSO ENTOCES
ANT = DIR
8
X = DIR 3
MIETRAS X<> -1 ENTONCES
-1
4
INICIO
ANT = X
X= M [ X ].LINK 4
FIN 5
M [ ANT ].LINK=LIBRE
LIBRE= DIR
FIN SI
FIN Libre = 0
EJEMPLO
LIBERAR_ESPACIO(Z) // Z=0
1.7 MODELO SIMULADO DE IMPLEMENTACIÓN
SIMULANDO MANEJO DE MAS DE UNA DIRECCION
MODIFICANDO LOS METODOS DE NUESTRA CLASE SMEMORIA
FUNCION SMEMORIA::PONER_DATO( DIR, VALOR , LUGAR )
INICIO
INICIO 0 5
SI ESTADO(DIR) = FALSO ENTOCES 500 1 6
X=DIR
C=0
EXISTELUGAR = FALSO 1 6
MIENTRAS X<> -1 Y C< LUGAR ENTONCES 100 -1 7
INICIO
C=C+1 7
2
SI C=LUGAR ENTOCES 8
EXISTELUGAR- VERDAD -1
M [ X ].DATO = VALOR
FIN SI 8
X= M [ X].LINK
3 -1
FIN 4
SI EXISTELUAGAR=FALSO ENTOCES
// ERROR LUGAR NO EXISTE 4
FIN SI 5
FIN SI
FIN

EJEMPLO
PONER_DATO(Z,100,2) // Z =0
Libre = 3
PONER_DATO(Z,500,1) // Z =0
1.7 MODELO SIMULADO DE IMPLEMENTACIÓN
SIMULANDO MANEJO DE MAS DE UNA DIRECCION
MODIFICANDO LOS METODOS DE NUESTRA CLASE SMEMORIA
FUNCION SMEMORIA::OBTENER_DATO( DIR, LUGAR )
INICIO
INICIO 0 5
SI ESTADO(DIR) = FALSO ENTOCES 500 1 6
X=DIR
C=0
EXISTELUGAR = FALSO 1 6
MIENTRAS X<> -1 Y C< LUGAR ENTONCES 100 -1 7
INICIO
C=C+1 7
2
SI C=LUGAR ENTOCES 8
EXISTELUGAR- VERDAD -1
VALOR M [ X ].DATO
FIN SI 8
X= M [ X].LINK
3 -1
FIN 4
SI EXISTELUAGAR=VERDAD ENTOCES
RETORNAR VALOR 4
CASO CONTRARIO 5
// ERROR LUGAR NO EXISTE
FIN SI
FIN SI
FIN
Libre = 3
EJEMPLO
OBTENER_DATO(Z,2) // RETORNA 100
1.7 MODELO SIMULADO DE IMPLEMENTACIÓN
SIMULANDO MANEJO DE MAS DE UNA DIRECCION
MODIFICANDO LOS METODOS DE NUESTRA CLASE SMEMORIA

1) IMPLEMENTAR EL COMPONENTE
DENOMINADO SMEMORIA
2) INSTALARLO EN EL EMBARCADERO C++
3) VERIFICAR QUE FUNCIONA EN MODO VISUAL

70 PTS.