Sunteți pe pagina 1din 24

ARREGLOS MULTIDIMENSIONALES VARIABLES CON NDICE O LOCALIZADOR. ARRAYS. MATRICES. (CONTINUACIN). ARRAYS MULTIDIMENSIONALES.

Supongamos una academia en la que se imparten cuatro asignaturas de idiomas con tres niveles: bsico, medio y perfeccionamiento. Para el tratamiento informtico de datos podemos recurrir a un array de dos localizadores. Trasladaremos siempre la realidad a forma matemtica. En este caso, podramos decir:

La definicin como variables normales sera algo as: Clave: N = nivel grupo dado I = idioma Funcin de variable: indicar el nmero de alumnos en un

N1I1, N1I2, N1I3, N1I4, N2I1, N2I2, N2I3, N2I4, N3I1, N3I2, N3I3, N3I4.

La definicin como matriz sera algo as:

Normalmente no nos interesa representar la matriz indicando la posicin de las variables, sino su contenido. As podramos tener:

La matriz anterior nos informara de que en el nivel 2 (nivel medio), idioma 3 (alemn), hay 7 alumnos. El tratamiento de datos, al igual que indicramos para el caso de arrays de un localizador, resulta muy ventajoso usando matrices en vez de variables normales. As para calcular el nmero de alumnos totales podramos: a) Con variables normales efectuar un sumatorio del tipo: TOTAL = N1I1 + N1I2 + N1I3 + N1I4 + N2I1 + N2I2 + N2I3 + N2I4 + + N3I1 + N3I2 + N3I3 + N3I4

b) Con variables con ndice usar una instruccin del tipo: TOTAL = TOTAL + NI (i,j) para i enteros entre 1 y 3, y j enteros entre 1 y 4

Aunque las variables con uno o dos localizadores son las ms usadas, podremos recurrir a tantos localizadores como estimemos necesarios. La representacin matemtica o visual ya no es tan sencilla. Para interpretarlos o saber cundo usarlos, recurriremos a pensar que cada uno

de los localizadores representa una caracterstica, condicionante, o parmetro definidor del elemento. Volvamos al ejemplo del conteo de coches. El tipo de variable a usar depende de qu queramos hacer. As podramos plantear:

Duracin del conteo Tipo de variables a emplear Ejemplo

Un da

Array de un localizador (hora)

Nc(1), Nc(2),Nc(3),...

Varios das Varios meses Varios aos

Array de dos localizadores (hora y da)

Nc(1,1), Nc(2,1), Nc(3,1),... Nc(1,2), Nc(2,2), Nc(3,2),...

Array de tres localizadores (hora, da y mes)

Nc(1,1,1), Nc(2,1,1),....

Array de cuatro localizadores (hora, da, mes y ao)

Nc(1,1,1,2005), Nc(2,1,1,2005),...

La interpretacin de cada variable pasara por interpretar el significado de cada localizador. As: Nc(1) equivaldra a Nmero de coches en la hora 1 Nc(3,2) equivaldra a Nmero de coches en la hora 3 del da 2 Nc(2,1,4) equivaldra a Nmero de coches en la hora 2 del da 1 del mes 4 Nc(15,3,4,2005) equivaldra a Nmero de coches en la hora 15 del da 3 del mes 4 del ao 2005

Nos hemos referido hasta ahora a arrays de contenido numrico: nmero de coches, nmero de alumnos, etc. stos sern quizs los que ms usemos, pero igualmente podemos usar arrays con contenido alfanumrico. Por ejemplo en un array que definiera el curso de un alumno y el nmero que tiene asignado podramos disponer de informacin del tipo:

A(3,24) = Pedro Hernndez Gonzlez"

Esto vendra a ser equivalente a: El alumno nmero 24 del curso tercero se llama Pedro Hernndez Gonzlez. Repetiremos en relacin a los arrays lo que ya hemos dicho para las variables: podemos crear arrays de tipo numrico o de tipo alfanumrico, pero una vez creados evitaremos modificar el tipo de informacin que contienen. Es decir:

Por otro lado, evitaremos tener variables de distinta condicin (numrica alfanumrica) dentro de un array. Todos los elementos del array sern del mismo tipo:

Muchas veces necesitaremos mantener relacionada informacin numrica con alfanumrica, por ejemplo nombre del cliente con importe de una compra, o color de una superficie con metros cuadrados de extensin. En algunas ocasiones nos dar igual sustituir la variable alfanumrica por una clave numrica (p. ej. 1 = amarillo, 2 = verde, 3 = rojo) pero en otras preferiremos conservar la informacin alfanumrica tal cual. En este caso usaremos distintas variables a las que consideraremos asociadas.

Obviamente no todas las variables con el mismo localizador se considerarn asociadas. Es el programador quien decide cules considera asociadas y cules no.

