Está en la página 1de 49

Tipos de Datos Compuestos

Contenido del Tema

TT
EE
M
M
A
A
66

6.1. Arrays
6.2. Cadenas de caracteres
6.3. Registros
6.4. Bsqueda y ordenacin

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 Arrays


Ejemplo:
Ejemplo: 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.

Fin

Imprimir
contadores

Leer Seleccin

No

1Selecc.4

No

Seleccin
!=0

Leer Seleccin

Inicializar
contadores

Inicio

Si

Si

Actualizar
Contador

Introduccin a los Computadores

Necesidad de los Arrays


ALGORITMO Cafetera
VAR
N soloSin, soloCon, conLeche,
sinLeche, seleccion
INICIO
soloSin = 0
soloCon = 0
conLeche = 0
sinLeche = 0
Escribir (Que nmero de bebida
ha seleccionado?: )
Leer (seleccion)

MIENTRAS seleccion != 0 HACER


CASO seleccion SEA
1: soloSin = soloSin+1
2: soloCon = soloCon+1
3: conLeche= conLeche+1
4: sinLeche= sinLeche+1
SINO
//No hacer nada
FINCASO
Escribir(Que nmero de

bebida ha seleccionado?:)
Leer ( seleccion )
FINMIENTRAS
Escribir (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 Arrays


ALGORITMO Cafetera
VAR
N soloSin, soloCon, conLeche,
sinLeche,teCon, teSin,...,
colaCon, seleccion
INICIO
soloSin = 0
soloCon = 0
conLeche = 0
sinLeche = 0
teSin
= 0
teCon
= 0
...
colaCon = 0
Escribir (Que nmero de
bebida ha seleccionado?: )
Leer (seleccion)

MIENTRAS seleccion != 0 HACER


CASO seleccion SEA
1: soloSin = soloSin+1
2: soloCon = soloCon+1
...
20:colaCon = colaCon+1
SINO
// No hacer nada
FINCASO
Escribir(Que nmero de
bebida ha seleccionado?:)
Leer (seleccion)
FINMIENTRAS
Escribir (Solo Sin Azcar: )
Escribir (soloSin)
....
FIN Cafetera

Introduccin a los Computadores

Concepto de Array
Array = 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:
Tipondice
TIPOS
TipoBase <TipoArray> [IndInicial..IndFinal]

Introduccin a los Computadores

Concepto de Array
VARIABLES
<TipoArray>

nuevoArray
EJEMPLO

TIPOS
R TipoMes [1..31]

Introduccin a los Computadores

Concepto de Array
VARIABLES
TipoMes mesHoras
A R R A Y m esH o ra s

Indice: 1

26 27

28 31

.......
C om po nente 1
C om ponente 31
C o m p onente 2
m esH o ras[3 ]

F ig. 1 - E sq u em a de la estructu ra array

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 Array
Asignacin
Asignacin de un elemento:
mesHoras[20] = 7.0

Asignacin de todos los elementos:


PARA posicion = 1 HASTA 31 HACER
mesHoras[posicion] = 10.0
FINPARA

Introduccin a los Computadores

Concepto de Array
Asignacin de Arrays
VAR
TipoMes mes, copiaMes
INICIO
copiaMes = mes
FIN

Es equivalente a:
PARA posicion = 1 HASTA 31 HACER
copiaMes[posicion]= mes[posicion]
FINPARA

Introduccin a los Computadores

Concepto de Array
Lectura / Escritura
Normalmente se realizan haciendo uso de estructuras
repetitivas, aunque pueden intervenir estructuras
selectivas:
PARA posicion = 1 HASTA 31 HACER
SI posicion MOD 2 != 0 ENTONCES
Leer(mes[posicion])
FINSI
FINPARA
Introduccin a los Computadores

Concepto de Array
Acceso Secuencial
Realizacin de una accin genrica sobre todos los
elementos del vector:
Ejemplo 1: Escritura de un array
PARA posicion = 1 HASTA 31 HACER
Escribir (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 MediaPuntos
TIPOS
Z TPuntos [1..30]
VAR
Aadir
TPuntos
puntos
subprogramacin
Z media, suma, componente
INICIO
suma = 0
PARA componente = 1 HASTA 30 HACER
Leer(puntos[componente])
suma = suma + puntos [componente]
FINPARA
media = suma DIV 30
FIN MediaPuntos

Introduccin a los Computadores

Concepto de Array
Solucin al problema de la mquina de caf:
Tipos de Bebidas:
1.- Caf solo, sin azcar
2.- Caf solo, con azcar
3.- Caf con leche, sin azcar
4.- Caf con leche, con azcar

5.- T solo, sin azcar


6.- T solo, con azcar
7.- T con leche, sin azcar
8.- T con leche, con azcar

Introduccin a los Computadores

Concepto de Array
Representacin mediante un vector
1

3 4

fre c u e n c ia s
Caf solo, sin azcar
Caf solo, con azcar
Caf con l., sin azcar
Caf con l.,con azcar
T solo, sin azcar
T solo, con azcar
T con l., sin azcar
T con l., con azcar

Introduccin a los Computadores

Concepto de Array
ALGORITMO Cafetera
CONST
N NUMERO = 8
TIPOS
N TArrFreq [1..NUMERO]
VAR
TArrFreq frecuencia
N bebida
INICIO
// Inicializacin de las frecuencias
PARA
bebida=1
HASTA
NUMERO
HACER
frecuencia[bebida] = 0
FINPARA
Escribir (Que nmero de bebida ha
seleccionado? (0 para acabar): )

Leer(bebida)
MIENTRAS bebida != 0 HACER
SI (bebida >=1)Y(bebida<=NUMERO)
ENTONCES
frecuencia[bebida] =
frecuencia[bebida] +1
FINSI /* Este SI evita el ndice
fuera de rango */
Escribir (Que nmero de
bebida ha seleccionado: )
Leer(bebida)
FINMIENTRAS
/* impresin de los resultados
obtenidos */
FIN Cafetera

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:

0 1 2

float vector[3];
float vector[3] = {17.3 , 3.5 , 7.0};

Declaracin de tipos:
typedef float TVector [3];
TVector vector;
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:
Bidimensionales
Multidimensionales

Introduccin a los Computadores

Arrays de Varias Dimensiones


Array Bidimensional: Vector de Vectores.
1

In d ic e :

M -2

M -1 M

1
2
.
.
.

.
.

.
.

.
.

T IP O S
N T E j e m p lo [ 1 ..N ] [ 1 ..M ]
Introduccin a los Computadores

Arrays de Varias Dimensiones


Array Bidimensional: Tabla / Matriz
T IP O S

N T M a t riz [ 1 . . 5 ] [ 1 . . 6 ]
V A R IA B L E S
T M a t r iz m
F ila 1

11

12

13

14

15

16

F ila 2

21

22

23

24

25

26

F ila 3

31

32

33

34

35

36

F ila 4

41

42

43

44

45

46

F ila 5

51

52

53

54

55

56

C o lu m n a 6
C o lu m n a 5
C o lu m n a 4
C o lu m n a 3
C o lu m n a 2
C o lu m n a 1

Tabla

Matriz

Introduccin
Introduccinaalos
losComputadores
Computadores

Arrays de Varias Dimensiones


Ejemplo 1:
Algoritmo que procese una matriz de 6 x 8 de
enteros (fila a fila).
aaaaaaaab
aaaaaaaab
aaaaaaaab
aaaaaaaab
aaaaaaaab
aaaaaaaab
cccccccc

Introduccin a los Computadores

Arrays de Varias Dimensiones


ALGORITMO Formato
CONST
Subprogramas
N MaxFil = 6
N MaxCol = 8
TIPOS
Z TVectorFil [1..MaxFil]
Z TVectorCol [1..MaxCol]
TVectorCol TMatriz [1..MaxFil]
VAR
TMatriz
a
TVectorFil b //Suma filas
TVectorCol c // Suma columnas
N
fi, co
Z
suma

INICIO
Escribir(Escribe los valores
de
la matriz, fila a fila: )
PARA fi = 1 HASTA MaxFil HACER
PARA co = 1 HASTA MaxCol HACER
Leer(a[fi][co])
FINPARA
FINPARA
/* Suma de filas */
PARA fi = 1 HASTA MaxFil HACER
suma = 0
PARA co = 1 HASTA MaxCol HACER
suma = suma + a[fi][co]
FINPARA
b[fi] = suma
FINPARA

Introduccin a los Computadores

Arrays de Varias Dimensiones


/* Suma de columnas */
PARA co = 1 HASTA MaxCol HACER
suma = 0
PARA fi = 1 HASTA MaxFil HACER
suma = suma + a[fi][co]
FINPARA
c[co] = suma
FINPARA

// Escribir suma de columnas


PARA co = 1 HASTA MaxCol HACER
Escribir(c[co])
FINPARA
FIN Formato

/* Escribir la matriz */
PARA fi = 1 HASTA MaxFil HACER
PARA co = 1 HASTA MaxCol HACER
Escribir(a[fi][co])
FINPARA
Escribir(b[fi], \n)
FINPARA

Introduccin a los Computadores

Arrays de Varias Dimensiones


Ej.: Producto Matricial
INICIO
ALGORITMO Multiplicacin
// Lectura de datos
CONST
Escribir (n de filas y columnas)
N MaxInd = 10
Leer (numFilas, numColumA)
TIPOS
LeerMatriz (matrizA,numFilas, numColumA)
Leer (numColumB)
R TMatriz [1..MaxInd][1..MaxInd]
LeerMatriz (matrizB,numColumA, numColumB)
VAR
/* El nmero de filas de B debe coincidir
TMatriz matrizA,matrizB,matrizC
con el de columnas de A */
// Proceso
C = AxB
N numFilas, numColumA, numColumB
matrizC = ProductoMat(matrizA, matrizB,
R suma
numFilas, numColumA,
numColumB)

// Presentacin de resultados

EscribirMat (matrizC, numFilas,


numColumB)

FIN Multiplicacin

Introduccin a los Computadores

Arrays de Varias Dimensiones


Ej.: Producto Matricial
ALGORITMO TMatriz ProductoMat (E
E TMatriz mA, mB; E N totFil,filCol totCol)
VAR
TMatriz result
N k, fil, col
Pr
R suma
o
de duct
INICIO
o
A

po esc
PARA fil = 1 HASTA totFil HACER
r u ala
na r d
PARA col = 1 HASTA totCol HACER
col e u
um na
suma = 0.0
na fila
de
PARA k = 1 HASTA filCol HACER
B
suma = suma + mA[fil][k] * mB[k][col]
FINPARA
result[fil][col] = suma
FINPARA
FINPARA
DEVOLVER result

FIN ProductoMat

Introduccin a los Computadores

Arrays de Varias Dimensiones


Arrays Multidimensionales ?
Arrays de tres, cuatro,..., n dimensiones.
Ejemplo:
CONST
N MaxInd1 = 10
N MaxInd2 = 10
N MaxInd3 = 20
TIPOS
R
TVector [1..MaxInd3]
TVector TMatriz [1..MaxInd2]
TMatriz TArray3D [1..MaxInd1]
VAR
TArray3D tridimensional

Equivale a:
R TArray3D[1..MaxInd1]
[1..MaxInd2][1..MaxInd3]

Introduccin a los Computadores

Array Tridimensional
N TArray3D [1..Max1][1..Max2][1..Max3]

Pr
o

fu

nd

id
a

F
i
l
a
s

Columnas
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.492
Por fin es Viernes 123

Introduccin a los Computadores

Cadenas de Caracteres
Delimitador? Usaremos el CHR(0)
Subcadena?

\0

Ejemplos:
12 de
viernes

Introduccin a los Computadores

Cadenas de Caracteres
Representar cadenas de caracteres?
Mediante un vector de caracteres
Ejemplo:
CONST
N LONGITUD = 17
TIPOS
C TCadena [1..LONGITUD]
VAR
TCadena cadena

Introduccin a los Computadores

Cadenas de Caracteres
Estado inicial de la variable cadena
# . /

g 5

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
Uno de los posibles estados iniciales del vector 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.
cadena[1] = CHR(0)

g # . /

g 5

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
El vector Cadena est vaco.

Introduccin a los Computadores

Cadenas de Caracteres
El final de una cadena de caracteres lo
marcaremos con el delimitador.
Ejemplo:
cadena[12] = CHR(0)

o g

9 10 11 12 13 14 15 16 17

Final de una cadena.


Introduccin a los Computadores

Cadena de Caracteres
Cadenas demasiado grandes: Ignorar los caracteres sobrantes.

Ejemplo: Esta

cadena es tan grande que no cabe

E s t a

c a d e n a

e s

t g

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17

Cadena demasiado grande.


Introduccin a los Computadores

Cadenas de Caracteres
LECTURA

CONST

C RETORNOCARRO = CHR(13)
C TERMINADOR
= CHR(0)
N LONGITUD
= 100
TIPOS

C TCadena [1..LONGITUD]

/* Lectura hasta el final de la cadena


(retorno de carro o longitud mxima) */
ALGORITMO LeerCadena (S TCadena cadena )
VAR
N
componente
C
caracter
INICIO

componente = 1
Leer(caracter)
MIENTRAS (componente < LONGITUD) Y
(caracter != RETORNOCARRO) HACER
cadena[componente] = caracter
Leer(caracter)
componente = componente+1
FINMIENTRAS
cadena[componente] = TERMINADOR
FIN LeerCadena

Introduccin a los Computadores

Cadenas de Caracteres
LECTURA
CONST
C RETORNOCARRO = CHR(13)
C BLANCO
= CHR(32)
C TABULADOR
= CHR(9)
C TERMINADOR
= CHR(0)
N LONGITUD
= 100
TIPOS
C TCadena [1..LONGITUD]
ALGORITMO B EsDelimitador(E C car)
VAR
B esDel = FALSO
INICIO
SI car == RETORNOCARRO O
car == BLANCO O
car == TABULADOR ENTONCES
esDel = VERDADERO
FINSI
DEVOLVER esDel
FIN EsDelimitador

/* Lectura hasta delimitador (blanco, tabulador,


retorno de carro) o longitud mxima */
ALGORITMO Leer (S TCadena cadena )
VAR
N
componente
C
caracter
INICIO

componente = 1
Leer(caracter)
MIENTRAS componente < LONGITUD Y
NO EsDelimitador(caracter) HACER
cadena[componente] = caracter
Leer(caracter)
componente = componente+1
FINMIENTRAS
cadena[componente] = TERMINADOR
FIN Leer

Introduccin a los Computadores

Cadenas de Caracteres
ESCRITURA
CONST
C TERMINADOR = CHR(0); N LONGITUD = 100
/* Se puede escribir con Escribir(cadena) */
ALGORITMO EscrCadenas (E TCadena cadena)
VAR
N comp
INICIO
comp = 1
MIENTRAS (cadena[comp] != TERMINADOR) HACER
escribir(cadena[comp])
comp = comp + 1
FINMIENTRAS
FIN EscrCadenas
Introduccin a los Computadores

Cadenas de Caracteres
LONGITUD
CONST
C TERMINADOR = CHR(0);
N MAXCARACTERES = 100
TIPOS
C TCadena [1..LONGITUD]
ALGORITMO N Longitud (E TCadena cadena)
VAR
N comp
INICIO
comp = 1
MIENTRAS (cadena[comp] != TERMINADOR) HACER
comp = comp + 1
FINMIENTRAS
DEVOLVER (comp - 1)
FIN Longitud

Introduccin a los Computadores

Cadenas de Caracteres
ASIGNACION
cadena1 = cadena2
/* Si son del mismo tipo*/

o
cadena1 = constante

Introduccin a los Computadores

COMPARACION
CONST
C TERMINADOR = CHR(0); N LONGITUD = 100
TIPOS
C TCadena [1..LONGITUD]
ALGORITMO B Iguales(E TCadena cadena1, cadena2)
VAR
comp, longCad1, longCad2
N
B
igual
INICIO
igual = VERDADERO
longCad1 = Longitud (cadena1)
longCad2 = Longitud (cadena2)
SI longCad1 == longCad2 ENTONCES
comp = 1
MIENTRAS (comp <= longCad2) Y iguales HACER
SI cadena1[comp]!= cadena2[comp]
ENTONCES
igual = FALSO
FINSI
comp = comp + 1
FINMIENTRAS
SINO
igual = FALSO
FINSI
DEVOLVER igual
FIN Iguales

CONST
C TERMINADOR
N LONGITUD

= CHR(0)
= 100

TIPOS

C TCadena [1..LONGITUD]
ALGORITMO Z Posicion (E
E TCadena texto, patron)
VAR
N i, j, longTxt,longPtr
Z pos
B encontrado
INICIO
longTxt = Longitud (texto)
longPtr = Longitud (patron)
i = 0
encontrado = FALSO
MIENTRAS (i + longPtr<=longTxt) Y ( NO encontrado) HACER
j = 1
MIENTRAS (j<=longPtr) Y (texto[i+j] == patron[j]) HACER
j = j + 1
FINMIENTRAS
SI j > longPtr ENTONCES
encontrado = VERDADERO
SINO
i = i + 1
FINSI
FINMIENTRAS
SI encontrado ENTONCES
pos = i+1
SINO
pos = -1
j
FINSI
i
patron
DEVOLVER pos
FIN Posicion

texto

Registros
Registro:
Registro

Coleccin de elementos que pueden


ser de tipos distintos.
No existe un nico tipo base

Tipo Registro: Formado por todos los posibles


registros con elementos de unos
determinados tipos.
El tipo base puede ser cualquiera.
Introduccin a los Computadores

Registros
Ejemplo:
TIPOS
N TDa
ENUM {Enero, Febrero, Marzo, Abril, Mayo, Junio,
Julio, Agosto,
Septiembre,
Octubre,
Noviembre,
Diciembre } TMes
Z TAo
REGISTRO TFecha
TDa d
TMes m
TAo a
FINREGISTRO
VAR
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 campos.
campos
Se puede acceder a un componente concreto de forma
directa.
Introduccin a los Computadores

Registros
Ejemplos:
TIPOS
ENUM {oros,copas,espadas,bastos} TPalo
ENUM {As, dos, tres, cuatro, cinco, seis, siete,
sota, caballo, rey} TValor
REGISTRO TCarta
TPalo p
TValor v
FINREGISTRO
REGISTRO TTiempo
N horas
N minutos, segundos
FINREGISTRO
VAR
TCarta c
TTiempo t1, t2

Introduccin a los Computadores

Registros
Asignacin: =

t1 = t2
Se asignan cada uno de los campos
de t2 a los correspondientes de t1.

Acceso a un campo: .
t1.horas

= t2.horas

t1.minutos

= t2.minutos

t1.segundos

= t2.segundos

t1.horas
f.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 ENTONCES
t1.horas = t1.horas + 4
FINSI

Los campos de un registro pueden ser de cualquier tipo, simple o


estructurado:
REGISTRO TPersona
C
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
p.nombre
p.nombre[i]
p.nacim
p.nacim.d

variable de tipo TPersona


array de 20 caracteres
carcter i-simo de p.nombre
registro de tipo TFecha
elemento de tipo TDa

Introduccin a los Computadores

Resolucin de problemas
mediante registros
Para implementar una agenda telefnica:
CONST
N MaxCad = 20
N MaxPer = 50
TIPOS
C TCadena [1..MaxCad ]
REGISTRO TInfoPersona
TCadena nombre, ap1, ap2
N
tfno
FINREGISTRO
TInfoPersona TListaPersonas [1..MaxPer ]
REGISTRO TAgenda
N
numPersonas
TListaPersonas lista
FINREGISTRO

Introduccin a los Computadores

Resolucin de problemas
mediante registros
CONST
N MaxCad = 20
N MaxPer = 50
TIPOS
C TCadena [1..MaxCad ]
REGISTRO TInfoPersona
TCadena
nombre, ap1, ap2
N
tfno
B
vacio
FINREGISTRO
TInfoPersona TAgenda [1..MaxPer ]

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 de
caracteres
CONST
N Max = 80
TIPOS
REGISTRO TCadena
C ch [1 .. Max]
N long
FINREGISTRO
Introduccin a los Computadores

Resolucin de problemas
mediante registros
ALGORITMO N Longitud (E
E TCadena cad)
INICIO
DEVOLVER c.long
FIN Longitud

Introduccin a los Computadores

Resolucin de problemas
mediante registros
ALGORITMO TCadena Concatenar(E
E TCadena c1,c2)
VAR
Z long1, long3, i
TCadena c3
INICIO
long1 = Longitud(c1)
long3 = long1 + Longitud(c2)
SI (long3 > N) ENTONCES
long3 = N
FINSI
c3.ch = c1.ch
PARA i = (long1+1) HASTA long3 HACER
c3.ch[i] = c2.ch[i-long1]
FINPARA
c3.long = long3
DEVOLVER c3
FIN Concatenar

Introduccin a los Computadores

ALGORITMO TCadena Pos (E


E TCadena c1,c2)
VAR
Z i,j,long1,long2, posicion
B encontrada
INICIO
long1 = Longitud(c1)
long2 = Longitud(c2)
i = 0
encontrada = FALSO
MIENTRAS i+long2 <= long1 Y NO encontrada HACER
j = 1
MIENTRAS j<=long2 Y c1.ch[i+j]==c2.ch[j] HACER
j = j + 1
FINMIENTRAS
SI j > long2 ENTONCES
encontrada = VERDADERO
SINO
i = i + 1
FINSI
FINMIENTRAS
j
SI encontrada ENTONCES
i
posicin = i+1
c2
SINO
posicin = 0
FINSI
DEVOLVER posicin
c1
FIN Pos

Registros en C++
<TipoRegistro>::= struct <nombreTipo>
'{'
{ <tipo> <nomVar> {, <tipo> <nomVar>}; }
'}';

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 + FINCAD
struct 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
Interno / Externo
Introduccin a los Computadores

Bsqueda
Operacin frecuente en Programacin
Diversidad de Algoritmos
Diferentes Tcnicas de Bsqueda
Bsqueda en Listas: Algoritmos, Eficiencia
Lista
Elementos componentes: Tipo de Datos Simple
TipoElemento Vector[0..MAX-1]

Introduccin a los Computadores

Bsqueda Secuencial
Aplicabilidad:
Desconocimiento acerca de
la organizacin de los datos
Estructura solo accedida
secuencialmente
Idea 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; E


TipoElemento X)
VAR
N ind
Inicio
ind = 0
MIENTRAS (ind<MAX) Y (V[ind]!= x)
HACER
ind = ind+1
FINMIENTRAS
SI ind==MAX ENTONCES
Escribir("no encontrado")
SINO
Escribir("encontrado")
FINSI
Fin Secuencial

Introduccin a los Computadores

Bsqueda Secuencial
Consideraciones
La expresin lgica slo es correcta si el segundo trmino slo
se evala cuando el primero es VERDADERO (cortocircuito)
Eficiencia:
Mejor Caso 1 comparacin
Peor Caso N comparaciones
Caso Promedio
N/2 comparaciones
Fin de Bsqueda:
Elemento hallado
V[ind]==x
Elemento no hallado
ind==MAX
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 Vector


V;E TipoElemento x)
VAR
N ind
Inicio
V[MAX]=x
ind = 0
MIENTRAS (V[ind] != x) HACER
ind = ind+1
FINMIENTRAS
SI 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<=k<=MAX-1, se cumple que V[k-1] <= V[k ]

