Professional Documents
Culture Documents
Clase 7
Programacin I
Clase 7
Programacin I
Arreglos: Motivacin
Sucursal 1 2 3 4 5 6 7 8 9 Ventas
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
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.
100 150 100 300 500 100 200 120 300 150
1 2 3 4 5 6 7 8 9 10
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.
100 150 100 300 500 100 200 120 300 150
1 Sucursal 2 3 4 5 6 7 8 9 10
Indice
Clase 7
Programacin I
Simples
Compuestos
Conjunto
Estructurados
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 [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
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
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
Clase 7
Programacin I
Clase 7
Programacin I
Analicemos para cada declaracin de variable: - Memoria ocupada? - Tipo de ndice? - Tipo de los elementos?
Carcter
enumerativo. Por qu?
Por qu?
Clase 7
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;
Es vlido?
Importante: Para inicializar un arreglo es necesario asignar cada celda por separado.
Clase 7
Programacin I
..
for i := 1 to 30 do
Cada trata
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
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;
.
Clase 7
Programacin I
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
Estructura de control
Clase 7
Programacin I
{ 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:
Vector: parmetros...
Arreglos como parmetros
Qu parmetros deberan recibir y devolver los mdulos
Clase 7
Programacin I
Clase 7
Programacin I
5
num 1
20
2
13
18
100
25
1000
dimL -> 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
Const
DimF = ... { mxima longitud del vector} Type
Clase 7
Programacin I