You are on page 1of 30

Teora 7

Estructuras de datos ARREGLO

Clase 7

Programacin I

Temas que veremos hoy


Definicin de tipo de dato Arreglo.

Clasificacin del tipo de dato Arreglo.


Declaracin del tipo de dato Arreglo. Operaciones frecuentes en el tipo Arreglo. Ejemplos.

Clase 7

Programacin I

Arreglos: Motivacin
Sucursal 1 2 3 4 5 6 7 8 9 Ventas

100 150 100 300

Supongamos que una empresa recibe informacin de las ventas de cada una de sus 10 sucursales y desea obtener un listado de las sucursales cuyas ventas superan el promedio de las ventas de la empresa. Cmo organizara la informacin? Cmo procesara los datos para tener el promedio global de ventas y comparar con las ventas de cada sucursal?

500
100 200

120
300

Pueden existir diferentes soluciones correctas con los tipos de datos que hemos visto hasta ahora en el curso:

Clase 7 150 10

Programacin I

Arreglos: Motivacin
Sucursal 1
2 3 4

Ventas

100
150 100 300 500 100 200 120 300

a) Ingresar 2 veces el conjunto de datos. Se ingresan los datos para calcular el promedio global de ventas y luego volvemos a procesar los mismos datos, comparando con el promedio. Por ejemplo: Si tenemos 5000 facturas por sucursal, nos obliga a leer 2 veces 5000 x 10 = 50.000 datos.

5
6 7

8
9

10

Clase 7

150

Programacin I

Arreglos: Motivacin
Sucursal 1 2 3 4 5 6 7 8 9
Clase 7

Ventas

100

150
100 300 500 100 200 120 300 150

b) Podemos usar tantas variables diferentes como sucursales.

Es decir se acumulan las ventas por sucursal a medida que se lee (en este caso necesitamos 10 variables diferentes). Luego calculamos el promedio y comparamos cada total con el mismo.
De hecho esta solucin es ms eficiente, aunque algo confusa... y crecientemente compleja al aumentar el nmero de sucursales.

10

Programacin I

Arreglos: Motivacin
c) A partir de (b) resulta claro que sera conveniente tener una estructura que permitiera reunir todos los acumuladores de ventas bajo un nombre nico, que permitiera diferenciar (y acceder) a los datos de cada sucursal.
Para resolver estos problemas podemos usar una estructura de datos tipo arreglo.

Se puede decir que:

100 150 100 300 500 100 200 120 300 150
1 2 3 4 5 6 7 8 9 10

Sucursal [1] Sucursal [2] Sucursal [3] Sucursal [4] .

100 150 100 300

Sucursal

Clase 7

Programacin I

Arreglos: Definicin
Un arreglo (ARRAY) es una estructura de datos compuesta que permite acceder a cada componente por una variable ndice, que da la posicin de la componente dentro de la estructura de datos.

Se puede decir que:

100 150 100 300 500 100 200 120 300 150
1 Sucursal 2 3 4 5 6 7 8 9 10

Sucursal [1] Sucursal [2] Sucursal [3] Sucursal [4] .

100 150 100 300

Indice

Clase 7

Programacin I

Arreglos: Recordemos clasificacin


Tipos de Datos

Simples

Compuestos

Def. por el lenguaje

Def. por el usuario

Conjunto

Estructurados

Numrico Carcter Lgico

Enumerativo Subrango

Registro Arreglo

Clase 7

Programacin I

Arreglos: Definicin
Un tipo de dato Arreglo es una coleccin de elementos que se guardan consecutivamente en la memoria y se pueden referenciar a travs de un ndice.

Esta estructura de datos rene las siguientes caractersticas: Todos los elementos son del mismo tipo de datos, por eso es una estructura de datos homognea. Los elementos o componentes pueden recuperarse en cualquier orden, indicando simplemente su posicin, por eso es una estructura de datos de acceso directo. Como el acceso se hace a travs del ndice se la denomina tambin indexada. La memoria ocupada durante la ejecucin del programa es fija, por eso se dice que es una estructura de datos esttica. Dado que cada elemento tiene un elemento que le precede y uno que le sigue, esta estructura se denomina lineal.
Clase 7 Programacin I

Arreglos: Clasificacin
TEM [1] 10

TEM [2] 8.5

TEM [10] 11

Un arreglo con un solo ndice se denomina vector. Supongamos que deseamos guardar las temperaturas mximas diarias de un mes de 30 das. Tendremos 30 valores reales que representan las temperaturas de ese mes y lo almacenaremos en un vector llamado TEM, que se escribe de esta forma: 10
1

TEM [30] 12.4

8.5
2 .

12.4
30

Tem

En la memoria tendremos 30 casilleros seguidos conteniendo cada uno, una temperatura a partir de la direccin inicial asignada a Tem. La cantidad total de memoria depende de la cantidad de componentes y del tipo de dato de cada uno. En este caso sern 30 componentes de 4 bytes cada una 120 bytes.
Clase 7 Programacin I

