Tipos de datos Estruturados String y ordenamiento Prof:Eridan Otto Programación de Computadores...

Post on 23-Jan-2016

218 views 0 download

Transcript of Tipos de datos Estruturados String y ordenamiento Prof:Eridan Otto Programación de Computadores...

Tipos de datos Estruturados String y ordenamiento

Prof:Eridan Otto

Programación de ComputadoresLenguaje Pascal

Sesión 12: Tipos de datos Estruturados

Programación de Computadores Lenguaje Pascal

TEMARIOTipos de datos Estruturados

• String• Búsqueda y oredenamiento

Introducción:Cuando se requiere ocupar grupos de caracteres estructurados en una secuencia, se dispone del tipo de datos string. En una variable de tipo string se pueden almacenar entre 1 y 255 caracteres.

Ejemplo:VAR nombre:string; {la variable puede contener hasta 255 caracteres}

Si no se inicializa

...... writeln(nombre); {en pantalla aparece cualquier cosa} nombre:= ‘Juan Perez’ writeln(nombre); {en pantalla aparece Juan Perez}

Si se desea, se puede especificar el largo de un string

Ejemplo:VAR marca:string[5]; {la variable puede contener hasta 5 caracteres}

Sesión 12: Tipos de datos Estruturados: String

Programación de Computadores Lenguaje Pascal

...... marca:= ‘honda’; writeln(‘marca:’, marca); {marca:honda} marca:= ‘yamaha’; writeln(‘marca:’, marca); {marca:yamah} Otra característica del tipo string es que se pueden acceder a los caracteres como si la variable fuera una arreglo

Ejemplo:

VAR i,largo: INTREGER; Ramo:string[20];........ ramo:=‘Programacion’; largo:=LENGTH(ramo); {función que determina el largo de un string} FOR i:=1 TO largo DO write(ramo[largo-i+1); {en pantalla noicamargorp}

También se puede leer como cualquier variable, Ejemplo:READLN(ramo); {si se ingresa: programación de computadores}WRITELN(ramo);{se imprime programación de comp}

Sesión 12: Tipos de datos Estruturados: String

Programación de Computadores Lenguaje Pascal

Finalmente, dos strings se pueden concatenar mediante el operador +

Ejemplo:

VARRamo, sigla:string[20];........ ramo:=‘Programacion’; sigla:= ‘ IWI-131’ ramo:=ramo + sigla}WRITELN(ramo);{se imprime Programación IWI-131}

Sesión 12: Tipos de datos Estruturados: String

Programación de Computadores Lenguaje Pascal

Ejercicio1: Hacer un programa pascal que verifique si un string es palíndrome. Ejemplo abccba es palíndrome.

PROGRAM compara;VAR original,inverso:STRING; largo,i:INTEGER;BEGIN WRITE('Ingrese String:'); READLN(original); largo:=LENGTH(original); inverso:=original; FOR i:=1 TO largo DO inverso[i]:=original[largo - i + 1]; IF original= inverso THEN writeln('El string:',original,' es palindrome') ELSE writeln('El string:',original,' NO es palindrome')

END.

Sesión 12: Tipos de datos Estruturados: String

Programación de Computadores Lenguaje Pascal