Idea Clave:
Inspeccionar un elemento de ndice m elegido al azar (x
elemento a buscar):
- Si V[m]==x
Fin Bsqueda
- Si V[m]<x
k/ k<=m, V[k] eliminados
- Si V[m]>x
k/ k>=m, V[k] eliminados
Introduccin a los Computadores

Bsqueda Binaria
Algoritmo B Binaria (E Vector V;E TipoElemento x)
VAR
N izq,der,m
B encontrado
Inicio
Izq = 0
Der = MAX - 1
encontrado = FALSO
MIENTRAS (Izq<= Der) Y (NO encontrado)
HACER
m = // cualquier valor entre Izq y Der
SI V[m]==x ENTONCES
encontrado= VERDADERO
SINO
SI V[m] < x ENTONCES
Izq = m + 1
SINO
Der = m - 1
FINSI
FINSI
FINMIENTRAS
DEVOLVER encontrado
FIN Binaria

Introduccin a los Computadores

Bsqueda Binaria
Consideraciones

Eleccin de m

No afecta a la correccin del Algoritmo


Objetivo: Eliminar el mayor nmero de
elementos en cada iteracin
m = (Izq + der)DIV 2
Eleccin Optima
Eficiencia (Peor Caso)
Trunc(log2N) +1

Introduccin a los Computadores

