Post on 08-Nov-2015
Tipos de Datos CompuestosContenido del Tema
6.1. Arrays
6.2. Cadenas de caracteres
6.3. Registros
6.4. Bsqueda y ordenacin
TEMA
6
TEMA
6
Introduccin a los Computadores
Introduccin a los Computadores
Necesidad de los Arrays
Con los tipos de datos estudiados hasta ahora.
Como representamos colecciones de valores relacionados como listas de temperaturas,
calificaciones ....?
Introduccin a los Computadores
Necesidad de los ArraysEjemploEjemplo:: Supongamos que un fabricante de mquinas de caf est interesado en conocer la popularidad de las diferentes combinaciones de caf que dispensa la mquina. La mquina en cuestin dispone de cuatro botones etiquetados como 1, 2, 3 y 4 junto con una nota que explica la funcin de cada uno de ellos:
(1) Caf solo, sin azcar.(2) Caf solo, con azcar.(3) Caf con leche, sin azcar.(4) Caf con leche, con azcar.
Inic
ializ
ar
cont
ador
es
Leer
Sel
ecci
n
Sele
cci
n !=
0
Act
ualiz
ar
Con
tado
r
Leer
Sel
ecci
n
Impr
imir
cont
ador
es
1Se
lecc
.4
SiN
o
Si No
Fin
Inic
io
Introduccin a los Computadores
Necesidad de los ArraysALGORITMO CafeteraVAR
N soloSin, soloCon, conLeche,sinLeche, seleccion
INICIOsoloSin = 0soloCon = 0conLeche = 0sinLeche = 0Escribir (Que nmero de bebida
ha seleccionado?: )Leer (seleccion)
MIENTRAS seleccion != 0 HACERCASO seleccion SEA
1: soloSin = soloSin+12: soloCon = soloCon+13: conLeche= conLeche+14: sinLeche= sinLeche+1
SINO//No hacer nadaFINCASO
Escribir(Que nmero debebida ha seleccionado?:)
Leer ( seleccion )FINMIENTRASEscribir (Solo Sin Azcar: )Escribir ( soloSin )
....
FIN Cafetera
Introduccin a los Computadores
Necesidad de los Arrays
Qu ocurrira si aumentase el nmero de selecciones ( por ejemplo a 20 )?
Necesitaramos:20 variables.20 inicializaciones.La sentencia CASO tendra 20 ramificaciones.La impresin tendra 20 sentencias.
Introduccin a los Computadores
Necesidad de los ArraysALGORITMO CafeteraVAR
N soloSin, soloCon, conLeche,sinLeche,teCon, teSin,...,colaCon, seleccion
INICIOsoloSin = 0soloCon = 0conLeche = 0sinLeche = 0teSin = 0teCon = 0...
colaCon = 0Escribir (Que nmero de
bebida ha seleccionado?: )Leer (seleccion)
MIENTRAS seleccion != 0 HACERCASO seleccion SEA
1: soloSin = soloSin+12: soloCon = soloCon+1
...
20:colaCon = colaCon+1SINO// No hacer nadaFINCASOEscribir(Que nmero de
bebida ha seleccionado?:)Leer (seleccion)
FINMIENTRASEscribir (Solo Sin Azcar: )Escribir (soloSin)....
FIN Cafetera
Introduccin a los Computadores
Concepto de Array
Array Array = Estructura de datos= Estructura de datos
Homogneos ( tipo base ) Ordenados ( ndice ) Finita Tamao fijo
Introduccin a los Computadores
Concepto de Array
El tipo array:Formado por todos los posibles arrays de tipo base T que se puedan formar.
Cardinalidad:#Array = (#TipoBase)#Tipondice
Declaracin:TIPOSTipoBase [IndInicial..IndFinal]
Tipondice
Introduccin a los Computadores
Concepto de Array
VARIABLES nuevoArray
EJEMPLOEJEMPLOTIPOS
RR TipoMes [1..31]
Introduccin a los Computadores
Concepto de Array
A R R A Y m esH oras
Fig. 1 - E squem a de la estructura array
C om ponente 1
C om ponente 2m esH oras[3]
C om ponente 31
.......
1 2 3 4 26 27 28 31Indice:
VARIABLES
TipoMes mesHoras
Introduccin a los Computadores
Concepto de Array
Operaciones con Arrays:
1.- Asignacin.2.- Lectura / escritura.3.- Recorrido ( Acceso secuencial ).4.- Modificacin.5.- Ordenacin.6.- Bsqueda.
Introduccin a los Computadores
Concepto de ArrayAsignacin
Asignacin de un elemento:mesHoras[20] = 7.0
Asignacin de todos los elementos:PARA posicion = 1 HASTA 31 HACER
mesHoras[posicion] = 10.0FINPARA
Introduccin a los Computadores
Concepto de ArrayAsignacin de Arrays
VAR
TipoMes mes, copiaMesINICIO
copiaMes = mesFIN
Es equivalente a:PARA posicion = 1 HASTA 31 HACER
copiaMes[posicion]= mes[posicion]FINPARA
Introduccin a los Computadores
Concepto de ArrayLectura / Escritura
Normalmente se realizan haciendo uso de estructuras repetitivas, aunque pueden intervenir estructuras
selectivas:
PARA posicion = 1 HASTA 31 HACERSI posicion MOD 2 != 0 ENTONCES
Leer(mes[posicion])FINSI
FINPARA
Introduccin a los Computadores
Concepto de ArrayAcceso Secuencial
Realizacin de una accin genrica sobre todos los elementos del vector:
Ejemplo 1: Escritura de un array
PARA posicion = 1 HASTA 31 HACEREscribir (mes[posicion])
FINSI
Ejemplo 2: Escritura de un array usando las estructuras repetitivas MIENTRAS y REPETIR
Introduccin a los Computadores
Concepto de Array
Ejemplo 3: Calculo de la suma y de la media de los valores del Array puntos.ALGORITMO MediaPuntosTIPOS
ZZ TPuntos [1..30]VAR
TPuntos puntosZZ media, suma, componente
INICIOsuma = 0PARA componente = 1 HASTA 30 HACER
Leer(puntos[componente])suma = suma + puntos [componente]
FINPARAmedia = suma DIV 30
FIN MediaPuntos
Aadir subprogramacin
Introduccin a los Computadores
Concepto de Array
Solucin al problema de la mquina de caf:
Tipos de Bebidas:
1.- Caf solo, sin azcar 5.- T solo, sin azcar 2.- Caf solo, con azcar 6.- T solo, con azcar3.- Caf con leche, sin azcar 7.- T con leche, sin azcar4.- Caf con leche, con azcar 8.- T con leche, con azcar
Introduccin a los Computadores
Concepto de Array
Representacin mediante un vector
1 2 3 4 5 6 7 8fre c u e n c ia s
Caf solo, sin azcarCaf solo, con azcar
T solo, sin azcarCaf con l.,con azcar
Caf con l., sin azcar
T solo, con azcarT con l., sin azcar
T con l., con azcar
Introduccin a los Computadores
Concepto de ArrayALGORITMO CafeteraCONST
NN NUMERO = 8TIPOS
NN TArrFreqTArrFreq [1..NUMERO]VAR
TArrFreqTArrFreq frecuenciaNN bebida
INICIO// Inicializacin de las frecuenciasPARA bebida=1 HASTA NUMERO HACER
frecuencia[bebida] = 0FINPARAEscribir (Que nmero de bebida ha
seleccionado? (0 para acabar): )
Leer(bebida)MIENTRAS bebida != 0 HACER
SI (bebida >=1)Y(bebida
Introduccin a los Computadores
Concepto de Array
Problemas comunes al trabajar con arrays:
1.- Inicializacin.
2.- Indice fuera de rango.
Introduccin a los Computadores
Ejercicios con Arrays
Ejercicio:
Implementar un conjunto. Tipo Operaciones bsicas
Introduccin a los Computadores
Arrays en C++
Declaracin de variables:float vector[3];float vector[3] = {17.3 , 3.5 , 7.0};
Declaracin de tipos:typedef float TVector [3];TVector vector;
0 1 2
Introduccin a los Computadores
Arrays en C++
Uso de arrays como parmetros
typedef int TVector[20];void leerVector (TVector v, int elementos)
Introduccin a los Computadores
Arrays de Varias Dimensiones
Necesidad?
Grupos:BidimensionalesMultidimensionales
Introduccin a los Computadores
Arrays de Varias Dimensiones
T I P O S NN T E j e m p lo [ 1 ..N ] [ 1 ..M ]
.
...
.
....
1
2
N
1 2 3 M -2 M -1 MIn d ic e :
Array Bidimensional: Vector de Vectores.
Introduccin a los Computadores
T IP O SNN T M a t ri z [ 1 . . 5 ] [ 1 . . 6 ]
V A R IA B L E ST M a t r iz m
F ila 1
F ila 5
F ila 2
F ila 3
F ila 4
C o lu m n a 1
C o lu m n a 2
C o lu m n a 3
C o lu m n a 6C o lu m n a 5
C o lu m n a 4
T a b l a o M a t r i z
2 32 2 2 4 2 52 1 2 6
3 33 2 3 4 3 53 1 3 6
4 34 2 4 4 4 54 1 4 6
5 35 2 5 4 5 55 1 5 6
1 31 2 1 4 1 51 1 1 6
Arrays de Varias DimensionesArray Bidimensional: Tabla / Matriz
Introduccin a los Computadores
Introduccin a los Computadores
Arrays de Varias Dimensiones
Ejemplo 1: Algoritmo que procese una matriz de 6 x 8 de enteros (fila a fila).
aaaaaaaabaaaaaaaabaaaaaaaabaaaaaaaabaaaaaaaabaaaaaaaabcccccccc
Introduccin a los Computadores
Arrays de Varias DimensionesALGORITMO FormatoCONST
NN MaxFil = 6NN MaxCol = 8
TIPOSZZ TVectorFilTVectorFil [1..MaxFil]ZZ TVectorColTVectorCol [1..MaxCol]TVectorCol TMatrizTVectorCol TMatriz [1..MaxFil]
VAR
TMatrizTMatriz aTVectorFilTVectorFil b //Suma filasTVectorColTVectorCol c // Suma columnasNN fi, coZZ suma
INICIOEscribir(Escribe los valores dela matriz, fila a fila: )PARA fi = 1 HASTA MaxFil HACER
PARA co = 1 HASTA MaxCol HACERLeer(a[fi][co])
FINPARA
FINPARA
/* Suma de filas */PARA fi = 1 HASTA MaxFil HACER
suma = 0PARA co = 1 HASTA MaxCol HACERsuma = suma + a[fi][co]
FINPARA
b[fi] = sumaFINPARA
Subprogramas
Introduccin a los Computadores
Arrays de Varias Dimensiones/* Suma de columnas */PARA co = 1 HASTA MaxCol HACER
suma = 0PARA fi = 1 HASTA MaxFil HACER
suma = suma + a[fi][co]FINPARAc[co] = suma
FINPARA
/* Escribir la matriz */PARA fi = 1 HASTA MaxFil HACER
PARA co = 1 HASTA MaxCol HACEREscribir(a[fi][co])
FINPARAEscribir(b[fi], \n)
FINPARA
// Escribir suma de columnasPARA co = 1 HASTA MaxCol HACER
Escribir(c[co])FINPARA
FIN Formato
Introduccin a los Computadores
Arrays de Varias DimensionesEj.: Producto Matricial
ALGORITMO MultiplicacinCONST
NN MaxInd = 10TIPOS
RR TMatriz [1..MaxInd][1..MaxInd]VAR
TMatrizTMatriz matrizA,matrizB,matrizCNN numFilas, numColumA, numColumBRR suma
INICIO// Lectura de datosEscribir (n de filas y columnas)Leer (numFilas, numColumA)LeerMatriz (matrizA,numFilas, numColumA)Leer (numColumB)LeerMatriz (matrizB,numColumA, numColumB)/* El nmero de filas de B debe coincidir
con el de columnas de A */// Proceso C = AxBmatrizC = ProductoMat(matrizA, matrizB,
numFilas, numColumA,numColumB)
// Presentacin de resultadosEscribirMat (matrizC, numFilas,
numColumB)FIN Multiplicacin
Introduccin a los Computadores
Arrays de Varias DimensionesEj.: Producto Matricial
ALGORITMO TMatriz ProductoMat (EE TMatriz mA, mB; EE N totFil,filCol totCol)VAR
TMatriz resultN k, fil, colR suma
INICIO
PARA fil = 1 HASTA totFil HACERPARA col = 1 HASTA totCol HACER
suma = 0.0PARA k = 1 HASTA filCol HACER
suma = suma + mA[fil][k] * mB[k][col]FINPARAresult[fil][col] = suma
FINPARAFINPARADEVOLVER result
FIN ProductoMat
Producto escalar de una fila
de A por una columna de B
Introduccin a los Computadores
Arrays de Varias Dimensiones
Arrays MultidimensionalesMultidimensionales ?Arrays de tres, cuatro,..., n dimensiones.
Ejemplo:CONST
N MaxInd1 = 10N MaxInd2 = 10N MaxInd3 = 20
TIPOSRR TVectorTVector [1..MaxInd3]TVector TMatrizTVector TMatriz [1..MaxInd2]TMatrizTMatriz TArray3DTArray3D [1..MaxInd1]
VARTArray3DTArray3D tridimensional
Equivale a:
R TArray3D[1..MaxInd1][1..MaxInd2][1..MaxInd3]
Introduccin a los Computadores
Array Tridimensional
Columnas
Filas
Profun
didad
NN TArray3D [1..Max1][1..Max2][1..Max3]
Introduccin a los Computadores
Array multidimensional en C++
typedef float TMatriz [10][10];
typedef float TCubo [10][10][10];
Introduccin a los Computadores
Cadenas de Caracteres
Necesidad de las Cadenas de Caracteres? Definicin: Secuencia de cero o ms smbolos. Longitud: Nmero de caracteres que contiene.
Ejemplos: 12 de octubre de 1.492Por fin es Viernes 123
Introduccin a los Computadores
Delimitador? Usaremos el CHR(0) Subcadena?
Ejemplos:12 de viernes
Cadenas de Caracteres
\0
Introduccin a los Computadores
Cadenas de Caracteres
Representar cadenas de caracteres?Mediante un vector de caracteres
Ejemplo:CONSTNN LONGITUD = 17
TIPOSCC TCadena [1..LONGITUD]
VARTCadena cadena
Introduccin a los Computadores
Cadenas de Caracteres
# 5 g/ . 2 3 171 161514131211109876 5 4
Uno de los posibles estados iniciales del vector cadena
Estado inicial de la variable cadena
Variable indefinida:
Cuando se declara una variable cualquiera, no se puede hacer ninguna suposicin sobre el contenido de la variable.
Introduccin a los Computadores
Cadenas de Caracteres
Definicin de la variable cadena de caracteres:
Para ello deberemos situar en la primera posicin de la misma, el delimitador CHR(0) que representaremos grficamente por:
Introduccin a los Computadores
Cadenas de Caracteres
Ejemplo: Definicin de la variable cadena.
# 5g g/.2 3 171 16151413121110987654
El vector Cadena est vaco.
cadena[1] = CHR(0)
Introduccin a los Computadores
Cadenas de Caracteres
El final de una cadena de caracteres lo marcaremos con el delimitador.
Ejemplo:
o r 5P ggolpmejE2 3 1 71 1 61 51 41 31 21 11 0987654
Final de una cadena.
cadena[12] = CHR(0)
Introduccin a los Computadores
Cadena de Caracteres
Cadenas demasiado grandes: Ignorar los caracteres sobrantes.
Ejemplo: Esta cadena es tan grande que no cabe
s t gE tseanedaca
2 3 171 16151413121110987654
Cadena demasiado grande.
Introduccin a los Computadores
Cadenas de Caracteres LECTURA
CONST
CC RETORNOCARRO = CHR(13)CC TERMINADOR = CHR(0)NN LONGITUD = 100
TIPOS
CC TCadenaTCadena [1..LONGITUD]
/* Lectura hasta el final de la cadena(retorno de carro o longitud mxima) */
ALGORITMO LeerCadena (SS TCadenaTCadena cadena )VAR
NN componenteCC caracter
INICIO
componente = 1Leer(caracter)MIENTRAS (componente < LONGITUD) Y
(caracter != RETORNOCARRO) HACERcadena[componente] = caracterLeer(caracter)componente = componente+1
FINMIENTRAScadena[componente] = TERMINADOR
FIN LeerCadena
Introduccin a los Computadores
Cadenas de Caracteres LECTURA
CONSTCC RETORNOCARRO = CHR(13)CC BLANCO = CHR(32)CC TABULADOR = CHR(9)CC TERMINADOR = CHR(0)NN LONGITUD = 100
TIPOSCC TCadenaTCadena [1..LONGITUD]
ALGORITMO BB EsDelimitador(E CC car)VAR
BB esDel = FALSOINICIO
SI car == RETORNOCARRO Ocar == BLANCO Ocar == TABULADOR ENTONCES
esDel = VERDADEROFINSIDEVOLVER esDel
FIN EsDelimitador
/* Lectura hasta delimitador (blanco, tabulador,retorno de carro) o longitud mxima */
ALGORITMO Leer (SS TCadenaTCadena cadena )VAR
NN componenteCC caracter
INICIO
componente = 1Leer(caracter)MIENTRAS componente < LONGITUD Y
NO EsDelimitador(caracter) HACERcadena[componente] = caracterLeer(caracter)componente = componente+1
FINMIENTRAScadena[componente] = TERMINADOR
FIN Leer
Introduccin a los Computadores
Cadenas de Caracteres ESCRITURA
CONSTCC TERMINADOR = CHR(0); NN LONGITUD = 100
/* Se puede escribir con Escribir(cadena) */ALGORITMO EscrCadenas (E TCadena cadena)VARNN comp
INICIOcomp = 1MIENTRAS (cadena[comp] != TERMINADOR) HACER
escribir(cadena[comp])comp = comp + 1
FINMIENTRASFIN EscrCadenas
Introduccin a los Computadores
Cadenas de Caracteres LONGITUD
CONSTCC TERMINADOR = CHR(0); NN MAXCARACTERES = 100
TIPOSCC TCadenaTCadena [1..LONGITUD]
ALGORITMO NN Longitud (E TCadenaTCadena cadena)VAR
NN compINICIO
comp = 1MIENTRAS (cadena[comp] != TERMINADOR) HACER
comp = comp + 1FINMIENTRASDEVOLVER (comp - 1)
FIN Longitud
Introduccin a los Computadores
cadena1 = cadena2/* Si son del mismo tipo*/
o
cadena1 = constante
Cadenas de CaracteresASIGNACION
CONSTCC TERMINADOR = CHR(0); NN LONGITUD = 100
TIPOSCC TCadenaTCadena [1..LONGITUD]ALGORITMO BB Iguales(E TCadena cadena1, cadena2)VAR
NN comp, longCad1, longCad2BB igual
INICIOigual = VERDADEROlongCad1 = Longitud (cadena1)longCad2 = Longitud (cadena2)SI longCad1 == longCad2 ENTONCEScomp = 1MIENTRAS (comp
Introduccin a los Computadores
Registros
RegistroRegistro: Coleccin de elementos que pueden ser de tipos distintos.
No existe un nico tipo base
Tipo RegistroTipo Registro: Formado por todos los posibles registros con elementos de unos determinados tipos.
El tipo base puede ser cualquiera.El tipo base puede ser cualquiera.
Introduccin a los Computadores
RegistrosEjemplo:
TIPOSNN TDaENUM {Enero, Febrero, Marzo, Abril, Mayo, Junio,
Julio, Agosto, Septiembre, Octubre, Noviembre,Diciembre } TMes
ZZ TAoREGISTRO TFecha
TDa dTMes mTAo a
FINREGISTROVAR
TFecha f
Introduccin a los Computadores
Registros
Los valores del tipo TFecha se componen de tres elementos concretos (de tipo TDa, de tipo TMes y de tipo TAo).
Los identificadores d, m y a representan los nombres de sus elementos componentes, denominados camposcampos.
Se puede acceder a un componente concreto de forma directa.
Introduccin a los Computadores
RegistrosEjemplos:
TIPOSENUM {oros,copas,espadas,bastos} TPaloENUM {As, dos, tres, cuatro, cinco, seis, siete,
sota, caballo, rey} TValorREGISTRO TCarta
TPalo pTValor v
FINREGISTROREGISTRO TTiempo
N horasN minutos, segundos
FINREGISTROVAR
TCarta cTTiempo t1, t2
Introduccin a los Computadores
t1.horas = t2.horas
t1.minutos = t2.minutos
t1.segundos = t2.segundos
Registros
Asignacin: = t1 = t2Se asignan cada uno de los camposde t2 a los correspondientes de t1.
Acceso a un campo: . t1.horasf.m
t1 = t2
Introduccin a los Computadores
Registros Un campo de una variable registro puede utilizarse en cualquier lugar en que
resulten vlidas las variables de su mismo tipo.
SI c.p == oros ENTONCESt1.horas = t1.horas + 4
FINSI
Los campos de un registro pueden ser de cualquier tipo, simple oestructurado:
REGISTRO TPersonaC nombre [1..20]TFecha nacim
FINREGISTRO
Se puede definir un tipo antes
Introduccin a los Computadores
Registros El tipo Registro puede ser el tipo componente de otros tipos
estructurados.TIPOS
TPersona Grupo [1..80]TCarta TMontn [1..40]
Tratamiento de estas estructuras a distintos niveles.Si tenemos TPersona p
p variable de tipo TPersonap.nombre array de 20 caracteresp.nombre[i] carcter i-simo de p.nombrep.nacim registro de tipo TFechap.nacim.d elemento de tipo TDa
Introduccin a los Computadores
Resolucin de problemas mediante registros
Para implementar una agenda telefnica:CONST
NN MaxCad = 20NN MaxPer = 50
TIPOSCC TCadenaTCadena [1..MaxCad ]REGISTRO TInfoPersonaTInfoPersona
TCadenaTCadena nombre, ap1, ap2NN tfno
FINREGISTROTInfoPersona TListaPersonasTInfoPersona TListaPersonas [1..MaxPer ]REGISTRO TAgendaTAgenda
NN numPersonasTListaPersonasTListaPersonas lista
FINREGISTRO
1
Introduccin a los Computadores
Resolucin de problemas mediante registros
CONSTNN MaxCad = 20NN MaxPer = 50
TIPOSCC TCadenaTCadena [1..MaxCad ]REGISTRO TInfoPersonaTInfoPersona
TCadenaTCadena nombre, ap1, ap2NN tfnoBB vacio
FINREGISTROTInfoPersona TAgendaTInfoPersona TAgenda [1..MaxPer ]
2
Introduccin a los Computadores
Resolucin de problemas mediante registros
Hacer un programa completo para cada uno de las dos estructuras de datos, con los procedimientos necesarios para que gestione: Insertar una nueva persona Borrar Listado Buscar una persona
Estudiar y comparar los dos programas anteriores.
Introduccin a los Computadores
Resolucin de problemas mediante registros
Ejercicio: Implementacin y manipulacin de cadenas decaracteres
CONSTNN Max = 80
TIPOSREGISTRO TCadenaTCadena
CC ch [1 .. Max]NN long
FINREGISTRO
Introduccin a los Computadores
Resolucin de problemas mediante registros
ALGORITMO NN Longitud (EE TCadenaTCadena cad)INICIO
DEVOLVER c.longFIN Longitud
Introduccin a los Computadores
Resolucin de problemas mediante registros
ALGORITMO TCadena Concatenar(EE TCadena c1,c2)VAR
Z long1, long3, iTCadena c3
INICIOlong1 = Longitud(c1)long3 = long1 + Longitud(c2)SI (long3 > N) ENTONCES
long3 = NFINSIc3.ch = c1.chPARA i = (long1+1) HASTA long3 HACER
c3.ch[i] = c2.ch[i-long1]FINPARAc3.long = long3DEVOLVER c3
FIN Concatenar
ALGORITMO TCadena Pos (EE TCadena c1,c2)VAR
Z i,j,long1,long2, posicionB encontrada
INICIOlong1 = Longitud(c1)long2 = Longitud(c2)i = 0encontrada = FALSOMIENTRAS i+long2
Introduccin a los Computadores
Registros en C++
::= struct '{'{ {, }; }
'}';
Introduccin a los Computadores
Registros en C++const char FINCAD = \0;const int MAXCAD = 20;const int ENTER = \n;typedef char TCadena[MAXCAD+1]; // MAXCAD caracteres + FINCADstruct Tfecha{ int dia, mes, anho;};struct TPersona
{ TCadena nombre, apellido1, apellido2;int edad;TCadena nif;Tfecha fecha_nacimiento;
};
Introduccin a los Computadores
Bsqueda y Ordenacin
Objetivos Uso de las estructuras de datos antes
expuestas Dependencia: Estructura de datos
seleccionada Algoritmo diseado Tipos de Algoritmos
InternoInterno / Externo/ Externo
Introduccin a los Computadores
Bsqueda
Operacin frecuente en Programacin Diversidad de Algoritmos
Diferentes Tcnicas de BsquedaBsqueda en Listas: Algoritmos, Eficiencia
Lista Elementos componentes: Tipo de Datos SimpleTipoElemento Vector[0..MAX-1]
Introduccin a los Computadores
Bsqueda Secuencial
Aplicabilidad: Desconocimiento acerca de
la organizacin de los datos Estructura solo accedida
secuencialmenteIdea Clave: Visitar todas las posiciones
del array, hasta que se encuentre el elemento o se llegue al final del mismo (elemento no est)
Algoritmo Secuencial(E Vector V; ETipoElemento X)
VAR
N indInicio
ind = 0MIENTRAS (ind
Introduccin a los Computadores
Bsqueda Secuencial con Centinela
Posible optimizacin del algoritmo anterior:Eliminar el chequeo
(ind < MAX) Asegurarnos que x est en V
Como?Aadiendo x al final del array
(centinela) TipoElemento Vector[0..MAX]
ALGORITMO Secuencial_Op(E VectorV;E TipoElemento x)
VAR
N indInicio
V[MAX]=xind = 0MIENTRAS (V[ind] != x) HACER
ind = ind+1FINMIENTRASSI ind==MAX ENTONCES
Escribir("no encontrado")EN OTRO CASO
Escribir("encontrado")FINSI
FIN Secuencial_Op
Introduccin a los Computadores
Bsqueda Binaria Aplicabilidad:
-Informacin adicional: Cmo estn organizados los datos.-Bsqueda ms eficiente Datos Ordenados.TElemento Vector [0..MAX-1]
k tal que 1
Introduccin a los Computadores
Bsqueda Binaria
Algoritmo BB Binaria (E Vector V;E TipoElemento x)VAR
N izq,der,mB encontrado
InicioIzq = 0Der = MAX - 1encontrado = FALSOMIENTRAS (Izq
Introduccin a los Computadores
Objetivo: Localizar la presencia de una cadena de longitud M dentro de otra de longitud N
0
Introduccin a los Computadores
Algoritmo de bsqueda en cadenas
Idea Clave: Comparar carcter a carcter texto y patrn comenzando por el extremo derecho de ambos
Coinciden ? Si se compara el carcter
anterior No el proceso se reinicia
comenzado en la anterior posicin a la que se inici la concordancia
Bsqueda Directa Hacia Atrs
El diseo del Algoritmo se deja propuesto al
alumno como ejercicio
Introduccin a los Computadores
Ordenacin
Actividad esencial y muy relevante en Programacin Ocupa ms del 25% del Tiempo de computacin
Problema ampliamente estudiado Diversidad de Algoritmos
Objetivo: Eficiencia Buscar el mejor algoritmo de Ordenacin
Introduccin a los Computadores
Ordenacin
Eficiencia Algoritmos que economicen la memoria
disponible Algoritmo ms eficiente: Quicksort n*log(n) Algoritmos directos: Insercin, Seleccin e
Intercambio n2 Menos eficientes Adecuados para dilucidar las principales
caractersticas de los algoritmos de ordenacin
Introduccin a los Computadores
Ordenacin
Algoritmos de Ordenacin Tipo:
TipoElemento Vector[1..MAX]En TipoElemento sobre el que hay definida una relacinde orden (
Introduccin a los Computadores
Ordenacin por Insercin
Idea Clave: para cada paso i, los elementos V1,..., Vi-1 estn ordenados y se inserta entre ellos Vi de forma que despus de la insercin los elementos V1,....., Vi estn ordenados.
Ejemplo: Se debe ordenar la siguiente coleccin de elementos
3 1 9 7 5 23 15 20
Introduccin a los Computadores
1 3 5 7 9 23 15 20Paso5: i=6. Suponemos V1,...., V5 ordenados,
insertamos V6 => V1,....,V6 ordenados.1 3 5 7 9 23 15 20
Paso6: i=7. Suponemos V1,...., V6 ordenados,
insertamos V7 => V1,....,V7 ordenados.1 3 5 7 9 15 23 20
Paso7: i=8. Suponemos V1,...., V7 ordenados,
insertamos V8 => V1,....,V8 ordenados.1 3 5 7 9 15 20 23
Ordenacin por Insercin
Paso1: i=2.SuponemosV1,....,V1ordenados,
insertamos V2 =>V1,.....,V2 ordenados.1 3 9 7 5 23 15 20
Paso2: i=3.SuponemosV1,....,V2 ordenados,
insertamos V3 => V1,....,V3 ordenados.1 3 9 7 5 23 15 20
Paso3: i=4. Suponemos V1,...., V3 ordenados,
insertamos V4 => V1,....,V4 ordenados.1 3 7 9 5 23 15 20
Paso4: i=5. Suponemos V1,...., V4 ordenados,
insertamos V5 => V1,....,V5 ordenados.
Introduccin a los Computadores
Ordenacin por Insercin
Cmo realizar la insercin? Insercin directa Abrir un hueco en la
sucesin V1,....Vi-1 para encajar ViEjemplo:Paso4: i=5. Suponemos V1,...., V4 ordenados, insertamos V5 =>
V1,......, V5 ordenados.1 33 77 9 5 23 15 201 33 55 77 9 23 15 20
Introduccin a los Computadores
ALGORITMO AbrirHueco (ES VectorV;
E Indice inicio,fin)
VAR
Indice iINICIO
PARA i=fin HASTA inicio + 1(PASO -1) HACER
V[i]=V[i-1]FINPARA
FIN AbrirHueco
Ordenacin por Insercin
ALGORITMO Indice BuscarPosicion(E TipoElemento valor; EVector V;E Indice fin)
VAR
Indice iINICIO
i=1MIENTRAS (i
Introduccin a los Computadores
Ordenacin por Insercin
ALGORITMO Insercion (ES Vector V)VAR
Indice i, posTipoElemento aux
INICIOPARA i=2 HASTA MAX HACER
aux=V[i]pos=BuscarPosicion(aux,V,i-1)AbrirHueco(V, pos, i)V[pos]=aux
FINPARAFIN Insercion
Una forma ms RAPIDAde realizar la insercin
Bsqueda Binaria posicin insercin valorMejora Nmero de
Comparaciones
Introduccin a los Computadores
Ordenacin por Insercin
ALGORITMO Indice BuscarPosicion(E TipoElemento valor; E Vector
V;E Indice fin)VAR
Indice izd, der, medINICIO
izq = 1der = finMIENTRAS izd
Introduccin a los Computadores
Ordenacin por Seleccin
Idea Clave:1)Determinar la posicin del menor elemento
del array2)Intercambiar dicho elemento por el
elemento que hay en la primera posicin V13)Repetir esta operacin con los N-1
elementos restantes V2,....., VMAX
Introduccin a los Computadores
Ordenacin por SeleccinPaso5:16 64 80 90 120 320 200 96
Paso6:16 64 80 90 96 320 200 120
Paso7:16 64 80 90 96 120 200 320
ResultadoResultado16 64 80 90 96 120 200 320
N elementos N-1 Intercambios
Ejemplo Ejemplo 320 96 16 90 120 80 200 64Paso1:320 96 16 90 120 80 200 64
Paso2:16 96 320 90 120 80 200 64
Paso3:16 64 320 90 120 80 200 96
Paso4:16 64 80 90 120 320 200 96
Introduccin a los Computadores
Ordenacin por Seleccin
ALGORITMO Indice PosMenorElem (EVector V;E Indice inicio)
VAR
Indice pos_menor, iINICIO
pos_menor=inicioPARA i=inicio+1 HASTA MAX
HACERSI V[i] < V[pos_menor]
ENTONCESpos_menor=i
FINSIFINPARA
DEVOLVER(pos_menor)FIN PosMenorElem
ALGORITMO Intercambiar (ESTipoElemento x, y)
VAR
TipoElemento auxINICIO
aux=x
x=yy=aux
FIN Intercambiar
Introduccin a los Computadores
Ordenacin por Seleccin
ALGORITMO Seleccion(ES VectorV)
VAR
Indice iINICIOPARA i=1 HASTA MAX-1 HACERSubirMenorSeleccion(V,i)
FINPARA
FIN Seleccion
ALGORITMO SubirMenorSeleccion(ES Vector V;E Indiceposicion)
VAR
Indice pos_menorINICIOpos_menor=Posicion_menor_elem(V, posicion+1)SI V[posicion] > V[pos_menor]ENTONCESIntercambiar(V[posicion],V[pos_menor])
FINSIFIN SubirMenorSeleccion
Introduccin a los Computadores
Ordenacin por Intercambio
Idea Clave: Comparar pares de elementos adyacentes e intercambiarlos entre s
1) Comparar VN y VN-1, si no estn ordenados, intercambiarlos
2) Comparar VN-1 y VN-2, repitiendo el proceso3) El proceso contina hasta que cada elemento del
array haya sido comparado con sus elementos adyacentes
Introduccin a los Computadores
Ordenacin por Intercambio
En el primer recorrido el elemento ms pequeo del array sube posicin a posicin hasta ocupar la primera posicin del array Mtodo de la Burbuja
En el segundo recorrido el segundo elemento mayor llegar a la segunda posicin y as sucesivamente
N-1 Recorridos, N-i Comparaciones, N-i Intercambios como mximo (recorrido i-simo)
Introduccin a los Computadores
Ordenacin por Intercambio
EjemploEjemplo72 64 50 23 85 18 37 99 45 8
Paso1:Paso1:72 72 72 72 72 72 72 72 7272 8864 64 64 64 64 64 64 6464 88 7250 50 50 50 50 50 5050 88 64 6423 23 23 23 23 2323 88 50 50 5085 85 85 85 8585 88 23 23 23 2318 18 18 1818 88 85 85 85 85 8537 37 3737 88 18 18 128 18 18 1899 9999 88 37 37 37 37 37 37 374545 88 99 99 99 99 99 99 99 9988 45 45 45 45 45 45 45 45 45
Introduccin a los Computadores
Ordenacin por Intercambio
Paso2:Paso2:8 8 8 8 8 8 8 8 872 72 72 72 72 72 72 7272 181864 64 64 64 64 64 6464 1818 7250 50 50 50 50 5050 1818 64 6423 23 23 23 2323 1818 50 50 5085 85 85 8585 1818 23 23 23 2318 18 1818 1818 85 85 85 85 8537 3737 3737 37 37 37 37 37 379999 4545 45 45 45 45 45 45 454545 99 99 99 99 99 99 99 99
Paso3,....., Paso9:Paso3,....., Paso9:8 8 1818 2323 3737 4545 5050 6464 7272 8585 9999
Introduccin a los Computadores
Ordenacin por Intercambio
ALGORITMO Intercambio (ESVector V)
VAR
Indice iINICIOPARA i=1 HASTA MAX-1 HACERSubirMenorBurbuja(V,i)
FINPARA
FIN Intercambio
ALGORITMOSubirMenorBurbuja(ESVector V;E Indiceposicion)
VAR
Indice iINICIO
PARA i=MAX HASTAposicion+1
(PASO -1) HACERSI V[i-1] > V[i]
ENTONCESIntercambiar(V[i-1], V[i])
FINSIFINPARA
FIN SubirMenorBurbuja
Introduccin a los Computadores
Ordenacin por IntercambioMejora
Eliminar recorridos innecesarios Elementos ya ordenados en un recorrido
no se ha hecho ningn intercambio
Introduccin a los Computadores
Ordenacin por Intercambio
ALGORITMO Intercambio2 (ESVector V)
VAR
Indice iB intercambioTipoElemento aux
INICIOintercambio=VERDADEROi=1MIENTRAS iV[j+1]ENTONCES
intercambio=VERDADEROaux=V[j]V[j]=V[j+1]V[j+1]=aux
FINSIFINPARA
i=i+1FINMIENTRASFIN Intercambio2
Introduccin a los Computadores
Bibliografa Programacin en C++. Algoritmos, estructuras de datos y
objetos. L. Joyanes. McGraw-Hill, 2000
Cmo programar en C/C++. H.M. Deitel, P.J. Deitel. Prentice Hall, 1995
Pascal. Dale/Orshalick. Ed. McGraw Hill 1986
Programacin I. Jos A. Cerrada y Manuel Collado. U.N.E.D. 1993. Fundamentos de Programacin. Joyanes Aguilar. McGraw Hill. 2
Edicin, 1996.
Introduction to programming with modula-2. Saim Ural/Suzan Ural.Wiley. 1987