Arreglos Tipo Vector


Cuando se trabaja con arreglos hay que tener en cuenta que:
10
1
Tem

8.5
2

10

9.8

12

8.5

..

12.4
30

Tem [6]:= 7

El valor 6 es la posicin ubicacin dentro de la estructura de datos. El valor 7 es el valor contenido para esa ubicacin.

Clase 7

Programacin I

Arreglos Declaracin del Tipo Vector


type tipo_elementos = ; indice = ; {indica la cantidad de elementos del vector} vector = array [ indice ] of tipo_elementos; var v:vector; Como conclusin se puede decir que: La variable v tiene asociada un rea de memoria fija consecutiva que es el lugar donde se almacenarn los valores. La variable v ocupar tantas posiciones de memoria como lo indique el tipo ndice en su declaracin.

Clase 7

Programacin I

Declaraciones en Pascal - Ejemplos


La declaracin del tipo arreglo debe indicar la cantidad de elementos y el tipo de elemento. Por ejemplo: Type Sucursales = Array [1..100] of real; Temperaturas = Array [1..30] of real; AosAutos = Array [2000..2010] of integer; Categorias = Array [ A .. D ] of real;

Frecuencia = Array [char] of integer;

Clase 7

Programacin I

Declaraciones en Pascal - Ejemplos


Type Sucursales = Array [1..100] of real; Temperaturas = Array [1..30] of real; AosAutos = Array [2000..2012] of integer;

Categorias = Array [ A .. D ] of real;


Frecuencia = Array [char] of integer;

Analicemos para cada declaracin de variable: - Memoria ocupada? - Tipo de ndice? - Tipo de los elementos?

Var Autos : aosAutos; {este vector tiene 11 componentes de tipo entero}

Frec : frecuencia; {Este vector tendr 255 componentes de tipo entero}


Sucursal : Sucursales; {Este vector tendr 100 componentes de tipo real} TotalCategorias: categorias;{ este vector tiene 4 componentes de tipo real}

TempMensual: Temperaturas; { este vector tiene 30 componentes de tipo real}


Clase 7 Programacin I

Arreglos: Declaracin del tipo vector


Tipos de datos permitidos en Pascal:

Vector = Array [ indice ] of tipo_elementos;


Es posible indexar los elementos por un ndice que corresponde a cualquier tipo ordinal: Entero Los elementos de un arreglo pueden pertenecer a cualquier tipo de datos de alocacin esttica: Enteros Reales Caracteres Registros Otro arreglo
Programacin I

Carcter
enumerativo. Por qu?

Por qu?

Clase 7

Arreglos: Operaciones del tipo vector


Asignacin Lectura / Escritura Recorridos Cargar datos en un vector Bsqueda secuencial de un elemento

Agregar elementos al final


Insertar elementos Borrar elementos

Bsqueda dicotmica de un elemento


Ordenacin de los elementos
Clase 7 Programacin I

Vector: Operacin de Asignacin


Type temperaturas = array [1..30] of real; Var tem : temperaturas;

Tem [1] := 10; Tem [M] := 23 {siempre que M tenga valor conocido y vlido}
Si se necesita inicializar un vector completo: Type AosAutos = Array [2000..2012] of integer; Var Autos : aosAutos; i: 2000..2012;

Tem [6] := a Tem [b] := 12

Es vlido?

. FOR i := 2000 TO 2012 do Autos [i] := 0 ;


Clase 7 Programacin I

Importante: Para inicializar un arreglo es necesario asignar cada celda por separado.

Vector: Operacin de Asignacin


Type AosAutos = Array [2000..2012] of integer;

Var Autos : aosAutos; i: 2000..2012; suma: integer;


Autos [2002] := 20; Autos [2005] := Autos [2002] + 10; Autos [2010] := Autos [2002] + Autos [2002]; suma := suma + Autos [2002];

Clase 7

Programacin I

Vector : Operacin de Lectura/Escritura


Type temperaturas = array [1..30] of real; Var tem : temperaturas; i: 1..30;

..
for i := 1 to 30 do

read (tem [i] );


for i := 1 to 30 do write (tem [i] ); Observacin:

Importante: componente se individualmente.

Cada trata

En qu variable queda el resultado de la lectura?


Qu variable se muestra en la sentencia write?
Clase 7 Programacin I

Vector : Operacin de Recorrido


La operacin de Recorrido en un vector consiste en recorrer el vector de manera total o parcial, para realizar algn proceso sobre sus elementos.
La operacin de Recorrido Total, implica analizar todos los elementos del vector, lo que lleva a recorrer completamente la estructura.
Qu estructuras de control conviene utilizar en cada caso?

La operacin de Recorrido Parcial, implica analizar los elementos del vector, hasta encontrar aquel que cumple con lo pedido. Puede ocurrir que se recorra todo el vector.
Ejemplos?

Clase 7

