ejemplo dee fabric_maquin.pdf

49
Tipos de Datos Compuestos Contenido del Tema 6.1. Arrays 6.2. Cadenas de caracteres 6.3. Registros 6.4. Búsqueda y ordenación T E M A 6 Introducción a los Computadores Introducción 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 ....?

Upload: cieloci

Post on 08-Nov-2015

234 views

Category:

Documents


1 download

TRANSCRIPT

  • 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