Para acceder a la informacin general sobre este curso y al listado completo de entregas pulsa en este link: Ver curso completo. Para hacer un comentario o consulta utiliza los foros aprenderaprogramar.com, abiertos a cualquier persona independientemente de su nivel de conocimiento.

ARREGLOS MULTIDIMENSIONALES INTRODUCCIN Un arreglo multidimensional es simplemente una extensin de un arreglo unidimensional. Ms que almacenar una sola lista de elementos, piense en un arreglo multidimensional como el almacenamiento de mltiples listas de elementos. Por ejemplo, un arreglo bidimensional almacena listas en un formato de tabla de dos dimensiones de filas y columnas, en donde cada fila es una lista. Las filas proporcionan la dimensin vertical del arreglo, y las columnas dan la dimensin horizontal. Un arreglo de tres dimensiones almacena listas en un formato de tres dimensiones de filas, columnas y planos, en donde cada plano es un arreglo bidimensional. Las filas proporcionan la dimensin vertical; las columnas, la dimensin horizontal; y los planos, la dimensin de profundidad del arreglo. Declarar y manipular arreglos con mltiplesndices. En esta leccin, aprender acerca de los arreglos de dos y tres dimensiones (raramente se necesitan en programacin arreglos de mayor dimensin) La leccin concluir con un extenso ejercicio de solucin de problemas empleando arreglos de dos dimensiones para resolver una serie de ecuaciones simultneas usando la regla de Cramer. ------------------------------------------------------------------------------------------------------- ---------------------Arreglos multidimensionales: Dado que casi nadie ha hecho preguntas ni ha comentado nada, asumo que la llevan bien con la leccin anterior y pues, publico esta como anexo ya que es un poco ms de lo mismo. Espero que comenten en esta leccin como llevan el curso hasta ahora, qu les ha parecido las explicaciones dadas, si creen que se entiende bien a pesar de la complejidad creciente, etc. De verdad eso es un estmulo para continuar con este trabajo. Los arreglos que hemos visto hasta ahora son unidimensionales (lineales), o sea, de una nica dimensin. Se dice esto ya que se requiere una nica coordenada (ndice) para ubicar una celda del mismo. Sin embargo es posible definir arreglos de dos dimensiones (2D), de tres dimensiones (3D) y ms. Aqu veremos ejemplos de arreglos de hasta tres dimensiones ya que no requerimos de ms para trabajar, sin embargo muchos programas usan arreglos de N dimensiones. Como nosotros existimos en un espacio de dimensin 3 solo podemos ver grficamente arreglos de dimensin 3 o menor, pero visualizar un arreglo de dimensin 4 o ms se hace difcil y no compete a este curso.

Arreglos bidimensionales: Comencemos por ver arreglos de dos dimensiones. Estos dibujarn una tabla de datos del mismo tipo, tambin conocidas matemticamente como matrices. Hay dos maneras de declarar arreglos bidimensionales, una es declarar un arreglo de un arreglo, o sea, un arreglo cuyas celdas sean tambin arreglos. Esta es la forma ms fea de hacerlo y la que menos recomiendo, pero existe. Vemoslo en un ejemplo: Cdigo: 1 PROGRAM BIDIMENSIONAL; 2 3 Type 4 arr1= array[1..5] of integer; 5 Tabla= array[1..7] of arr1; 6 7 Var 8 i, j: integer; 9 matriz: Tabla; 10 11 BEGIN 12 For i:= 1 to 7 do

13 For j:= 1 to 5 do 14 matriz[i,j]:= 0; 15 END.

En la lnea 4 vemos un tipo arr1 que es un arreglo de 5 celdas de enteros. En la lnea 5 vemos el tipo Tabla que es un arreglo de 7 celdas del tipo arr1, o sea que cada celda es un arreglo de 5 celdas. Si dibujramos Tabla al igual que lo hicimos antes tendramos 7 celdas del 1 al 7, esto estara indicando cuantas filas tiene nuestra tabla. Si desplegamos cada celda de Tabla estaramos abriendo hacia la derecha 5 lugares con lo cual estaramos indicando las columnas de nuestra tabla.

