Clase 6 COMPUTACION 2009 C lase 7 Funciones low y high TYPE vector=array [1..30] of longint; VAR...

36
Clase 6 COMPUTACION 2009 Clase 7

Transcript of Clase 6 COMPUTACION 2009 C lase 7 Funciones low y high TYPE vector=array [1..30] of longint; VAR...

Page 1: Clase 6 COMPUTACION 2009 C lase 7 Funciones low y high TYPE vector=array [1..30] of longint; VAR vec:vector; Begin vec[32]:=23456; 4/21/2015 Computación.

Clase 6 COMPUTACION

2009 Clase

7

Page 2: Clase 6 COMPUTACION 2009 C lase 7 Funciones low y high TYPE vector=array [1..30] of longint; VAR vec:vector; Begin vec[32]:=23456; 4/21/2015 Computación.

Funciones low y highTYPE vector=array [1..30] of longint;VAR vec:vector;

Begin vec[32]:=23456;

04/21/23Computación - Facultad de

Ingeniería 2

Range check error !!!

La extensión es de 1 a 30 La extensión es de 1 a 30

Para verificar el rango puede usar las funciones low y high que devuelven los extremos de la extensión (o rango).

Writeln(low(vec)); {devuelve 1}Writeln(high(vec)); {devuelve 30}

Page 3: Clase 6 COMPUTACION 2009 C lase 7 Funciones low y high TYPE vector=array [1..30] of longint; VAR vec:vector; Begin vec[32]:=23456; 4/21/2015 Computación.

Arrays y strings

Los strings son vectores de caracteres. Es posible acceder a los caracteres de un stringmediante una sintaxis de array. Los string están indexados desde 0, pero el primer

carácter se encuentra en la posición 1.

Cadena:=‘Este es un ejemplo de string’;

C:=cadena[4]; {e}

D:=cadena[10]; {n}

Writeln(cadena[0]); 04/21/23

Computación - Facultad de Ingeniería 3

Error:element zero can’t be accessed

Page 4: Clase 6 COMPUTACION 2009 C lase 7 Funciones low y high TYPE vector=array [1..30] of longint; VAR vec:vector; Begin vec[32]:=23456; 4/21/2015 Computación.

VECTORES PARALELOS: ejemploSean los siguientes datos:

Apellido y n. Depto. Expensas Pagó?MARTINEZ,Juan 4 A 50 $ SiGONZALEZ Pedro 1 B 100 $ No

ALONSO Maria 2 D 30 $ SiALONSO Marcelo 5 H 120 $ si

Se desea tener un listado de los propietarios que no han pagado las expensas. Imprimir apellido y nombre, departamento y deuda.

Page 5: Clase 6 COMPUTACION 2009 C lase 7 Funciones low y high TYPE vector=array [1..30] of longint; VAR vec:vector; Begin vec[32]:=23456; 4/21/2015 Computación.

VECTORES PARALELOS:VECTORES PARALELOS:

Apellido y n. Depto. Expensas Pagó?MARTINEZ,Juan 4 A 50 $ SiGONZALEZ Pedro 1 B 100 $ No

ALONSO Maria 2 D 30 $ SiALONSO Marcelo 5 H 120 $ si

AyN Depto Expen Pago

Colección de

datos del mismo

tipo: string

Colección de

datos del mismo

tipo: string

Colección de

datos del mismo

tipo: real

Colección de

datos del mismo

tipo: booleano

Page 6: Clase 6 COMPUTACION 2009 C lase 7 Funciones low y high TYPE vector=array [1..30] of longint; VAR vec:vector; Begin vec[32]:=23456; 4/21/2015 Computación.

VECTORES PARALELOS:VECTORES PARALELOS:

Apellido y n. Depto. Expensas Pagó?MARTINEZ,Juan 4 A 50 $ SiGONZALEZ Pedro 1 B 100 $ No

ALONSO Maria 2 D 30 $ SiALONSO Marcelo 5 H 120 $ si

