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

14
Tipos de datos Estruturados String y ordenamiento Prof:Eridan Otto Programación de Computadores Lenguaje Pascal

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

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

Tipos de datos Estruturados String y ordenamiento

Prof:Eridan Otto

Programación de ComputadoresLenguaje Pascal

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

Sesión 12: Tipos de datos Estruturados

Programación de Computadores Lenguaje Pascal

TEMARIOTipos de datos Estruturados

• String• Búsqueda y oredenamiento

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

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

Page 4: Tipos de datos Estruturados String y ordenamiento Prof:Eridan Otto 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

Page 5: Tipos de datos Estruturados String y ordenamiento Prof:Eridan Otto 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

Page 6: Tipos de datos Estruturados String y ordenamiento Prof:Eridan Otto 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

Page 7: Tipos de datos Estruturados String y ordenamiento Prof:Eridan Otto 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

Page 8: Tipos de datos Estruturados String y ordenamiento Prof:Eridan Otto 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.

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

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;

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

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;

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

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

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

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.

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

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

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

Fin Clase 12