Ese sera el dibujo de Tabla, como ven hay 7 filas (lneas horizontales) y 5 columnas (lneas verticales). El 0 corresponde a la posicin (3,3) de la tabla ya que est en la fila 3 y en la columna 3. Siempre para una tabla se especificarn las coordenadas de una celda nombrando primero el nmero de filas y luego el de columnas. En la lnea 9 del ejemplo declaramos la variable matriz del tipo Tabla. El trabajo con los arreglos bidimensionales es idntico al de los arreglos unidimensionales. Cada celda es una variable independiente y para acceder a cada una simplemente nombramos nuestro arreglo y damos entre parntesis rectos las coordenadas de nuestra celda separadas por comas. La forma genrica sera as: Variable_arreglo[fila,columna] de este modo, si quisiramos ir a la celda que est en la fila 7 y en la columna 4 deberamos escribir matriz[7,4]. En nuestro programa de ejemplo asignamos a cada celda el valor 0. Como ven debemos usar dos FOR anidados para recorrer una tabla, uno para recorrer las filas y otro para las columnas. Vean que el subrango en arr1 indica cuntas columnas tendr la matriz y en subrango en Tabla indica cuntas filas. Una sintaxis alterna para acceder a una celda de nuestra tabla es la siguiente: Variable_arreglo[fila][columna] y por tanto si, usando esta sintaxis, quisiramos acceder a la fila 7 y la columna 4 deberamos escribir matriz[7][4]. No recomiendo esta sintaxis. Veamos ahora la segunda forma de declarar un arreglo bidimensional, la cual es la que yo recomiendo que usen:

Cdigo: 1 PROGRAM BIDIMENSIONAL; 2 3 Type 4 Tabla= array[1..7,1..5] of integer; 5 6 Var 7 i, j: integer; 8 matriz: Tabla; 9 10 BEGIN 11 For i:= 1 to 7 do 12 For j:= 1 to 5 do 13 matriz[i,j]:= 0; 14 END.

Como ven en la lnea 4 hemos declarado el tipo Tabla en el cual hemos incluido dos subrangos entre los parntesis rectos separados por coma. El primer subrango (1..7) indica la cantidad de filas y el segundo (1..5) la cantidad de columnas que tendr la matriz. Esto siempre es as. Como ven, de este modo queda todo mucho ms claro. NOTA: La cantidad de celdas de un arreglo bidimensional es igual al resultado de multiplicar la cantidad de filas por la cantidad de columnas. Como ejercicio quiero que modifiquen ese programa para que despliegue en la salida estndar la matriz. En este caso aparecer una tabla de 0 como esta: 00000 00000 00000 00000 00000 00000 00000 Esto no es muy difcil y radica explcitamente en el uso de FOR. ------------------------------------------------------------------------------------Ejercicios: Ejercicio2: Modifiquen los programas anteriores para que, si el usuario no ingresa un entero, notifiquen el error y vuelvan a pedir el valor correcto. ----------------------------------------------------------------Ejercicio3: Se llama matriz cuadrada a toda aquella matriz que tiene tantas filas como columnas, o sea, si tiene 5 filas tiene 5 columnas. La transpuesta de una matriz cuadrada es aquella matriz que tiene como columnas lo que antes eran filas. O sea, si tenemos una matriz cuadrada A, una matriz cuadrada B es transpuesta de A si las columnas de B son iguales a las filas de A, o sea, si se satisface que B[i,j]=A[j,i] para todos los valores posibles de i y j.

Ejemplo. Sea A de 5 filas y 5 columnas como se muestra en la figura, veamos como sera su transpuesta B: A 12345 00000 11111 54321 22222

B 10152 20142 30132 40122 50112

Como ven, lo que en A eran filas, en B son columnas. La primera fila de A que contiene los valores 1, 2, 3, 4 y 5 es la primera columna de B 1, 2, 3, 4 y 5, y as sucesivamente. Escriban un programa que calcule la transpuesta de un arreglo de nmeros reales con cinco renglones y cinco columnas. Los valores de la matriz se leen desde la entrada estndar. El resultado se debe imprimir en la salida estndar. Recuerden la relacin B[i,j]=A[j,i] para que sean transpuestas. Este ejercicio no es muy complicado. Tal vez lo peor de esto es que trabaja con una propiedad matemtica de las matrices y para aquellos que no lo han estudiado puede resultar difcil de comprender. An as creo que no deberan tener problemas, sin embargo se trata de comprender el lgebra Lineal y eso no es lo que quiero en este curso. ------------------------------------------------------------------------------------Arreglos tridimensionales: Esto es bsicamente lo mismo. Se declaran exactamente igual solo que ahora habr tres subrangos entre parntesis rectos y por ende deberemos colocar tres coordenadas para indicar cual celda deseamos ver (una coordenada para la fila (altura), otra para la columna (largo) y otra para el eje (ancho)). Hago esta aclaracin porque si bien un arreglo bidimensional dibuja una tabla, uno tridimensional dibuja un prisma y por tanto debemos decir cuan a lo alto, largo y ancho queremos posicionarnos.

Esto es un arreglo bidimensional de 5 filas y 8 columnas. Visto de este modo es un rectngulo donde la cantidad de filas son su altura y la cantidad de columnas su largo. Este es un arreglo de 5x8.

As podramos visualizar un arreglo tridimensional de 5x8x6. Como ven es un arreglo de tablas que estaran todas bien pegadas formando un prisma. Nosotros debemos indicar en qu fila y