AyN Depto Expen Pago (vector de (vector de (vector de (Vector String) string) reales) booleano)

Page 7: Clase 6 COMPUTACION 2009 C lase 7 Funciones low y high TYPE vector=array [1..30] of longint; VAR vec:vector; Begin vec[32]:=23456; 4/21/2015 Computación.

04/21/23Computación - Facultad de

Ingeniería 7

Vectores paralelosVectores paralelosLos vectores paralelos pueden ser usados para almacenar grupos degrupos de datos de diferentes tipos datos de diferentes tipos.

Las características asociadas a cada grupo pueden ser representadas apropiadamente con esta estructura de datos.

Por ejemplo, un grupo puede estar constituido por los datos de un propietario, o datos sobre un libro o datos sobre un alumno, etc.

MARTINEZ,Juan 4A 50 $ Si MARTINEZ,Juan 4A 50 $ Si Grupo de datos de un propietarioGrupo de datos de un propietario

Page 8: Clase 6 COMPUTACION 2009 C lase 7 Funciones low y high TYPE vector=array [1..30] of longint; VAR vec:vector; Begin vec[32]:=23456; 4/21/2015 Computación.

04/21/23Computación - Facultad de

Ingeniería 8

Vectores paralelosVectores paralelos

Cada una de las características de un grupo (por ejemplo Nombre, Dirección, Autor, etc.) deben almacenarse y recuperarse de manera tal de mantener la integridadintegridad de los datos.

MARTINEZ,Juan 4A 50 $ Si MARTINEZ,Juan 4A 50 $ Si

Estos datos están asociados entre si (son todos del mismo propietario) y NO deben mezclarse con los datos de otro propietario.

Estos datos están asociados entre si (son todos del mismo propietario) y NO deben mezclarse con los datos de otro propietario.

Page 9: Clase 6 COMPUTACION 2009 C lase 7 Funciones low y high TYPE vector=array [1..30] of longint; VAR vec:vector; Begin vec[32]:=23456; 4/21/2015 Computación.

04/21/23Computación - Facultad de

Ingeniería 9

Vectores paralelosVectores paralelos

Como se tiene variosvarios grupos de datos (p.e. varios propietarios), se puede almacenar en un vector la misma característica correspondiente a cada grupo. Esto se puede hacer con cada una de las características. De ahí la noción de vector paralelovector paralelo.

Para almacenar y recuperar los ítems de cada unidad, se usan componentes del mismo índicecomponentes del mismo índice en cada uno de los vectores paralelos.

Page 10: Clase 6 COMPUTACION 2009 C lase 7 Funciones low y high TYPE vector=array [1..30] of longint; VAR vec:vector; Begin vec[32]:=23456; 4/21/2015 Computación.

VECTORES PARALELOS: ejemplo

Apellido y n. Depto. Expensas Pagó? IndiceMARTINEZ,Juan 4 A 50 $ SiGONZALEZ Pedro 1 B 100 $ No

ALONSO Maria 2 D 30 $ SiALONSO Marcelo 5 H 120 $ si

11

22

33 44

Si el índice es igual a 1, el primer grupo de datos está representada en las primeras componentes de cada uno de los cuatro vectores.

Page 11: Clase 6 COMPUTACION 2009 C lase 7 Funciones low y high TYPE vector=array [1..30] of longint; VAR vec:vector; Begin vec[32]:=23456; 4/21/2015 Computación.

Program vect_paralelo; Type Vec1=array[1..100] of string[25]; Vec2=array[1..100] of real; Vec3=array[1..100] of boolean;Var Depto,AyN:vec1; Expen:vec2; Pago:vec3; N,I,J,k:integer; Aux:char; Begin Write(‘Cant. de deptos’);Readln(N);

Page 12: Clase 6 COMPUTACION 2009 C lase 7 Funciones low y high TYPE vector=array [1..30] of longint; VAR vec:vector; Begin vec[32]:=23456; 4/21/2015 Computación.

