Arreglos C#

Embed Size (px)

Citation preview

PONTIFICIA UNIVERSIDAD CATLICA DE CHILE ESCUELA DE INGENIERA DEPARTAMENTO DE CIENCIA DE LA COMPUTACIN IIC 1102 INTRODUCCIN A LA PROGRAMACIN Profesor: Rodrigo Sandoval U.

Captulo VII Arreglos y Enumeraciones en C#1 ARREGLOS ......................................................................................................................................................... 1 1.1 DECLARACIN DE ARREGLOS UNIDIMENSIONALES ........................................................................................ 2 1.2 USO DE ARREGLOS UNIDIMENSIONALES ......................................................................................................... 3 1.2.1 Funciones ms comunes con arreglos.................................................................................................... 4 1.2.2 Foreach para el manejo de arreglos...................................................................................................... 5 1.2.3 Ejemplos de declaracin y uso de arreglos............................................................................................ 6 1.2.4 Ejemplo: Clculo de mnimo, mximo y promedio de una lista de notas de estudiantes....................... 7 1.2.5 Ejemplo: Programa de simulacin de conjuntos con arreglos .............................................................. 9 2 ARREGLOS MULTIDIMENSIONALES ....................................................................................................... 13 2.1 DECLARACIN DE MATRICES........................................................................................................................ 13 2.2 USO DE MATRICES ........................................................................................................................................ 14 2.2.1 Obteniendo Dimensiones de una Matriz .............................................................................................. 14 2.2.2 Ejemplos de uso de Matrices................................................................................................................ 14 2.2.3 Foreach en matrices............................................................................................................................. 14 2.2.4 Ejemplo: Clculo de las notas finales de un curso (mnimo, mximo, promedio) ............................... 15 2.2.5 Ejemplo: Multiplicacin de Matrices Cuadradas ................................................................................ 18 3 ENUMERACIONES .......................................................................................................................................... 23

Material preparado por Rodrigo Sandoval U en Marzo 2004, basado en los apuntes de clase del curso IIC1102, ao 2003, de M. Nussbaum, Marcos Seplveda, et.al

Intro. Prog. Orientada a Objeto Arreglos y Enumeraciones

Rodrigo Sandoval U.

1 ArreglosLos arreglos son estructuras de datos complejas (en el sentido de que no son atmicas) que agrupan datos de un mismo tipo en particular, llamado el tipo base del arreglo. El tipo base de un arreglo puede ser cualquiera de los tipos bsicos de C#, o incluso algunos tipos complejos como las clases. Un arreglo es tambin ejemplo de un modelo. Un arreglo puede considerarse como ejemplo de una variable compuesta capaz de almacenar uno o ms datos al mismo tiempo.

La sintaxis del lenguaje permite referirse a cada uno de los elementos que constituyen el arreglo empleando ndices. Esto es posible pues los elementos del arreglo estn numerados en forma jerrquica y consecutiva, empezando en 0 en cada dimensin. El siguiente grfico ilustra un ejemplo de un arreglo llamado numeros, cuya posicin 0 almacena el valor 10, la posicin 1 el valor de 21, etc. Este arreglo en total almacena n+1 elementos. El valor de n, depende de la memoria que pueda tener el computador y el tipo de elementos que se almacenen en el arreglo.

IIC 1102

Pgina: 1

Intro. Prog. Orientada a Objeto Arreglos y Enumeraciones

Rodrigo Sandoval U.

Los arreglos, al igual que el resto de las variables se identifican con un nombre. Al emplear ese nombre, se hace referencia a la estructura de datos como un todo, es decir, con todos sus elementos. El lenguaje interpreta dicho nombre como un puntero. Cuando se utiliza el nombre del arreglo en forma indexada, es decir, combinado con ndices, se hace referencia a un elemento particular, del tipo base, dentro de la estructura compleja. Importante: El lenguaje C# no controla la validez de los ndices que se emplean para referenciar un arreglo. Esto quiere decir que es posible cometer errores graves y difciles de detectar en este sentido. Ms adelante se presenta un ejemplo en este sentido.

1.1

Declaracin de Arreglos Unidimensionales

Los arreglos, al igual que las dems variables deben declararse antes de poder utilizarlas, y cumplen con las mismas reglas de alcance y vida. Los arreglos de una sola dimensin reciben tambin el nombre de vectores. La sintaxis de la declaracin de un arreglo unidimensional es la siguiente: [] ; Observaciones: El puede ser cualquiera de los tipos bsicos del lenguaje, o incluso algunos complejos como estructuras. El es el nombre que distinguir el arreglo. Los corchetes [] son obligatorios y denotan que el identificador descrito, del tipo-base indicado, es un arreglo (lista de elementos del tipo base). En esta declaracin NO se define el tamao que tendr el arreglo (aunque se puede determinar las dimensiones, lo que se ver ms adelante).