columna est nuestra celda y en cual tabla de todas. Siempre indicamos [fila, columna, tabla]. Esto es un intento de que puedan visualizar un arreglo tridimensional. El punto rojo correspondera a la posicin [4,8,3] por estar en la cuarta fila, octava columna de la tercera tabla. El azul correspondera a la posicin [1,3,6]. Hasta aqu llegamos con arreglos, en la siguiente leccin les propondr un proyecto llamado Master Mind enfocado para el uso de arreglos, pero necesito que me comenten que tal la llevan hasta ahora, qu les parece todo y si creen que vale la pena continuar de esta manera. ------------------------------------------------------------------------------------Librera CRT: Limpiar la pantalla: Muchas veces puede resultar muy conveniente el hecho de borrar el contenido de la pantalla para mostrar uno nuevo y no que lo anterior se desplace hacia arriba. Ustedes mismos habrn visto que al ejecutar mediante el IDE varias veces un programa, todo lo que se muestra en la pantalla va quedando all, lo cual hace que se vea feo o confuso en varios casos. Para lograr limpiar la pantalla utilizaremos una librera de pascal. Esto no se corresponde con el cometido de este curso por lo que solo explicar cmo limpiar la pantalla. El uso de libreras lo veremos ms adelante cuando abordemos la programacin en Modula 2; si no manejan bien todos los conceptos que hay aqu pues simplemente no tiene sentido seguir con cosas ms complejas. Qu es una librera? Bsicamente es una unidad de programa que consta de funciones y procedimientos (lo veremos ms adelante) que alguien program y puso a nuestra disposicin para que podamos utilizarlos. Dicho de manera sencilla para que se entienda ahora, una librera consta de un cdigo fuente ya compilado pero que no crea un archivo .exe, sino que queda en otro formato. La librera tiene un nombre y adems, dentro de su cdigo tiene "partes" que nosotros podemos llamar y utilizar para nuestros propsitos. Para usar una librera simplemente debemos saber su nombre y claro, qu partes de ella queremos usar. Existen libreras por defecto que ya vienen con el compilador, pero hay otras que pueden obtenerse por la web. Existe una librera incluida en Free Pascal llamada CRT. Esta librera nos provee de funciones para el control de la pantalla y el teclado. De todas ellas solo nos interesa una, ClrScr, lo cual es una abreviacin de Clear Screen, que significa Limpiar Pantalla. Para indicar las libreras que vamos a usar debemos escribir la palabra reservada USES luego de la declaracin del identificador de nuestro programa. Luego de USES escribimos los nombres de nuestras libreras y ya, podemos comenzar llamar a sus funciones y procedimientos sin problema. Veamos un simple ejemplo de la limpieza de la pantalla: Matriz unidimensional

Matriz bidimensional

Matriz tridimensional

Vector multidimensional En programacin, un vector multidimensional es un vector que se indexa mediante una lista ordenada de enteros. El nmero de enteros que se utiliza en esta lista para indexar el vector multidimensional es siempre el mismo y se conoce como la dimensionalidad del vector. Por otra parte, los lmites de cada uno de los enteros que forman parte del indice, determinan la dimensin del vector. A un vector con dimensionalidad k se le suele llamar k-dimensional. Los vectores 1-dimensional se corresponden con los vectores ordinarios en los que los elementos estn dispuestos en una nica fila (o columna); los vectores 2-dimensional son otra

forma de llamar a las clsicas matrices en las que sus elementos estn dispuestos en varias filas y columnas (dos dimensiones). En la prctica, la dimensionalidad de un vector raras veces excede de tres. [editar]Representacin en memoria La forma de disponer los elementos de un vector 1-dimensional en la memoria de un ordenador es trivial, ya que sta, en s misma, tiene la forma de un vector 1-dimensional (muy grande). Cuando se quiere almacenar vectores n-dimensionales, sin embargo, el problema ya no es evidente. Supongamos que queremos representar esta simple matriz de dos dimensiones:

La forma ms comn de indexar esta matriz (o vector 2-dimensional) es utilizando la convencin RC (del ingls Row-Column, fila-columna), en la que los elementos se referencian indicando primero la fila y luego la columna (ejemplo, forma se tiene que: ), de esta

La indexacin de vectores multidimensionales se puede hacer de alguna de estas maneras: Orden fila-principal: Los elementos de cada fila son almacenados en orden, primero una fila, luego otra, y as sucesivamente. Este mtodo se utiliza sobre todo en los arrays estticos declarados en C. 1 2 3 4 5 6 7 8 9

Orden columna-principal: Anlogo al anterior pero esta vez almacenando los elementos por columnas en vez de por filas:

1 4 7 2 5 8 3 6 9

