Estructura de Datos Tipos Abstractos de Datos (TAD`S

Anuncio
INTRODUCCIÓN
Estructura de Datos
Tipos Abstractos de Datos (TAD’S)
Para poder obtener un programa que resuelva un problema dado, son
necesarios varios pasos :
•
•
•
•
•
Profs.
Lorna
Figueroa
Mauricio
Solar
UTFSM – 1 / 2008
La formulación y especificación del problema
El diseño de una solución
La implementación
Las pruebas y documentación
Evaluación de la solución
M.
F.
L.F.M.
2
1
¿Como obtener a partir de un problema, un programa
que lo resuelva?
•
Lo importante es saber claramente lo que se quiere resolver (tener
especificaciones claras).
•
Hay problemas que no tienen definido un modelo claro, que sólo se puede definir
experimentando.
•
Una vez conocido el modelo del problema, se intenta resolver basándose en
dicho modelo.
• Esta solución se alcanza mediante la aplicación de un algoritmo.
•
•
Otros se pueden plantear usando modelos formales: hay un modelamiento que se
soporta en una teoría bien definida (matemática, física, ciencias de la
computación, etc.)
3
Algoritmo: una secuencia finita de instrucciones, cada una de ellas con un
significado muy claro, que tienen realizarse con una cantidad finita de esfuerzo
y en un tiempo finito.
4
1
MODELO
MATEMATICO
ALGORITMO
INFORMAL
TIPOS DE
DATOS
ABSTRACTOS
ESTRUCTURA
DE DATOS
PROGRAMA
EN EL
LENGUAJE
PROGRAMA
EN PSEUDOCODIGO
INSTANCIACIONES
Especificación
Especificación
del
delproblema
problema
EJECUCION
EN LA
MAQUINA
Programa
Programa
Algoritmo
Definición
de TDA’s
5
Abstracción - Modelo
6
Abstracción - Modelo
• Uno de los objetivos de la computación es resolver
problemas.
• Normalmente los problemas son confusos y lo primero que se
tiene que hacer es entender el problema para apartar los
detalles no esenciales y dejar sólo los que sirven.
• Tu debes hacer tu propia representación abstracta o modelo
del problema. Este proceso se llama abstracción.
Problema
• Entonces, el modelo define una perspectiva abstracta del
problema.
• Esto implica que el modelo se enfoca solamente en aspectos
relacionados con el problema, definiendo solo las propiedades
del problema.
• Estas propiedades incluyen
• los datos que son afectados,
• las operaciones que son identificadas por el problema.
abstracción
modelos
7
8
2
Tipo de datos (TD)
Tipo de datos (TD)
Concepto
• En un lenguaje de programación, el tipo de datos de una
variable (o constante o resultado de una función) está
determinado por:
• conjunto de valores que dicha variable puede tomar
• conjunto de operaciones que se pueden realizar con
variables del mencionado tipo (argumentos y/o resultado).
Ejemplo:
• el tipo boolean tiene dos valores: {false, true},
• es decir que una variable de este tipo podría tomar
sólo uno de esos valores;
• con respecto a las operaciones cuenta con la negación,
la conjunción y la disyunción cuya representación es:
not, and y or respectivamente.
9
10
Estructura de datos
Estructura de Datos
Representación en el computador de los datos o
características relevantes de un objeto o de un
concepto.
• Una estructura de datos es una colección de variables
organizadas de alguna manera determinada.
Los datos o características que se considerarán
relevantes dependerán del contexto en que se
aplicarán.
• Es una manera de almacenar y organizar datos para
facilitar el acceso, modificaciones y poder operar con sus
elementos.
• Se construyen mediante agrupamiento de elementos
básicos de almacenamiento.
• Agrupamientos reciben un nombre que se puede usar
para formar otras estructuras.
círculo
C1
•
datos
centro
•
radio
•
color
11
12
3
Estructura de datos
Abstracción de Datos - TAD
• Un TDA es un tipo de dato definido por el programador que se
puede manipular de un modo similar a los tipos de datos
definidos por el lenguaje,
Para formar las agrupaciones existen varios mecanismos:
• Arreglo: formado por una secuencia de celdas o estructuras
de tipos iguales. Cada celda de un arreglo se referencia
mediante un índice.
• Los TDA constituyen una forma de generalización
encapsulamiento de los aspectos más importantes de
información que se debe manejar en la resolución de
problema, sin considerar las cuestiones relativas a
implementación.
• Registro: formado por una colección de celdas, campos, de
tipos posiblemente distintos. Se pueden agrupar en arreglos.
13
Ejemplo:
• int vector [10];
• Un TDA es una generalización de los tipos de datos básicos y
de las operaciones primitivas.
++
14
Abstracción de Datos - TAD
Abstracción de Datos - TAD
TAD
TAD == Representación
Representación
(estruct.
(estruct.de
dedatos)
datos)
y
la
un
la
declaración del arreglo
Operaciones
Operaciones
(métodos)
(métodos)
vector
sumar
insertar
asignar
eliminar
15
buscar
16
4
Definició
Definición
Abstracción de Datos - TAD
Formalmente
FormalmenteelelTDA
TDAes
esuna
unatripleta
tripleta(D,
(D,F,
F,A)
A)con
conlos
los siguientes
siguientes
componentes:
componentes:
• Un TAD engloba dos clases de abstracciones:
• Abstracciones de datos.
•• Un
Unconjunto
conjuntode
dedominios,
dominios,DD
• Abstracciones funcionales.
•• Un
Unconjunto
conjuntode
defunciones
funcionessobre
sobrelos
losdominios,
dominios,FF
•• Un
Un conjunto
conjunto de
de axiomas
axiomas oo propiedades
propiedades definidas
definidas aa partir
partir de
de
las
lasfunciones
funcionesyyelementos
elementosde
delos
losdominios,
dominios,AA
17
¿Cómo realizar la especificación formal
un TDA?
Abstracción de Datos - TAD
• Abstracciones de datos
• Definición del tipo: Se debe indicar
• el nombre tanto del TDA y del elemento base del mismo
y/o otros TDA involucrados en la definición del TDA
• los invariantes de representación.
• Aparecen al abstraer el significado de los diferentes tipos
de datos significativos que intervienen en el problema.
• Permiten definir nuevos tipos de datos especificando sus
posibles valores y las operaciones que los manipulan.
• Invariante de un TDA (Dominio de la estructura): Es una
proposición que expresa el conjunto de valores válidos del
TDA.
• El invariante permite saber qué elementos pertenecen o no
al TDA (opcional).
• Abstracciones funcionales
• Surgen al plantearse de una manera abstracta las
operaciones significativas del problema.
• Permiten dar a una aplicación operaciones que no están
definidas directamente en el lenguaje en el que se está
trabajando.
18
19
20
5
Tipos de especificaciones formales de un
TDA:
¿Cómo realizar la especificación formal
un TDA?
1. Axiomática: expresión de la forma de las operaciones,
indicando las reglas a seguir para realizar cada operación.
• La especificación de un TDA es la descripción del
comportamiento del mismo. Debe formalizarse.
• Indica qué hace el TDA.
• Especificar la sintaxis correspondiente a las operaciones
propias del TDA, o primitivas del mismo.
2. Semántica: expresión de la operatoria de las operaciones.
• Se especifican las consecuencias de las operaciones para
el TDA.
• Se da mediante el lenguaje natural, o mediante
especificación algebraica.
• Generalmente con notación funcional, se indica sobre qué
conjunto actúan las operaciones y qué dan como resultado.
21
22
Ejemplo: Especificación Lógica del TDA
Cadena
Descripción de las operaciones
Cada operación relacionada con la estructura se describe con:
• 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.
• Pre-condición: Condición que deberá cumplirse antes de
utilizar la operación para que se realice sin problemas
• Post-condición:Condición en que queda el TDA después de
ejecutar la operación.
23
•
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 0 y 80 caracteres en cada valor del
TDA CADENA.
• El dominio serán todas aquellas secuencias de caracteres
que cumplan con las reglas.
24
6
Ejemplo: Especificación Lógica del TDA
Cadena
•
Ejemplo: Especificación Lógica del TDA
Cadena
Operaciones:
• BORRA_INICIO
• UTILIDAD: Sirve para eliminar el primer carácter de
una cadena.
• ENTRADA: Cadena S sobre la que se desea eliminar
el primer carácter.
• SALIDA: El carácter más a la izquierda de la cadena
S y la cadena S modificada.
• PRECONDICIÓN: La cantidad de caracteres es
mayor que cero.
• POSTCONDICIÓN: La cadena S tiene todos los
caracteres, menos el primero.
•
Operaciones: (continuación)
• AGREGA_FINAL
• 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.
• POSTCONDICIÓN: La cadena S tiene el carácter L
que queda al extremo derecho de la cadena.
25
26
Ejemplo: Especificación Lógica del TDA
Cadena
•
Ejemplo: Especificación Lógica del TDA
Cadena
Operaciones: (continuación)
• VACÍA
• UTILIDAD: Sirve para verificar si una cadena esta
vacía o no.
• ENTRADA: Cadena S que se verificará
• SALIDA: VERDADERO si la cadena S no tiene
caracteres, FALSO en caso contrario.
• PRECONDICIÓN : Ninguna
• POSTCONDICIÓN: Ninguna (pues la cadena S no
se modifica).
•
27
Operaciones: (continuación)
• LLENA
• UTILIDAD: Sirve para verificar si una cadena esta
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
• POSTCONDICIÓN: Ninguna (pues la cadena S no se
modifica).
28
7
Ejemplo: Especificación Lógica del TDA
Cadena
•
TAD’s - Representación
Operaciones: (continuación)
• INVIERTE
• UTILIDAD: Sirve para invertir el orden de los
caracteres en una cadena.
• ENTRADA: Cadena S a la que se desea invertir el
orden de los caracteres.
• SALIDA: Cadena S modificada.
• PRECONDICIÓN: Ninguna
• POSTCONDICIÓN: La secuencia de caracteres en la
cadena S se invierte, de forma que el primer carácter
• Es la forma concreta en que se representan los datos en un
determinado lenguaje de programación.
• Se debe ocultar la representación de los elementos del tipo de
modo que sólo se pueda actuar sobre ellos con las operaciones
proporcionadas.
• Una vez definido se podrán declarar variables de ese tipo y
operar con ellas.
29
30
el TDA NumeroComplejo
TAD’s - Implementación
• Es la forma específica en que se expresan las operaciones.
• Aquí se considerará la estructura de datos más conveniente.
• Está dado por un grupo de instrucciones que serán ejecutadas
por el computador, y se escribe en un lenguaje de
programación.
• Cada implementación corresponde a alguna especificación.
• Normalmente la implementación del tipo se realiza en un
módulo separado que será enlazado al programa principal.
• Los algoritmos más la representación da como resultado una
implementación del TAD.
31
• Definición del tipo
• Numero complejo: Conjunto de pares de elementos (a,b) de
tipo entero.
• Operaciones: descripción de cada una de elas
• suma :
NumeroComplejo × NumeroComplejo Æ NumeroComplejo
suma((x, y), (u, v)) = (x + u, y + v)
• producto :
NumeroComplejo × NumeroComplejo Æ NumeroComplejo
producto((x, y), ((u, v), = (xu − yv, xv + yu)
• ………
32
8
TAD’s - Ejemplo
el TDA NumeroRacional
• Definición del tipo
• Numero racional: Conjunto de pares de elementos (a,b) de
tipo entero, con b ≠ 0.
• Operaciones:
• CrearRacional: a, b = (a,b)
• División: (a,b) / (c,d) = (a*d , b*c)
• Numerador: (a,b) = a
• Denominador: (a,b) = b
• ValorReal: (a,b) = a/b
• Potencia: (a,b)^c = (a^c , b^c)
• Editor de archivos secuenciales con las operaciones:
•
•
•
•
•
Crear un nuevo archivo,
Insertar,
Reemplazar,
Eliminar,
Avanzar y retroceder, actuando siempre sobre el registro
actual.
33
TAD’s - Ejemplo
34
TAD’s - Ejemplo
Operaciones:
• Archivo_Nuevo (Archivo): Crea un archivo nuevo sin
introducir ningún registro (número de registros es 0).
• Insertar (Archivo, Registro): Inserta un registro después del
registro actual y el nuevo pasa a ser el actual.
• Reemplazar (Archivo, Registro): Cambia el registro actual por
el nuevo.
• Eliminar (Archivo): Borra el registro actual y una vez
eliminado el actual pasa a ser el siguiente.
• Avanzar (Archivo): El registro siguiente pasa a ser el actual.
• Retroceder (Archivo): El registro anterior pasa a ser el actual.
35
• Implementación de las operaciones:
Archivo_Nuevo (Archivo) {
Longitud = 0;
Reg_Actual = 0;
}
36
9
TAD’s - Ejemplo
TAD’s - Ejemplo
Insertar (Archivo, RegNuevo) {
for (j = Longitud; j <= RegActual; j--)
Archivo [j+1] = Archivo[j];
Archivo[RegActual+1] = RegNuevo;
Longitud ++;
RegActual ++;
}
Retroceder (Archivo) {
if RegActual != 0
RegActual --;
}
37
38
TAD’s - Ejemplo
TAD’s - Ejemplo
Eliminar (Archivo) {
if RegActual != 0
for( j =Actual; j <= Longitud-1; j++)
Archivo[j] = Archivo[j+1];
if RegActual >Longitud
RegActual --;
}
Avanzar (Archivo) {
if RegActual != Longitud
RegActual ++;
}
39
40
10
TAD’s - Ejemplo
TAD’s - Ejemplo
Operación
Operación
r1
r1==Crear_Racional
Crear_Racional (2,
(2, 3);
3);
r2
r2==Crear_Racional
Crear_Racional(5,
(5, 7);
7);
//// sses
esla
lasuma
suma de
der1
r1yyr2
r2
ss==Crear_Racional
Crear_Racional (( Numerador(
Numerador( r1
r1 )) ** Denominador
Denominador (( r2
r2 ))
++Numerador
Numerador((r2
r2))**Denominador
Denominador(( r1
r1 ),),
Denominador
Denominador((r1
r1 ))**Denominador
Denominador (( r2
r2 )) ););
printf(“
printf(“%d
%d // %d
%d“,“,Numerador
Numerador((ss),),Denominador
Denominador(( ss))))
Reemplazar (Archivo,RegNuevo) {
if RegActual != 0
Archivo[RegActual] = RegNuevo;
}
41
42
Implementació
Implementación
ESPECIFICACIÓN
#define
#defineMAX
MAX100
100
typedef
typedefstruct
structRacional
Racional{{
int
intnum,
num,den;
den;
};
};
Racional
Racionalinfo[MAX];
info[MAX];//// arreglo
arreglopara
paraalmacenar
almacenarlos
losracionales
racionales
int
//// para
intultimo
ultimo==-1;
-1;
paracontrolar
controlareleltamaño
tamañodel
delarreglo
arreglo
Racional
RacionalCrear_Racional
Crear_Racional(Entero
(Enteron,d)
n,d){{
Necesita:
dos
Necesita:
dosvalores
valoresenteros,
enteros,nnyyd.
d.
Produce:
elelnúmero
Produce:
númeroracional
racionalnn//d.
d.
Error:
si
d
es
cero.
Error:
si d es cero.
}}
Entero
EnteroNumerador
Numerador(Racional
(Racionalrr)) {{
Necesita:
un
Necesita:
unracional
racionalr.r.
Produce:
elelnumerador
Produce:
numeradorde
der.r.
}}
Un racional
Entero
EnteroDenominador
Denominador(Racional
(Racionalrr)) {{
Necesita:
un
Necesita:
unracional
racionalr.r.
Produce:
eleldenominador
Produce:
denominadorde
der.r.
}}
info
43
2
3
3
8
9
num
5
17
5
den
último
4
MAX
1
44
11
Implementació
Implementación
Implementació
Implementación
int
intCrear_Racional
Crear_Racional(int
(intn,
n,int
intd,d,int
inti)i){{
ifif(d
(d==
==0)
0){{
printf("\n
printf("\nError:Division
Error:Divisionpor
porcero");
cero");
getch();
getch();
exit(0);
exit(0);
}}
else
else{{
info[i].num
info[i].num==n;
n;
info[i].den
info[i].den==d;
d;
ultimo++;
ultimo++;
}}
return
returnultimo;
ultimo;
}}
int
intNumerador
Numerador(int
(intr)r){{
return
returninfo[r].num;
info[r].num;
}}
int
intDenominador
Denominador(int
(intr)r){{
return
returninfo[r].den;
info[r].den;
}}
45
Implementació
Implementación
46
Implementació
Implementación
void
voidImprime_Racional(void)
Imprime_Racional(void){{
int
intnum;
num;
printf("\nIndique
printf("\nIndiquelalaposicion
posiciondel
delracional
racionalque
quequiere
quierever:
ver:");
");
scanf("%d",
scanf("%d",&num);
&num);
if(
if(num
num>=
>=ultimo)
ultimo)
printf(“\n
printf(“\nError,
Error,fuera
fuerade
derango”);
rango”);
else
else
printf(
printf("\nRacional
"\nRacionalingresado
ingresadoes
es::%d/%d
%d/%d en
enlalaposicion
posicion%d",
%d",
Numerador(num),
Numerador(num),Denominador(num),
Denominador(num),num);
num);getch();
getch();
}}
47
#include
#include<stdio.h>
<stdio.h>
#include
#include<stdlib.h>
<stdlib.h>
#include
#include<conio.h>
<conio.h>
#define
#defineMAX
MAX100
100
typedef
typedefstruct
structRacional
Racional{{
int
intnum,
num,den;
den;
};
};
Racional
Racionalinfo[MAX];
info[MAX]; //// arreglo
arreglodonde
dondese
sealmacenaran
almacenaranlos
los
////numeros
numerosracionales
racionales
int
intultimo
ultimo==-1;
-1;
48
12
Implementació
Implementación
int
intmain()
main(){{
int
intnume,
nume,deno,
deno,pos,
pos,i,i,n;
n;
printf("\n
printf("\nCuantos
Cuantosdatos?
datos?");
"); scanf("%d",&n);
scanf("%d",&n);
ifif((nn>=
>=ultimo)
ultimo){{
printf(“\n
printf(“\nError,
Error,fuera
fuerade
derango”);
rango”);
return
return1;
1;
}}
else
else
for(i
for(i==0;
0;ii<<n;
n;i++)
i++){{
printf("\nNumerador:
printf("\nNumerador:");
"); scanf("%d",
scanf("%d",&nume);
&nume);
printf("\nDenominador:
printf("\nDenominador:");
"); scanf("%d",
scanf("%d",&deno);
&deno);
pos
pos==Crear_Racional(nume,
Crear_Racional(nume,deno,
deno,i);
i);
}}
Imprime_Racional();
Imprime_Racional();
return
return0;
0;
}}
49
13
Descargar