Documente Academic
Documente Profesional
Documente Cultură
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
Algoritmos
+
PROBLEMA PROGRAMA
Estructuras
de datos
Corrector ortográfico
palabro
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
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)?
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
(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
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;
}
Resolución de problemas
¿Cómo resuelve un problema de
programación un ingeniero?
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.
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:
PRIMERA INVESTIGACION
ELABORE UN PROGRAMA QUE LEA UN ARCHIVO
TEXTO EN C
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
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.