Vector 2-dimensional almacenado en un vector 1-dimensional de vectores 1dimensionales. Vector de X dimensiones: Tpicamente, los vectores multidimensionales se representan utilizando un vector 1-dimensional que contiene referencias (o punteros) a otros vectores 1-dimensionales. Estos subvectores pueden ser, indistintamente, las filas o las columnas de la matriz, todo depende del criterio o la interpretacin que se quiera tomar. Las dos primeras formas son ms compactas y tienen potencialmente mejor localizacin de referencia, pero tambin son ms limitadas; los vectores deben ser rectangulares, en el sentido de que ninguna fila puede contener ms elementos otra. Los vectores de vectores, por otro lado, permiten la creacin de vectores desiguales, tambin llamados vectores dentados, en la que el rango vlido de un ndice depende del valor de otro, o dicho con otras palabras, que las diferentes filas (o columnas) pueden ser de diferentes tamaos. Los vectores de vectores tambin son de utilidad en los lenguajes de programacin que slo permiten vectores 1dimensionales como primitivas. En muchas aplicaciones, como aplicaciones numricas que trabajan con matrices, hay que iterar sobre vectores rectangulares 2-dimensionales de forma predecible. Por ejemplo, calcular un elemento de la matriz producto A x Bimplica iterar sobre una fila de A y una columna de B simultneamente. Al indexar los elementos de la matriz segn se encuentre esta almacenada en memoria, se deben optimizar las operaciones de localizacin de cada elemento tanto como se pueda. A veces, un compilador puede determinar automticamente el diseo de la serie secuencial de elementos de un vector para que se almacenen tambin secuencialmente en memoria, en nuestro ejemplo, podra elegir el orden de fila-principal para A, y el orden columnaprincipal para B. Existen ms formas de almacenar los elementos de una matriz en memoria, que sern ms eficientes para otro tipo de problemas, por ejemplo si se quiere iterar sobre la diagonal principal de una matriz.

ARREGLOS MULTIDIMENSIONALES En ocasiones es til tener arreglos de ms de un ndice. Esto se puede hacer en C++ y en la mayora de los lenguajes de programacin. La siguiente sentencia declara un arreglo multidimensional de variables de punto flotante que llevan el nombre genrico de Temperatura: double Temperatura[3][20];

Los ndices de este arreglo son: Temperatura[0][0] Temperatura[1][0] Temperatura[2][0] Temperatura[0][1] Temperatura[1][1] Temperatura[2][1] MMM Temperatura[0][19] Temperatura[1][19] Temperatura[2][19] Observe que con la declaracin anterior se declaran simultneamente 60 variables indexadas. Note tambin que los valores que indican el tamao del arreglo multidimensional deben encerrarse entre corchetes (para cada conjunto de valores). De hecho, los arreglos multidimensionales pueden contener cualquier nmero de ndices, pero rara vez son necesarios ms de dos para la mayora de las aplicaciones en ingeniera qumica. La sintaxis formal para declarar un arreglo multidimensional es: nombre_tipo nombre_arreglo [tamanio_1] [tamanio_2] ... [ultimo_tamanio]; Programacin Instituto Tecnolgico de Celaya Ingeniera Qumica INICIALIZACIN DE ARREGLOS MULTIDIMENSIONALES La inicializacin de arreglos multidimensionales es muy similar a la que se describi para arreglos de un solo ndice. Otra vez es necesaria La inicializacin de arreglos multidimensionales es muy similar a la que se describi para arreglos de un solo ndice. Otra vez es necesario enlistar los valores de cada uno de los elementos del arreglo entre llaves y separados por comas. La diferencia sin embargo, es que es necesario tener ms de un grupo de valores encerrados entre llaves. Por ejemplo: int x[2][3]={{1,2,3},{4,5,6}}; Observe que tenemos un conjunto de llaves que encierra a otros grupos de nmeros tambin encerrados entre llaves y separados por comas. Cuntos grupos de nmeros se tienen encerrados por las llaves de los extremos?

2, porque la dimensin del primer ndice es 2. Cuntos nmeros se tienen en cada uno de los grupos? 3, por el tamao correspondiente al segundo ndice es 3. El ejemplo equivaldra a tener el siguiente arreglo de nmeros. El primer ndice representara al rengln y el segundo ndice a la columna: 123 x[0][0] x[0][1] x[0][2] 456 x[1][0] x[1][1] x[1][2]
Un arreglo es un conjunto de datos o una estructura de datos homogneos que se encuentran ubicados en forma consecutiva en la memoria RAM (sirve para almacenar datos en forma temporal).

Contenido
[ocultar]

1 Definicin 2 Tipos de arreglos


o o o

2.1 Arreglos unidimensionales 2.2 Arreglos multidimensionales 2.3 Arreglos con mltiple subndices

3 Operaciones con arreglos 4 Ordenaciones en Arreglos


o o o