For i:=1 to N do Begin Writeln(‘Departamento ‘,i); Write(‘Apellido y nom.’);readln(AyN[i]); Write(‘Nro. De departamento’); readln(depto[i]); Write( ‘Expensas ‘); readln(expen[i]); Write(‘Ingrese S si pago, N sino pago’); REPEAT

Readln(aux) UNTIL (aux=‘S’) or (aux=‘N’); pago[i]:=aux=‘S’; end;for i:=1 to N do if not(pago[i]) then writeln(AyN[i],depto[i],expen[i]);end.

Page 13: Clase 6 COMPUTACION 2009 C lase 7 Funciones low y high TYPE vector=array [1..30] of longint; VAR vec:vector; Begin vec[32]:=23456; 4/21/2015 Computación.

04/21/23Computación - Facultad de

Ingeniería 13

Procesamiento elemental de datos

Uno de los procedimientos más comunes y útiles en el procesamiento de datos, es la clasificación u ordenación de los mismos.

Ordenar es el proceso de reorganizar un conjunto dado de objetos en una secuencia determinada.

Page 14: Clase 6 COMPUTACION 2009 C lase 7 Funciones low y high TYPE vector=array [1..30] of longint; VAR vec:vector; Begin vec[32]:=23456; 4/21/2015 Computación.

04/21/23Computación - Facultad de

Ingeniería 14

Procesamiento elemental de datos

La colocación en orden de una lista de valores se llama ordenamiento.

Por ejemplo, se podría disponer una lista de valores numéricos en orden ascendente o descendente, o bien una lista de nombres en orden alfabético.

La localización de un elemento de una lista se llama búsqueda.

Page 15: Clase 6 COMPUTACION 2009 C lase 7 Funciones low y high TYPE vector=array [1..30] of longint; VAR vec:vector; Begin vec[32]:=23456; 4/21/2015 Computación.

04/21/23Computación - Facultad de

Ingeniería 15

Procesamiento elemental de datos

La búsqueda puede diseñarse de manera más eficiente después de que la lista ha sido ordenada.

Existen varios métodos para ordenamientoordenamiento, clasificados en tres modalidades:

1) Inserción2) Intercambio3) Selección.

Page 16: Clase 6 COMPUTACION 2009 C lase 7 Funciones low y high TYPE vector=array [1..30] of longint; VAR vec:vector; Begin vec[32]:=23456; 4/21/2015 Computación.

04/21/23Computación - Facultad de

Ingeniería 16

Procesamiento elemental de datos

En cada familia se distinguen dos versiones:

un método simple y directométodo simple y directo, fácil de comprender pero de escasa eficiencia respecto al tiempo de ejecución, y

un método rápido, más sofisticadométodo rápido, más sofisticado en su ejecución por la complejidad de las operaciones a realizar, pero mucho más eficiente en cuanto a tiempo de ejecución.

Page 17: Clase 6 COMPUTACION 2009 C lase 7 Funciones low y high TYPE vector=array [1..30] of longint; VAR vec:vector; Begin vec[32]:=23456; 4/21/2015 Computación.

04/21/23Computación - Facultad de

Ingeniería 17

Procesamiento elemental de datos

En general, para arreglos con pocos elementos, los métodos directos son más eficientes (menor tiempo de ejecución) mientras que para grandes cantidades de datos se deben emplear los llamados métodos rápidos.

Page 18: Clase 6 COMPUTACION 2009 C lase 7 Funciones low y high TYPE vector=array [1..30] of longint; VAR vec:vector; Begin vec[32]:=23456; 4/21/2015 Computación.

04/21/23Computación - Facultad de

Ingeniería 18

Objetivos del OrdenamientoObjetivos del Ordenamiento

El propósito principal de un ordenamiento es el de facilitar las búsquedasfacilitar las búsquedas de los miembros del conjunto ordenado.