Bsqueda en Cadenas
Objetivo: Localizar la presencia de una cadena de
longitud M dentro de otra de longitud N
0<M<=N
Tipos:
C TipoElemento
TipoElemento Texto[0..N-1]
TipoElemento Patrn[0..M-1]

Introduccin a los Computadores

Bsqueda Directa Hacia


Delante

Algoritmo de bsqueda en
cadenas
Idea Clave: Comparar carcter
a carcter texto y patrn
comenzando por el extremo
izquierdo de ambos
Coinciden ?
Si
se compara el siguiente
carcter
No
el proceso se reinicia
comenzado en la posicin
siguiente a la que se inici la
concordancia

ALGORITMO Z BusqCadena(E Patron P;E Texto T)


VAR
N i,j;
Z resultado;
INICIO
i = 0; j = 0
MIENTRAS(i<N) Y (j<M) HACER
SI T[i]==P[j] ENTONCES
i = i + 1
j = j + 1
SINO
i = i - j + 1
j = 0
FINSI
FINMIENTRAS
SI j==M ENTONCES
Resultado = i - M
SINO
Resultado = -1
FINSI
DEVOLVER Resultado
FIN BusqCadena

Introduccin a los Computadores

Bsqueda Directa Hacia Atrs

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

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 relacin
de orden (<).
El problema de ordenacin es encontrar una permutacin
s, tal que si V es una variable del tipo Vector :
V[si] <= V[si+1], 1<= i <= MAX-1
El orden deseado ser: V[s1], V[s2], ........, V[sMAX].
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