Ejercicio2: Leer dos strings el primero más largo que el segundo.Indicar cuantas veces está contenido el segundo en el primero. Ejemplo, primero:’tres tristes tigres’, buscar ‘es’. Rutee.PROGRAM substr;VAR original,segundo:STRING; largo,largob,i,j,cant:INTEGER; encontrado:BOOLEAN;BEGIN REPEAT WRITE('Ingrese String:'); READLN(original); WRITE('Ingrese String a buscar:'); READLN(segundo); largo:=LENGTH(original); largob:=LENGTH(segundo) UNTIL largo > largob cant:=0; FOR i:=1 TO largo-largob + 1 DO begin encontrado:=TRUE; For j:= 1 TO largob DO begin IF original[i+j-1]<> segundo[j] THEN encontrado:=FALSE; IF encontrado THEN cant:=cat+1; end end; writeln('El string contiene:',cant,‘substrings ')

END.

Sesión 12: Tipos de datos Estruturados: String

Programación de Computadores Lenguaje Pascal

Sesión 12: Tipos de datos Estruturados: Ordenamiento

Programación de Computadores Lenguaje Pascal

Problema: dada una lista de elementos ordenarla, por ejemplo descendente de mayor a menor. Se divide el problema en tres partes, Lectura de datos, ordenamiento y despliegue.

PROGRAM bubble;CONST tamMax = 100; (*definiciones globales*)TYPE arr=array[1..tamMax] of INTEGER; VAR total,paramTam:INTEGER; numeros: arr; FUNCTION leeareglo( tam:INTEGER) :INTEGER;

PROCEDURE ordena(tot:INTEGER);

PROCEDURE imprime( nume:arr; total:INTEGER);BEGIN total := 0; (*inicializa contador*) total := leeareglo(tamMax); (*arreglo contador*) ordena(total); imprime(numeros,total);END.

Sesión 12: Tipos de datos Estruturados: Ordenamiento

Programación de Computadores Lenguaje Pascal

Solución: Se lee hasta una cantidad tope de elementos o ingreso de un dato negativo. La función devuelve la cantidad de elementos a ordenar;FUNCTION leeareglo(tam:INTEGER) :INTEGER; VAR parada:BOOLEAN; max,numleido,indice:INTEGER;BEGIN numleido:=0; indice:=1; parada:=TRUE;WHILE (indice <= tam) and parada DO BEGIN READLN(numleido); IF numleido > 0 THEN BEGIN numeros[indice]:=numleido; indice:=indice + 1 END ELSE parada:= FALSE; END; IF (indice= tam) THEN WRITELN(‘ completos los elementos del arreglo, no se puede seguir leyendo mas...'); END; leeareglo:=indice END;

Sesión 12: Tipos de datos Estruturados: Ordenamiento

Programación de Computadores Lenguaje Pascal

Solución: se procede a ordenar;PROCEDURE ordena(tot:INTEGER);VAR i,pivote,tope,busca:INTEGER;BEGIN

tope:=0; busca:=0; pivote:=0; FOR tope:=1 TO tot - 1 DO FOR busca:=tope+1 TO tot DO IF (numeros[busca]>numeros[tope]) THEN (*INTERCAMBIO BUBBLE*) BEGIN pivote:=numeros[tope]; numeros[tope]:=numeros[busca]; numeros[busca]:=pivote END;

END;

Sesión 12: Tipos de datos Estruturados: Ordenamiento

Programación de Computadores Lenguaje Pascal

Solución: se procede a desplegar arreglo ordenado;ROCEDURE imprime( nume:arr; total:INTEGER);VAR i:INTEGER;BEGIN WRITELN('Elementos ordenados:'); FOR i:=1 to total DO WRITELN(nume[i])END;Ruteo, suponiendo arreglo con valores 4 7 8 2 5

Tope = 1 7 4 8 2 5 8 4 7 2 5Tope = 2 8 7 4 2 5Tope = 3 8 7 5 2 4Tope = 4 8 7 5 4 2

Sesión 12: Tipos de datos Estruturados: Búsqueda

Programación de Computadores Lenguaje Pascal

Problema: Si un arreglo está desordenado, se puede hacer una función que dado un valor entregue su posición en el arreglo. Para esto hay que recorrerlo completamente.Suponga un arreglo de strings ya ordenado, entonces la búsqueda se puede hacer mucho más rápidamente. Este procedimiento se llama búsqueda binaria.FUNCTION busqueda(elem:STRING;arr:ARRAY[1..100] OF STRING,cant:INTEGER):INTEGER;VAR izq,der,medio:INTEGER; encontrado:BOOLEAN;BEGIN izq:=1;der:=cant;encontrado:=FALSE; WHILE (izq<=der) AND NOT encontrado DO BEGIN medio:=(izq+der) DIV 2; IF arr[medio] = elem THEN encontrado:=TRUE ELSE IF arr[medio]<elem THEN izq := medio +1 ELSE der := medio-1; END; IF encontrado THEN busqueda:= medio ELSE busqueda:= -1; END.

Sesión 12: Subprogramas: búsqueda binariaProgramación de Computadores Lenguaje Pascal

Buscar: ‘carrasco’Arrreglo de apelleidos : alfaro andrade carmona carrasco gutierrez hernandez zamora

Izq der medio encontrado apellido[medio]1 7 4 TRUE carrasco

Buscar: ‘fernandez’

Izq der medio encontrado apellido[medio]1 7 4 FALSE carrasco 5 7 6 FALSE hernandez 5 5 5 FALSE gutierrez 5 4 FALSE Sale izq > der

Fin Clase 12