Ejemplos: guía telefónica, padrón electoral, bibliotecas, diccionarios, etc.

El ordenar un grupo de datos significa movermover los datos para que queden en una secuencia tal que represente un ordenorden, el cual puede ser numérico, alfabético, ascendente o descendente.

Page 19: Clase 6 COMPUTACION 2009 C lase 7 Funciones low y high TYPE vector=array [1..30] of longint; VAR vec:vector; Begin vec[32]:=23456; 4/21/2015 Computación.

04/21/23Computación - Facultad de

Ingeniería 19

InserciónInserción El fundamento de este método consiste en

insertar los elementos no ordenados del arreglo en subarreglos del mismo que ya estén ordenados.

Dependiendo del método elegido para encontrar la posición de inserción tendremos distintas versiones del método de inserción.

Page 20: Clase 6 COMPUTACION 2009 C lase 7 Funciones low y high TYPE vector=array [1..30] of longint; VAR vec:vector; Begin vec[32]:=23456; 4/21/2015 Computación.

program insercion;type vector=array[0..40] of integer;var vec:vector; n,i,j,aux:integer;  BEGIN WRITE('Ingrese el valor de n '); READLN(n); FOR i:=1 TO n do begin WRITE('Ingrese elemento ',i,' '); READLN(vec[i]) end;

INSERCION INSERCION INSERCION INSERCION

Page 21: Clase 6 COMPUTACION 2009 C lase 7 Funciones low y high TYPE vector=array [1..30] of longint; VAR vec:vector; Begin vec[32]:=23456; 4/21/2015 Computación.

FOR i:=2 TO n DO begin aux:=vec[i];{vec[i] es el que se ord.} j:=i; WHILE (j>1) and (vec[j-1]>aux) DO begin vec[j]:=vec[j-1]; j:=j-1 end; vec[j]:=aux end; FOR i:=1 TO N DO WRITE(vec[i],' '); READLN END.

INSERCIONINSERCION

(orden (orden ascendente) ascendente)

INSERCIONINSERCION

(orden (orden ascendente) ascendente)

Page 22: Clase 6 COMPUTACION 2009 C lase 7 Funciones low y high TYPE vector=array [1..30] of longint; VAR vec:vector; Begin vec[32]:=23456; 4/21/2015 Computación.

Explicación:1) Se ordena un elemento del vector por vez (desde 2,3,…

hasta n). Son ordenamientos parciales. Se supone inicialmente, que el 1er elemento esta ordenado.

2) El elemento que debe ser ordenado se inserta en el orden que le corresponde dentro del vector parcialmente ordenado.

3) Para lograrlo, desde la posición donde está el elemento a ordenar, se controla (hacia la ‘Izquierda’)los elementos que sean mayores del quiero insertar. En cuanto encuentre un elemento menor, almaceno el elemento en la posición siguiente a ese menor. Se controla con la variable j. Se debe hacer un corrimiento correcto para no perder datos.

4) También se verifica si estoy en la posición 1(que es la ultima que se controla.)

INSERCIONINSERCION

(orden ascendente) (orden ascendente)

INSERCIONINSERCION

(orden ascendente) (orden ascendente)

Page 23: Clase 6 COMPUTACION 2009 C lase 7 Funciones low y high TYPE vector=array [1..30] of longint; VAR vec:vector; Begin vec[32]:=23456; 4/21/2015 Computación.

04/21/23Computación - Facultad de

Ingeniería 23

IntercambioIntercambio

El método de intercambio se basa en comparar los elementos del arreglo e intercambiarlos si su posición actual o inicial es contraria a la deseada.

Pertenece a este método el de la burbuja clasificado como intercambio directo. Aunque no es muy eficiente para ordenar listas grandes, es fácil de entender y muy adecuado para ordenar una pequeña lista de unos 100 elementos o menos.

