Está en la página 1de 11

4

Estructuras de datos: arreglos


4.1 Introduccin
Con frecuencia podemos encontrar problemas cuya solucin es muy difcil de implementar si utilizamos tipos simples de datos. Por otra parte, podemos encontrar una buena solucin al problema utilizando tipos estructurados de datos. Con el objeto de ilustrar este concepto, presentaremos un problema y dos soluciones al mismo utilizando tipos simples de datos. El lector observar lo complejo que resulta un algoritmo de solucin para ciertos problemas si no utilizamos tipos estructurados de datos. Posteriormente y luego de presentar los arreglos, mostraremos una solucin al problema planteado utilizando tipos estructurados de datos.

Ejemplo 4.1
Se tienen los sueldos de un grupo de 70 empleados de una empresa y necesitamos saber cuntos de estos empleados tienen un sueldo superior al promedio del grupo. Cmo podramos resolver este problema? A continuacin presentamos la primera solucin. DQOS: Si, 82,..., Syo Donde: Si representa el sueldo del empleado i.

176

Estructuras de datos: arreglos

Estructura Repetitiva Repetir

Diagrama de Flujo 4.1

4.1 Introduccin

177
Como necesitamos saber cuntos empleados ganaron un sueldo superior al promedio, se tuvieron que volver leer los 70 sueldos para comparar cada uno de ellos con el promedio.

Nota:

Explicacin de las Variables

/; S: AC: PROM: CONT:

Variable de tipo entero. Representa la variable de control del ciclo. Variable de tipo real. Variable de tipo real. Acumula los sueldos de los empleados. Variable de tipo real. Almacena el promedio de los sueldos. Variable de tipo entero. Se utiliza para contar cuntos sueldos son superiores al promedio.

En la tabla 4.1. podemos observar el seguimiento del diagrama de flujo. Por razones de practicidad en lugar de considerar 70 sueldos, consideraremos solamente 5.
Tabla 4.1

1 1
2
3 4 5 6 1 2 3 4 5 6

AC 0

PROM

COMT

1200.00
3950.00

1200.00 2750.00
3625.00

7575.00 8555.00 9605.70

980.00 1050.70 1921.14 1200.00 2750.00 3625.00 980.00 1050.70


1 2 0

Expresa el valor que se imprime. El Diagrama de flujo 4.1 en lenguaje algortmico, se expresa de esta forma:

178
Programa 4.1

Estructuras de datos: arreglos

DOBLE LECTURA {E programa resuelve el problema planteado en el ejemplo 4.1 por medio de una doble lectura. I y COhT son variables de tipo entero. 5, AC y PROM son variables de tipo real}.

1 1. Hacer AC - O e l 2. Repetir con desde 1 hasta 70 Leer 5 Macer AC AC + 5 e I 3. {Fin del ciclo del paso 2} 4. Macer PROM AC/70, COMT Oe 5. Repetir con ! desde 1 hasta 70 Leer 5 5.1 5/ 5 > PROM entonces Hacer COMT COMT + 1 5.2 {n del condicional del paso 5.1.} hacer I I+ 1 6. {Fin del ciclo del paso 5} 7. Escribir COMT.

Ejemplo 4.2 j^ A continuacin presentamos la segunda solucin. Datos: S1,S2, S3,S4,..., S70 Donde: SI, S2, S3, S4, ... , S70 son variables de tipo real que representan los sueldos de los 70 empleados de la empresa.

-.1 Introduccin

179

CONTo
51, 5Z, 53, 54, ..., 570

AC51+52+53+54+... + 570
PROM AC/70

Diagrama de Flujo 4.2

180
Explicacin de las variables:

Estructuras de datos: arreglos

CONT: AC: PROM:

Variable de tipo entero. Se utiliza para contar los sueldos que son superiores al promedio. Variable de tipo real. Se utiliza para almacenar la suma de los 70 sueldos. Variable de tipo real. Se utiliza para almacenar el promedio de los 70 sueldos.

SI, S2, Variables de tipo real. S3,...,S7Q:


Programa 4.2

MUCHA5 VARIABLES {El programa resuelve el problema planteado en el ejemplo 4.1, utilizando muchas variables} {COMT es una variable de tipo entero. AC, PROM, 51, 52, 53, ..., 570 son variables de tipo real} 1. hacer COhT < O 2. Leer51, 52, 53, 54,..., 570

3. hacer AC

51 + 52 + 53 + 54 .+ 570

PROM

AC/70

4. 5i 51 > PROM entonces hacer COHT COMT + 1 5. {Fin del condicional del paso 4} 6. 5i 52 > PROM entonces hacer CONT COMT + 1 7. {n del condicional del paso 6} 8. 5/ 53 > PROM entonces hacer COHT COhT + 1 9. {Fin del condicional del paso 8} 142. 5/ 570 > PROM entonces Hacer COhT COhT + 1 143. {n del condicional del paso 142} 144. Escribir COhT

Las dos soluciones son muy representativas de los inconvenientes a los que debemos enfrentarnos al tratar de resolver el problema utilizando tipos simples de datos. En la solucin planteada en el diagrama de flujo 4.1 el usuario del algo-

- _i Arreglos unidimensionales

181

-_mo debe ingresar dos veces el conjunto de datos. Esto resulta totalmente im: rctico (considere que e nmero de datos puede ser mayor que 70) y adems - eficiente (la operacin de lectura ya sea de manera interactiva con el usuafio o :=sde un archivo debe repetirse', lo que ocasiona prdida de tiempo). En la solucin planteada en el diagrama de flujo 4.2. se manejan 70 variables -: r. memoria. Esta solucin presenta el inconveniente de que el manejo de las vstales puede volverse incontrolable, si el nmero de las mismas crece consideradamente. Adems algunos pasos especificados en el algoritmo se repiten ya que - D pueden generalizarse. Esta caracterstica no slo ocasiona ms trabajo, sino -^mbin es causa de errores. Es sabido que ejecutar una tarea repetidamente (en -3ie caso escribir un mismo paso varias veces) quita inters a la accin que se .si llevando a cabo, lo que a su vez ocasiona errores. Puede observarse enton:es, que ninguna de las dos soluciones resulta prctica y eficiente. Es necesario _in nuevo tipo de datos que permita tratar estos problemas de una manera ms adecuada. Los tipos de datos estructurados que ayudan a resolver problemas :3rno ste son los arreglos.

4.2 Arreglos unidimensionales


Un arreglo se define como una coleccin finita, homognea y ordenada de elementos. Finita: Homognea: Ordenada: todo arreglo tiene un lmite, es decir se debe determinar cul ser el nmero mximo de elementos que podrn formar parte del arreglo. todos los elementos de un arreglo son del mismo tipo (todos enteros, todos reales, etc., pero nunca una combinacin de distintos tipos). se puede determinar cul es el primer elemento, el segundo, el tercero,... y el n-simo elemento.

Un arreglo puede representarse grficamente como se muestra en la figura 4.1.


Arreglo

Segundo elemento Figura 4.1 Primer elemento Representacin de arreglos. l-simo elemento

Un arreglo tiene la caracterstica de que puede almacenar a N elementos del mismo tipo y adems permite el acceso a cada uno de estos elementos. As, se distinguen dos partes en los arreglos:

182 los componentes. los ndices.

Estructuras de datos: arreglos

Los componentes hacen referencia a los elementos que componen o forman el arreglo. Es decir, son los valores que se almacenan en cada una de sus casillas. Los ndices, por otra parte, son los que permiten accesar a los componentes del arreglo en forma individual. Para hacer referencia a un componente de un arreglo se necesita: el nombre del arreglo. el ndice del elemento. En la figura 4.2 representamos un arreglo y se indican sus componentes y sus ndices.
Arreglo componentes '
F

'

:*
5n val n ndice

51

52 val
~

55 val
3

val 1

Figura 4.2

ndices y componentes de un arreglo.

4.2.1

Definicin de arreglos

Como no es nuestra intencin seguir la sintaxis de algn lenguaje de programacin en particular, definimos un arreglo de la siguiente manera: ident_arreglo - ARREGLO [lminf.. lmsup] DE tipo Con los valores lminf y lmsup se declara el tipo de los ndices as como el nmero de elementos que tendr el arreglo. El nmero total de elementos (NTE) que tendr el arreglo puede calcularse con la frmula 4.1:

riTE = lmsup - lminf + 1 Frmula 4.1

F^^""^

4.2 Arreglos unidimensionales

183

Con tipo se declara el tipo de datos para todos los elementos del arreglo. El tipo de los elementos no tiene que ser necesariamente el mismo que el de los ndices. Observaciones: a) El tipo del ndice puede ser cualquier tipo ordinal (carcter, entero, etc.). b) El tipo de los componentes puede ser cualquier tipo (entero, real, cadena de caracteres, registro, arreglo, etc.). c) Se utilizan los corchetes "[]" para indicar el ndice de un arreglo. Entre los [] se debe escribir un valor ordinal (puede ser una variable, una constante o una expresin tan compleja como se quiera, pero que d como resultado un valor ordinal). Se vern a continuacin algunos ejemplos de arreglos:

Ejemplo 4.3
Sea ARRE un arreglo de 70 elementos enteros con ndices enteros. Su representacin queda como se muestra en la figura 4.3.
ARRE - ARREGLO [1. .70] DE enteros
ARRE

70 Figura 4.3

NTE = (70-1 + 1) = 70 Cada elemento del arreglo ARRE ser un nmero entero y podr accesarse por medio de un ndice que ser un valor comprendido entre 1 y 70.

As por ejemplo: ARREfl] hace referencia al elemento de la posicin 1. ARRE[2] hace referencia al elemento de la posicin 2. ARRE[70]hace referencia al elemento de la posicin 70.

184

Estructuras de datos: arreglos

Ejemplo 4.4
Consideremos el arreglo de enteros del ejemplo anterior. Suponiendo que el lmite inferior es igual a -13 y el lmite superior igual a 56, su representacin queda como se muestra en la figura 4.4.
= ARREQLO[-13...56]DE enteros

-15
Figura 4.4

-12

-11

56

NTE = (56-{-13) + l) = 70 Cada elemento del arreglo ser un nmero entero y podr accesarse por medio de un ndice que ser un valor comprendido entre -13 y 56. As por ejemplo: ARRE[-13] hace referencia al primer elemento del arreglo. ARRE[-12] hace referencia al segundo elemento del arreglo. ARRE[1] hace referencia al decimoquinto elemento del arreglo. ARRE[56] hace referencia al ltimo elemento del arreglo. 4.2.2 Operaciones con arreglos A continuacin se presentan las operaciones ms comunes en arreglos: Lectura/Escritura. Asignacin. Actualizacin: Insercin. Eliminacin. Modificacin. Ordenacin. Bsqueda. Como los arreglos son datos estructurados, muchas de estas operaciones no pueden llevarse a cabo de manera global, sino que se debe trabajar sobre cada elemento. A continuacin se analizar cada una de estas operaciones. Ordenacin y bsqueda, sern analizadas en los problemas que presentaremos posteriormente.

4.2 Arreglos unidimensionales Lectura

185

El proceso de lectura de un arreglo consiste en leer y asignar un valor a cada uno de sus elementos. Supngase que se desea leer todos los elementos del arreglo ARRE presentado en el ejemplo 4.3, en forma consecutiva. Podra hacerse de la siguiente manera: LeerARRE[l], LeerARRE[2], LeerARRE[70] De esta forma no resulta prctico, por lo tanto se usar un ciclo para leer todos los elementos del arreglo.
ARRE[1], ARRE[2], . . . ,ARRE[70]

hacer I 1 Repetir con ! desde 1 hasta 70 Leer ARRE[I] Hacer I !+ 1 {Fin del ciclo}

Al variar el valor de I, cada elemento ledo se asigna al correspondiente componente del arreglo segn la posicin indicada por I.

También podría gustarte