4.1 Seleccin directa 4.2 Ordenacin por burbuja 4.3 Ordenacin por mezcla

5 Algoritmos de bsqueda que existen 6 Fuente

Definicin
Un arreglo puede definirse como un grupo o una coleccin finita, homognea y ordenada de elementos. Los arreglos pueden ser de los siguientes tipos:

De una dimensin. De dos dimensiones. De tres o ms dimensiones.

Tipos de arreglos

Arreglos unidimensionales. Arreglos multidimensionales. Arreglo con mltiple subndices.

Arreglos unidimensionales
Es un tipo de datos estructurado que est formado de una coleccin finita y ordenada de datos del mismo tipo. Es la estructura natural para modelar listas de elementos iguales. Estn formados por un conjunto de elementos de un mismo tipo de datos que se almacenan bajo un mismo nombre, y se diferencian por la posicin que tiene cada elemento dentro del arreglo de datos. Al declarar un arreglo, se debe inicializar sus elementos antes de utilizarlos. Para declarar un arreglo tiene que indicar su tipo, un nombre nico y la cantidad de elementos que va a contener.

Arreglos multidimensionales
Es un tipo de dato estructurado, que est compuesto por dimensiones. Para hacer referencia a cada componente del arreglo es necesario utilizar n ndices, uno para cada dimensin. El trmino dimensin representa el nmero de ndices utilizados para referirse a un elemento particular en el arreglo. Los arreglos de ms de una dimensin se llaman arreglos multidimensionales.

Arreglos con mltiple subndices


Es la representacin de tablas de valores, consistiendo de informacin arreglada en renglones y columnas. Para identificar un elemento particular de la tabla, deberemos de especificar dos subndices; el primero identifica el rengln del elemento y el segundo identifica la columna del elemento. A los arreglos que requieren dos subndices para identificar un elemento en particular se conocen como arreglo de doble subndice. Note que los arreglos de mltiples subndices pueden tener ms de dos subndices. El estndar ANSI indica que un sistema ANSI C debe soportar por lo menos 12 subndices de arreglo.

Operaciones con arreglos


Las operaciones en arreglos pueden clasificarse de la siguiente forma:

Lectura: este proceso consiste en leer un dato de un arreglo y asignar un valor a cada uno de sus componentes Escritura: Consiste en asignarle un valor a cada elemento del arreglo. Asignacin: No es posible asignar directamente un valor a todo el arreglo Actualizacin: Dentro de esta operacin se encuentran las operaciones de eliminar, insertar y modificar datos. Para realizar este tipo de operaciones se debe tomar en cuenta si el arreglo est o no ordenado. Ordenacin. Bsqueda. Insertar. Borrar. Modificar.

Ordenaciones en Arreglos
La importancia de mantener nuestros arreglos ordenados radica en que es mucho ms rpido tener acceso a un dato en un arreglo ordenado que en uno desordenado. Existen muchos algoritmos para la ordenacin de elementos en arreglos, algunos de ellos son:

Seleccin directa
Este mtodo consiste en seleccionar el elemento ms pequeo de nuestra lista para colocarlo al inicio y as excluirlo de la lista. Para ahorrar espacio, siempre que vayamos a colocar un elemento en su posicin correcta lo intercambiaremos por aquel que la est ocupando en ese momento.

Ordenacin por burbuja


Es el mtodo de ordenacin ms utilizado por su fcil comprensin y programacin, pero es importante sealar que es el ms ineficiente de todos los mtodos. Este mtodo consiste en llevar los elementos menores a la izquierda del arreglo los mayores a la derecha del mismo. La idea bsica del algoritmo es comparar pares de elementos adyacentes e intercambiarlos entre s hasta que todos se encuentren ordenados.

Ordenacin por mezcla


Este algoritmo consiste en partir el arreglo por la mitad, ordenar la mitad izquierda, ordenar la mitad derecha y mezclar las dos mitades ordenadas en un array ordenado. Este ltimo paso consiste en ir comparando pares sucesivos de elementos (uno de cada mitad) y poniendo el valor ms pequeo en el siguiente hueco.

Algoritmos de bsqueda que existen

Bsquedas en Arreglos: Una bsqueda es el proceso mediante el cual podemos localizar un elemento con un valor especifico dentro de un conjunto de datos. Terminamos con xito la bsqueda cuando el elemento es encontrado.

Bsqueda secuencial: A este mtodo tambin se le conoce como bsqueda lineal y consiste en empezar al inicio del conjunto de elementos , e ir a travs de ellos hasta encontrar el elemento indicado hasta llegar al final de arreglo. Este es el mtodo de bsqueda ms lento, pero si nuestro arreglo se encuentra completamente desordenado es el nico que nos podr ayudar a encontrar el dato que buscamos.