Page 24: Clase 6 COMPUTACION 2009 C lase 7 Funciones low y high TYPE vector=array [1..30] of longint; VAR vec:vector; Begin vec[32]:=23456; 4/21/2015 Computación.

04/21/23Computación - Facultad de

Ingeniería 24

Algoritmo burbuja

Este algoritmo compara elementos consecutivos del arreglo uno con respecto del otro, si es mayor o menor según el tipo de ordenamiento y los cambia de posición.

Este proceso se repite recorriendo todo el arreglo para posicionar un solo dato, por lo que es necesario repetirlo para los demás datos del arreglo

Page 25: Clase 6 COMPUTACION 2009 C lase 7 Funciones low y high TYPE vector=array [1..30] of longint; VAR vec:vector; Begin vec[32]:=23456; 4/21/2015 Computación.

program burbuja;

type vector=array[1..100] of integer;var vec:vector; k,aux,i,N:integer;BEGIN WRITE('Ingrese el valor de n '); READLN(n); FOR i:=1 TO n do begin WRITE('Ingrese elemento ',i,' '); READLN(vec[i]) end;

BURBUJA BURBUJA BURBUJA BURBUJA

Page 26: Clase 6 COMPUTACION 2009 C lase 7 Funciones low y high TYPE vector=array [1..30] of longint; VAR vec:vector; Begin vec[32]:=23456; 4/21/2015 Computación.

FOR k:=1 TO N-1 DO{N-1 pasadas} FOR i:= 1 to N-k DO begin IF vec[i]> vec[i+1] THEN begin aux:=vec[i]; vec[i]:=vec[i+1]; vec[i+1]:=aux; end; end; FOR i:=1 TO N DO WRITE(vec[i],' '); READLNEND. BURBUJA BURBUJA BURBUJA BURBUJA

Page 27: Clase 6 COMPUTACION 2009 C lase 7 Funciones low y high TYPE vector=array [1..30] of longint; VAR vec:vector; Begin vec[32]:=23456; 4/21/2015 Computación.

04/21/23Computación - Facultad de

Ingeniería 27

Selección

Los métodos de ordenación por selección se basan en dos principios básicos:

1) Seleccionar el elemento más pequeño (o más grande) del arreglo.

2) Colocarlo en la posición más baja (o más alta) del arreglo.

A diferencia del método de la burbuja, en este método el elemento más pequeño (o más grande) es el que se coloca en la posición final que le corresponde.

Page 28: Clase 6 COMPUTACION 2009 C lase 7 Funciones low y high TYPE vector=array [1..30] of longint; VAR vec:vector; Begin vec[32]:=23456; 4/21/2015 Computación.

{Seleccion *****************}

  for i:=1 to n-1 do

begin

menor:=vec[i];

posmenor:=i;

for k:=i+1 to n do

IF vec[k]<menor THEN

begin

menor:=vec[k];

posmenor:=k

end;

vec[posmenor]:=vec[i];

vec[i]:=menor;

end;

Se ha obviado la entrada de datos

SelecciónSelección

(orden (orden ascendente) ascendente)

SelecciónSelección

(orden (orden ascendente) ascendente)

El menor se pone a la izquierda

Page 29: Clase 6 COMPUTACION 2009 C lase 7 Funciones low y high TYPE vector=array [1..30] of longint; VAR vec:vector; Begin vec[32]:=23456; 4/21/2015 Computación.

04/21/23Computación - Facultad de

Ingeniería 29

Búsqueda

La búsqueda es una operación que tiene por objeto la localización de un elemento dentro de la estructura de datos.

A menudo un programador trabaja con grandes cantidades de datos almacenados en arreglos y en algun momento puede resultar necesario determinar si un arreglo contiene un valor que coincide con algún valor clave buscado.

Page 30: Clase 6 COMPUTACION 2009 C lase 7 Funciones low y high TYPE vector=array [1..30] of longint; VAR vec:vector; Begin vec[32]:=23456; 4/21/2015 Computación.