23 15 20
Introduccin a los Computadores

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.

1 3 5 7
9
23 15 20
Paso5:
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

Introduccin a los Computadores

Ordenacin por Insercin


Cmo realizar la insercin?
Insercin directa Abrir un hueco en la
sucesin V1,....Vi-1 para encajar Vi
Ejemplo:
Paso4:
i=5. Suponemos V1,...., V4 ordenados, insertamos V5 =>
V1,......, V5 ordenados.
1
3
7
9
5
23
15
20
1
3
5
7
9
23
15
20
Introduccin a los Computadores

Ordenacin por Insercin


ALGORITMO Indice BuscarPosicion
(E TipoElemento valor; E
Vector V;E Indice fin)
VAR
Indice i
INICIO
i=1
MIENTRAS (i<=fin) Y (V[i] <
valor) HACER
i=i+1
FINMIENTRAS
DEVOLVER (i)
FIN BuscarPosicion

ALGORITMO AbrirHueco (ES Vector


V;
E Indice inicio,
fin)
VAR
Indice i
INICIO
PARA i=fin HASTA inicio + 1
(PASO -1) HACER
V[i]=V[i-1]
FINPARA
FIN AbrirHueco

Introduccin a los Computadores

Ordenacin por Insercin


ALGORITMO Insercion (ES Vector V)
VAR
Indice i, pos
TipoElemento aux
INICIO
PARA i=2 HASTA MAX HACER
aux=V[i]
pos=BuscarPosicion(aux,V,i-1)
AbrirHueco(V, pos, i)
V[pos]=aux
FINPARA
FIN Insercion