Bsqueda binaria: Las condiciones que debe cumplir el arreglo para poder usar bsqueda binaria son que el arreglo este ordenado y que se conozca el numero de elementos. Este mtodo consiste en lo siguiente: comparar el elemento buscado con el elemento situado en la mitad del arreglo, si tenemos suerte y los dos valores coinciden, en ese momento la bsqueda termina. Pero como existe un alto porcentaje de que esto no ocurra, repetiremos los pasos anteriores en la mitad inferior del arreglo si el elemento que buscamos resulto menor que el de la mitad del arreglo, o en la mitad superior si el elemento buscado fue mayor. La bsqueda termina cuando encontramos el elemento o cuando el tamao del arreglo a examinar sea cero.

Bsqueda por hash: La idea principal de este mtodo consiste en aplicar una funcin que traduce el valor del elemento buscado en un rango de direcciones relativas. Una desventaja importante de este mtodo es que puede ocasionar colisiones.

---------------------------------------------------------------------------------------------------------------------APUNTES DE CTEDRA: ARREGLOS MULTIDIMENSIONALES Extenderemos el uso de arreglos para facilitar la organizacin conveniente de datos relacionados entre s en tablas y en listas de ms de una dimensin. Por ejemplo, veremos cmo se puede utilizar un arreglo bidimensional de tres renglones y tres columnas para representar un juego de TA-TE-TI. Este arreglo tiene nueve elementos, cada uno de los cuales puede llamarse especificando el subndice del rengln (1,2 3) y el subndice de la columna (1,2 3). TIPO DE ARREGLO (Multidimensional) ARRAY [subndice 1 OF ARRAY [subndice 2 OF... ARRAY[subndice n OF tipo-elemento

o ARRAY [subndice1, subndice2, , subndicen OF tipo-elemento Subndice i representa el tipo de subndice de dimensin i de un arreglo multidimesional. Se puede especificar cualquier tipo escalar finito o subintervalo. El tipo-elemento puede ser cualquier tipo de datos estndar o previamente definido. EJEMPLO: Las declaraciones var TATETI: array [1..3,1..3 of char; TABLA: array [1..7, 1..5, 1..6 of real; definen el arreglo TATETI como un arreglo dimensional de 9 elementos. Ambos subndices pueden tomar los valores 1.2 3. El arreglo TABLA consiste en tres dimensiones: el primer subndice puede tomar los valores de 1 a 7; el segundo, de 1 a 5; y el tercero, de 1 a 6. Hay un total de 7x5x6, o sea 210 elementos en el arreglo TABLA. MANEJO DE ELEMENTOS INDIVIDUALES DEL ARREGLO nombre-arreglo [s1, s2,..., sn Cada una de las si es una expresin con subndice que corresponde al tipo de subndice de dimensin i. El valor de cada expresin determina qu elemento de nombre-arreglo se est manejando. EJEMPLOS: 1) TATETI [2, 3 selecciona el elemento del rengln 2, columna 3 del arreglo TATETI (estamos pensando en MATRICES). 2) Una universidad ofrece 50 cursos en cada uno de sus 5 planteles. Podemos almacenar las inscripciones a estos cursos en el arreglo INSCRIPCIN: TYPE PLANTEL= (Norte, Sur, Centro, Oriente, Poniente); VAR INSCRIPCION: array [1..50, PLANTEL of integer;

------------------------------------------------------------------------------------------------

Arreglos Unidimensionales y Multidimensionales


Un arreglo unidimensional es un tipo de datos estructurado que est formado de una coleccin finita y ordenada de datos del mismo tipo. Es la estructura natural para modelar listas de elementos iguales.

El tipo de acceso a los arreglos unidimensionales es el acceso directo, es decir, podemos acceder a cualquier elemento del arreglo sin tener que consultar a elementos anteriores o posteriores, esto mediante el uso de un ndice para cada elemento del arreglo que nos da su posicin relativa.

Para implementar arreglos unidimensionales se debe reservar espacio en memoria, y se debe proporcionar la direccin base del arreglo, la cota superior y la inferior.

REPRESENTACION EN MEMORIA
Los arreglos se representan en memoria de la forma siguiente:

Los arreglos multidimensionales tienen ms de una dimensin. En C#, las dimensiones se manejan por medio de un par de corchetes, dentro de los que se escriben los valores de cada dimensin, separados por comas.

OPERACIONES.

Para manejar un arreglo, las operaciones a efectuarse son:

Declaracin del arreglo, Creacin del arreglo, Inicializacin de de los elementos del arreglo, y Acceso a los elementos del arreglo.

A continuacin describiremos cada una de estas operaciones, en C#.

DECLARACIN.

La sintaxis para declarar un arreglo multidimensional es la siguiente: <tipo> [ , ...] < identificador > ; Donde: tipo indica el tipo correspondiente a los elementos del arreglo , identificador es el nombre del arreglo, y el par de corchetes, la coma y las diresis, [ , ...], representan las dimensiones del arreglo. Los corchetes encierran todas las comas necesarias para separar las dimensiones del arreglo. Ejemplos: double [ , ] bidim; // Dos dimensiones. int [ , , ] tridim ; // Tres dimensiones. char [ , , , ] enciclopedia; // Cuatro dimensiones. Observe que, en la declaracin, el espacio entre los corchetes est vaco. Esto se debe a que, durante dicha operacin, no se reserva espacio en la memoria.

CREACIN.

La creacin de un arreglo multidimensional consiste en reservar espacio en la memoria para todos sus elementos, utilizando la siguiente sintaxis: < identificador > = new <tipo> [ dim1, dim2 ... dimN ] ; Donde: new es el operador para gestionar espacio de memoria, en tiempo de ejecucin, dim1 , dim2 , dimN son valores enteros que representan las dimensiones del arreglo. El tamao del arreglo es el resultado de multiplicar los valores de las dimensiones y representa el nmero de elementos del arreglo. Ejemplos: bidim = new double [2, 3] ; tridim = new int[ 2, 3, 4] ; enciclopedia = new char[30, 80, 500, 10] ;

Las operaciones de declaracin y creacin anteriores se pueden agrupar en una sola instruccin, como se muestra enseguida: double [ , ] bidim = new double [2,3] ; int [ , , ] tridim = new int[2, 3, 4] ; char [ , , , ] enciclopedia = new char[ 30, 80, 500, 10 ] ;

INICIALIZACIN.

Un arreglo es un objeto que,cuando es creado por el compilador, se le asignan automticamente valores iniciales predeterminados a cada uno de sus elementos, de acuerdo a los siguientes criterios:

Si el tipo del arreglo es numrico, a sus elementos se les asigna el valor cero. Si el tipo del arreglo es char, a sus elementos se les asigna el valor '\u0000'. Si el tipo del arreglo es bool, a sus elementos se les asigna el valor false. Si el tipo del arreglo es una clase, a sus elementos se les asigna el valor null.

Cuando se requiere asignar valores iniciales diferentes de los predeterminados, es posible agrupar las operaciones de declaracin, creacin e inicializacin en una sola instruccin, por ejemplo: int [ , , ] tridim={{{12, 59, 70, 45} , {20, 16, 29, 48} , {93, 75, 43, 10}},

{{44, 72, 30, 24} , {60, 89, 39, 61} , {99, 52, 34, 47}}};

ACCESO.

Se puede acceder a los valores de los elementos de un arreglo bidimensional a travs del nombre del arreglo y dos subndices. Los subndices deben escribirse entre corchetes y representa la posicin del elemento en el arreglo. As, podemos referirnos a un elemento del arreglo escribiendo el nombre del arreglo y los subndices del elemento entre corchetes. Los valores de los subndices empiezan en cero para el primer elemento, hasta el tamao del arreglo menos uno.

APLICACIONES.

Se necesita manejar, en un arreglo, la posicin todos los caracteres escritos en una enciclopedia. El arreglo deber tener las siguientes dimensiones:

Una para manejar el rengln en la pgina, otra para la columna en la pgina, otra para la hoja en el volumen y otra para el volumen en la enciclopedia.

Cada pgina tiene 30 renglones y 80 columnas. Cada volumen tiene 500 pginas. La enciclopedia tiene 18 volmenes.

El siguiente fragmento de programa implementa la solucin a este problema.

char car;

// Declara y crea el arreglo.

char[ , , , ] enciclopedia = new char [18,500,30,80] ;

// Lee, desde el teclado, cada carcter para la enciclopedia.

for(int v = 0 ; v < class="Estilo32">// Volumen for(int p = 0 ; p < class="Estilo32">// Pgina for(int r = 0 ; r < class="Estilo32">// Rengln

for(int c = 0 ; c < class="Estilo32">// Columna { car enciclope = (char)Console.Read( ) ;

ARRAYS MULTIDIMENSIONALES: Un array multidimensional es un array de 3 ms dimensiones. Si tenemos un array de N dimensiones, cada dimensin de tamao d1,d2,..,dN, el nmero de elementos del array ser: d1*d2*..*dN, y para acceder a un elemento concreto del array utilizaremos N ndices, cada uno de los cuales referenciar a una posicin dentro de una dimensin, siempre segn el orden de declaracin. En memoria, el array se sigue almacenando en posiciones consecutivas.La declaracin de un array multidimensional sera Nom_array: array [LI1..LS1,LI2..LS2,LI3..LS3,LIN..LSN] de tipoNom_array [I1,I2,I3,IN]LI1 < = I1 < = LS2LIN < = I2 < = LSN
dia[v,p,r,c] = car ; }