04/21/23Computación - Facultad de

Ingeniería 30

Búsqueda

Siendo el array de una dimensión o lista una estructura de acceso directo y a su vez de acceso secuencial, encontramos dos técnicas que utilizan estos dos métodos de acceso, para encontrar elementos dentro de un array:

1) búsqueda secuencial

2) búsqueda binaria.

Page 31: Clase 6 COMPUTACION 2009 C lase 7 Funciones low y high TYPE vector=array [1..30] of longint; VAR vec:vector; Begin vec[32]:=23456; 4/21/2015 Computación.

04/21/23Computación - Facultad de

Ingeniería 31

Búsqueda secuencial

La búsqueda secuencial es la técnica más simple para buscar un elemento en un arreglo.

Consiste en recorrer el arreglo elemento a elemento e ir comparando con el valor buscado (clave).

Se empieza con la primera casilla del arreglo y se observa una casilla tras otra hasta que se encuentra el elemento buscado o se han visto todas las casillas.

Page 32: Clase 6 COMPUTACION 2009 C lase 7 Funciones low y high TYPE vector=array [1..30] of longint; VAR vec:vector; Begin vec[32]:=23456; 4/21/2015 Computación.

04/21/23Computación - Facultad de

Ingeniería 32

Búsqueda secuencial

Si el arreglo no posee ningún orden en particular, existe la misma probabilidad de que el valor se encuentra ya sea en el primer elemento, como en el último.

El método de búsqueda secuencial funciona bien con arreglos pequeños o para arreglos no ordenados.

Page 33: Clase 6 COMPUTACION 2009 C lase 7 Funciones low y high TYPE vector=array [1..30] of longint; VAR vec:vector; Begin vec[32]:=23456; 4/21/2015 Computación.

04/21/23Computación - Facultad de

Ingeniería 33

Búsqueda binaria

Si el arreglo está ordenado, se puede utilizar la técnica de alta velocidad de búsqueda búsqueda binariabinaria, donde se reduce sucesivamente la operación eliminando repetidas veces la mitad de la lista restante.

Page 34: Clase 6 COMPUTACION 2009 C lase 7 Funciones low y high TYPE vector=array [1..30] of longint; VAR vec:vector; Begin vec[32]:=23456; 4/21/2015 Computación.

04/21/23Computación - Facultad de

Ingeniería 34

Búsqueda binaria

La búsqueda binaria es el método más eficiente para encontrar elementos en un arreglo ordenado.

El proceso comienza comparando el elemento central del arreglo con el valor buscado. Si ambos coinciden finaliza la búsqueda.

Page 35: Clase 6 COMPUTACION 2009 C lase 7 Funciones low y high TYPE vector=array [1..30] of longint; VAR vec:vector; Begin vec[32]:=23456; 4/21/2015 Computación.

04/21/23Computación - Facultad de

Ingeniería 35

Búsqueda binaria

Si no ocurre así, el elemento buscado será mayor o menor en sentido estricto que el central del arreglo.

Si el elemento buscado es mayor se procede a hacer búsqueda binaria en el subarreglo superior

Si el elemento buscado es menor que el contenido

de la casilla central, se debe cambiar el segmento a considerar al segmento que está a la izquierda de tal sitio central.

Page 36: Clase 6 COMPUTACION 2009 C lase 7 Funciones low y high TYPE vector=array [1..30] of longint; VAR vec:vector; Begin vec[32]:=23456; 4/21/2015 Computación.

{BUSQUEDA BINARIA}

  min:=1;

max:=n;

WHILE min<max DO

begin

j:=(min+max)div 2;

IF x>vec[j] THEN

min:=j+1

ELSE

max:=j;

end;

IF x=vec[min] THEN

writeln('Se encontro el elemento ', x)

ELSE

writeln('No se encontro el elemento', x);

Se ha obviado la entrada de datos

Los datos están ordenados

Se busca si el elemento x está en el vector vec