Una forma ms RAPIDA


de realizar la insercin
Bsqueda Binaria
posicin insercin valor
Mejora 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, med
INICIO
izq = 1
der = fin
MIENTRAS izd <= der HACER
med=(izq + der) DIV 2

SI valor < V[med]


ENTONCES
der= med - 1
SINO
izq=med + 1
FINSI
FINMIENTRAS
DEVOLVER (izq)
FIN BuscarPosicion

Introduccin a los Computadores

Ordenacin por Seleccin


Idea Clave:
1)Determinar la posicin del menor elemento
del array
2)Intercambiar dicho elemento por el
elemento que hay en la primera posicin V1
3)Repetir esta operacin con los N-1
elementos restantes V2,....., VMAX
Introduccin a los Computadores

Ordenacin por Seleccin


Ejemplo
320 96 16 90 120 80 200 64
Paso1:
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

Paso5:
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

Resultado
Paso4:
16 64 80 90 120 320 200 96

16 64 80 90 96 120 200 320

N elementos

N-1 Intercambios

Introduccin a los Computadores

Ordenacin por Seleccin


ALGORITMO Indice PosMenorElem (E
Vector V;E Indice inicio)

DEVOLVER(pos_menor)
FIN PosMenorElem

VAR
Indice pos_menor, i
INICIO
pos_menor=inicio
PARA i=inicio+1 HASTA MAX
HACER
SI V[i] < V[pos_menor]
ENTONCES
pos_menor=i
FINSI
FINPARA