Programacin I

Vector : Ejemplo de Recorrido Total

Por ejemplo si nos piden saber la cantidad de veces que aparece la temperatura con valor 10 en el vector de temperaturas ya visto. Para ello habr que realizar un recorrido total para poder contar todas las apariciones del valor 10.
Estructura de control

Program REC-Temp10; Type temperaturas = array [1..30] of real; Var tem : temperaturas; i: 1..30; can10 : integer; begin can10 := 0;
.

{recorrido total del vector}


For i := 1 to 30 do If ( tem [i] = 10 ) then can10 := can10 + 1; writeln ( Veces que aparece 10:, Can10 ); end.

Clase 7

Programacin I

Vector : Ejemplo de Recorrido parcial

Por ejemplo si nos piden informar el primer da con temperatura igual a 15 (sabiendo que existe), se deber recorrer el vector de temperaturas hasta encontrar dicho valor.

Program REC-Temp15; Type temperaturas = array [1..30] of real; Var tem : temperaturas; i: 1..30;
begin

{recorrido total del vector}


i := 1; while (tem [i] <> 15) do i:= i+1; write (El primer da con temperatura 15 es: , i) end.

Estructura de control

Clase 7

Programacin I

Vector : Recorrido Parcial


Qu ocurre si en el ejemplo anterior se cambia la precondicin y el valor de temperatura 15 podra no existir?
Program REC-Temp15; Type temperaturas = array [1..30] of real; Var tem : temperaturas; i: integer; Begin i := 1; while (tem [i] <> 15) do i:= i+1;

Analicemos las condiciones del While

{ Recorre vector el<> cero} Se debera reemplazar por: While ( i el <= 30) hasta and (encontrar temp [i] 15 ) do

If (i= 31) write (El primer da con temperatura 15 es: , i) end. then write (No existe la temperatura 15) else write (El primer da con temperatura 15 es: , i) End;

Clase 7

Programacin I

Vector: dimensiones...
Cuando se trabaja con arreglos se deben hacer consideraciones importantes acerca de algunos aspectos:

Dimensin Fsica del arreglo


se especifica en el momento de la declaracin y determina su ocupacin de memoria. La cantidad de memoria no variar durante la ejecucin del programa.
Por qu?

Dimensin Lgica del arreglo


se determina cuando se cargan contenidos a los elementos del arreglo. Indica la cantidad de posiciones de memoria ocupadas con contenidos cargados.
Clase 7 Programacin I

Vector: parmetros...
Arreglos como parmetros
Qu parmetros deberan recibir y devolver los mdulos

que tratan con arreglos?

De qu tipo conviene que sean los parmetros relacionados con arreglos?

Clase 7

Programacin I

Vector: Cargar un vector


Aspectos a considerar:
dimF : dimensin fsica del vector (tamao especificado en la declaracin del vector)

dimL : cantidad de elementos en el vector (dimensin lgica).


Se trabajar con la siguiente declaracin de tipos: Const DimF = 1000; Type arreglo = Array [ 1..DimF] of integer;

Clase 7

Programacin I

Vector: Cargar un vector


Supongamos que se leen los valores: 5, 20, 13, 18, 100, 25 y 99 Procedure CARGAR ( var num: arreglo; var dimL: integer ); var dato : integer; begin dimL := 0; read (dato); Observar los parmetros... Qu retorna el procedimiento?

while (dato <> 99) and ( dimL < dimF ) do begin


dimL := dimL + 1; num [dimL] := dato; read (dato) end; End;
Clase 7 Programacin I

5
num 1

20
2

13

18

100

25

1000

dimL -> 5

Vector: Buscar un elemento


X= 89 24 12 5

33

89

-5

63

45

La bsqueda comienza desde el principio y se avanza por la estructura de manera secuencial, uno a uno. La solucin debera recorrer el vector y detenerse en caso de encontrar el elemento X.
Clase 7 Programacin I

Vector: Buscar un elemento


Consideremos la siguiente declaracin genrica:

Const
DimF = ... { mxima longitud del vector} Type

TipoElem = ... { tipo de datos del vector }


Indice = 0.. DimF ; arreglo = Array [ 1..DimF] of TipoElem;

Clase 7

Programacin I

Vector: Buscar un elemento


Mdulo Buscar procedure Buscar ( x: TipoElem; a:arreglo; - Recibe el vector donde buscar, dimL: Indice; var pos:Indice); - el elemento a buscar, - la dimensin lgica y - devuelve la posicin donde se encontr Begin pos:=1; while (pos<=dimL) and (x<>a[pos]) do - Ubicarse al principio del vector pos:=pos+1; - Mientras (no se llegue al final del if (pos > dimL) then pos:=0; vector) y (no encuentre el elemento) end; avanzo una posicin en el vector - Al salir del mientras se debe evaluar por cual de las condiciones finaliz

Qu pasa con j cuando el elemento no est?


Clase 7 Programacin I

You might also like