El tamao del arreglo se determina en una segunda declaracin, que puede ir en la siguiente lnea, como se muestra a continuacin.

= new []En esta declaracin, se dimensiona el arreglo con una cantidad determinada de elementos, todos correspondientes a tipo-base.

Es posible hacer la declaracin del arreglo y su dimensionamiento en una misma sentencia: [] = new []

Adicionalmente es factible declarar, dimensionar, e inicializar un arreglo con todos sus elementos, en una sola declaracin: [] = {valor1, valor2, ..., valorN}; Esta ltima declaracin implcitamente dimensiona el arreglo para almacenar los N elementos descritos, por lo que no se requiere dimensionarlo aparte. Es decir: Con los valores indicados entre llaves {} se inicializarn los elementos del arreglo. Los valores deben ser del del arreglo.

IIC 1102

Pgina: 2

Intro. Prog. Orientada a Objeto Arreglos y Enumeraciones

Rodrigo Sandoval U.

Tambin es factible declarar, dimensionar, e inicializar un arreglo con todos sus elementos, en una sola declaracin, pero slo indicando un subconjunto de los valores que el arreglo puede guardar: [] = new [N] {valor1, ..., valorM}; ... donde MN, en cuyo caso, el real dimensionamiento del arreglo se regir por M. Algunos ejemplos:

// Arreglo para 10 enteros int [] numeros; numeros = new int[10]; // Arreglo para 10 enteros int [] numeros = new int[10]; // Arreglo para 10 enteros int [] numeros = { 1, 1, 1, 2, 3, 5, 2, 5, 3, 4 };

1.2

Uso de Arreglos Unidimensionales

Los elementos de un arreglo son variables del tipo base del vector, por lo que se utilizan de la misma manera en expresiones y dems instrucciones, como la asignacin. Por ejemplo, para asignar un valor a un elemento de un arreglo basta con escribir:

[indice] = ;donde es el nombre de la variable e indice hace referencia a la posicin del elemento al que se le quiere asignar el . La referencia de valores en un arreglo, se indexa desde el 0 al N-1. Importante: Puesto que los arreglos son estructuras complejas (es decir, no bsicas), no es posible asignar un arreglo a otro mediante una simple asignacin (=). Para hacer esto es necesario escribir un ciclo y asignar elemento a elemento. Como se mencion anteriormente, el lenguaje C# no controla la validez de los ndices que se emplean para referenciar un arreglo. Esto quiere decir que es posible cometer errores muy difciles de detectar en este sentido. Es necesario prestar especial inters a los valores que toman los ndices para evitar estos problemas. Por ejemplo, la siguiente porcin de cdigo compila sin problemas (es decir, sin errores sintcticos), pero probablemente produzca un error en tiempo de ejecucin al referenciarse posiciones inexistentes del arreglo.

// Las posiciones con ndices del 10 al 19 son invlidas. int[] arreglo = { 1,1,1,1,1,1,1,1,1,1 }; int i; for (i=0; i= 10 // 10 elementos

IIC 1102

Pgina: 3

Intro. Prog. Orientada a Objeto Arreglos y Enumeraciones

Rodrigo Sandoval U.

Tambin es comn cometer estos errores olvidando que las posiciones de los arreglos estn numeradas a partir del ndice cero. Es decir, en un arreglo de tamao N las posiciones estn numeradas de 0 a N-1.

1.2.1 Funciones ms comunes con arreglosEn C#, los arreglos se representan con un tipo especfico, y por ello cuentan con sus propios atributos y mtodos especficos. Por ejemplo, para obtener el largo (la cantidad de elementos dimensionados) de un arreglo, o para ordenarlo. El Largo de un Arreglo En el caso de los arreglos unidimensionales, el tamao o cantidad de elementos se obtiene con la propiedad Length. int [] numeros = { 1,2,3,4,5,6 } Console.WriteLine(Largo: {0}, numeros.Length);

Ordenamiento de un Arreglo En el caso de los arreglos que sean de uno de los tipos predefinidos (int, float, char, etc.), es factible ordenarlos en forma creciente, aprovechando el mtodo bsico Sort() de la clase Array: int [] numeros = { 4,5,2,3,1,6 } Array.Sort(numeros); // 1,2,3,4,5,6

Revertir el Orden de un Arreglo En el mismo caso en que se pueda ordenar un arreglo, se puede reordenar exactamente al revs de cmo est, aprovechando el mtodo bsico Reverse() de la clase Array: int [] numeros = { 1,2,3,4,5,6 } Array.Reverse(numeros); // 6,5,4,3,2,1

Ejemplo de Manipulacin de Arreglosusing System; class Arreglo { int[] numeros; public Arreglo(int [] arreglo) { numeros = new int[arreglo.Length]; for (int i=0; i