ALGORITMO Intercambiar (ES


TipoElemento x, y)
VAR
TipoElemento aux
INICIO
aux=x
x=y
y=aux
FIN Intercambiar

Introduccin a los Computadores

Ordenacin por Seleccin


ALGORITMO Seleccion(ES Vector
V)
VAR
Indice i
INICIO
PARA i=1 HASTA MAX-1 HACER
SubirMenorSeleccion(V,i)
FINPARA
FIN Seleccion
ALGORITMO SubirMenorSeleccion
(ES Vector V;E Indice
posicion)

VAR
Indice pos_menor
INICIO
pos_menor=
Posicion_menor_elem(V, posicion+1)
SI V[posicion] > V[pos_menor]
ENTONCES
Intercambiar(V[posicion],
V[pos_menor])
FINSI
FIN 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 proceso
3) 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
Ejemplo
72

64

50

23

85

18

37

99

45

72
64
50
23
85
18
37
99
8
45

72
64
50
23
85
18
37
8
99
45

72
64
50
23
85
18
8
37
99
45

72
64
50
23
85
8
18
37
99
45

72
64
50
23
8
85
18
37
99
45

72
64
50
8
23
85
128
37
99
45

72
64
8
50
23
85
18
37
99
45

72
8
64
50
23
85
18
37
99
45

8
72
64
50
23
85
18
37
99
45

Paso1:
72
64
50
23
85
18
37
99
45
8

Introduccin a los Computadores

Ordenacin por
Intercambio
Paso2:
8
72
64
50
23
85
18
37
99
45

8
72
64
50
23
85
18
37
45
99

8
72
64
50
23
85
18
37
45
99

8
72
64
50
23
85
18
37
45
99

8
72
64
50
23
18
85
37
45
99

8
72
64
50
18
23
85
37
45
99

8
72
64
18
50
23
85
37
45
99

8
72
18
64
50
23
85
37
45
99

8
18
72
64
50
23
85
37
45
99

37

45

50

64

72

85

99

Paso3,....., Paso9:
8

18

23

Introduccin a los Computadores

Ordenacin por
Intercambio
ALGORITMO Intercambio (ES
Vector V)
VAR
Indice i
INICIO
PARA i=1 HASTA MAX-1 HACER
SubirMenorBurbuja(V,i)
FINPARA
FIN Intercambio
ALGORITMO
SubirMenorBurbuja(ES
Vector V;E Indice
posicion)

VAR
Indice i
INICIO
PARA i=MAX HASTA
posicion+1
(PASO -1) HACER
SI V[i-1] > V[i]
ENTONCES
Intercambiar(
V[i-1], V[i])
FINSI
FINPARA
FIN SubirMenorBurbuja

Introduccin a los Computadores

Ordenacin por
Intercambio
Mejora
Eliminar recorridos innecesarios
Elementos ya ordenados en un recorrido
no se ha hecho ningn intercambio

Introduccin a los Computadores

Ordenacin por
Intercambio
ALGORITMO Intercambio2 (ES
Vector V)
VAR
Indice i
B intercambio
TipoElemento aux
INICIO
intercambio=VERDADERO
i=1
MIENTRAS i<=MAX-1 Y
intercambio HACER
intercambio=FALSO

PARA j=1 HASTA MAX-i HACER


SI V[j]>V[j+1]ENTONCES
intercambio=VERDADERO
aux=V[j]
V[j]=V[j+1]
V[j+1]=aux
FINSI
FINPARA
i=i+1
FINMIENTRAS
FIN 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

Introduccin a los Computadores

También podría gustarte