Arreglos y Matrices
Arreglos y Matrices
Arreglos y Matrices
Arreglos y matrices
3.1. Conceptos bsicos sobre arreglos
3.1.1. Definicin de un array y acceso a los datos Una tabla, vector o array (que algunos autores traducen por "arreglo") es un conjunto de elementos, todos los cuales son del mismo tipo. Estos elementos tendrn todos el mismo nombre, y ocuparn un espacio contiguo en la memoria. Por ejemplo, si queremos definir un grupo de nmeros enteros, el tipo de datos que usaremos para declararlo ser "int[]". Si sabemos desde el principio cuantos datos tenemos (por ejemplo 4), les reservaremos espacio con "= new int[4]", as int[] ejemplo = new int[4]; Podemos acceder a cada uno de los valores individuales indicando su nombre (ejemplo) y el nmero de elemento que nos interesa, pero con una precaucin: se empieza a numerar desde 0, as que en el caso anterior tendramos 4 elementos, que seran ejemplo[0], ejemplo[1], ejemplo[2], ejemplo[3]. Como ejemplo, vamos a definir un grupo de 5 nmeros enteros y hallar su suma: using System; public class Ejemplo33 { public static void Main() { /* Un array de 5 nmeros enteros */ int[] numero = new int[5]; int suma; /* Un entero que ser la suma */ numero[0] = 200; /* Les damos valores */ numero[1] = 150; numero[2] = 100; numero[3] = -50; numero[4] = 300; suma = numero[0] + /* Y hallamos la suma */ numero[1] + numero[2] + numero[3] + numero[4]; Console.WriteLine("Su suma es " + suma); /* Nota: esta es la forma ms ineficiente e incmoda */ /* Ya lo iremos mejorando */ } } Ejercicios propuestos: Un programa que pida al usuario 4 nmeros, los memorice (utilizando un arreglo), calcule su media aritmtica y la muestre en pantalla. Un programa que pida al usuario 5 nmeros reales y luego los muestre en el orden contrario al que se introdujeron. Un programa que pida al usuario 10 nmeros enteros y calcule (y muestre) cul es el mayor de ellos. 3.1.2. Valor inicial de un array Al igual que ocurra con las variables "normales", podemos dar valor a los elementos de un arreglo al principio del programa. Ser ms cmodo que dar los valores uno por uno, como hemos hecho antes, pero slo se podr hacer si conocemos todos los valores. En este caso, los indicaremos todos entre llaves, separados por comas: using System; public class Ejemplo34 { public static void Main() { int[] numero = /* Un array de 5 nmeros enteros */ {200, 150, 100, -50, 300}; int suma; /* Un entero que ser la suma */ suma = numero[0] + /* Y hallamos la suma */ numero[1] + numero[2] + numero[3] + numero[4]; Console.WriteLine("Su suma es " + suma); /* Nota: esta forma es algo menos engorrosa, pero todava no */ /* est bien hecho. Lo seguiremos mejorando */ } }
Ejercicio propuesto: Un programa almacene en un arreglo el nmero de das que tiene cada mes (supondremos que es un ao no bisiesto), pida al usuario que le indique un mes (1=enero, 12=diciembre) y muestre en pantalla el nmero de das que tiene ese mes. Un programa que almacene en una tabla el nmero de das que tiene cada mes (ao no bisiesto), pida al usuario que le indique un mes (ej. 2 para febrero) y un da (ej. El 15) y diga qu nmero de da es dentro del ao (por ejemplo, el 15 de febrero sera el da nmero 46, el 31 de diciembre sera el da 365). 3.1.3. Recorriendo los elementos de una tabla Es de esperar que exista una forma ms cmoda de acceder a varios elementos de un array, sin tener siempre que repetirlos todos, como hemos hecho en suma = numero[0] + numero[1] + numero[2] + numero[3] + numero[4]; El "truco" consistir en emplear cualquiera de las estructuras repetitivas que ya hemos visto (while, do..while, for), por ejemplo as: suma = 0; /* Valor inicial de la suma */ for (i=0; i<=4; i++) /* Y hallamos la suma repetitiva */ suma += numero[i]; El fuente completo podra ser as: using System; public class Ejemplo35 { public static void Main() { int[] numero = /* Un array de 5 nmeros enteros */ {200, 150, 100, -50, 300}; int suma; /* Un entero que ser la suma */ /* Para recorrer los elementos */ int i; suma = 0; /* Valor inicial de la suma */ for (i=0; i<5; i++) /* Y hallamos la suma repetitiva */ suma += numero[i]; Console.WriteLine("Su suma es " + suma); } } En este caso, que slo sumbamos 5 nmeros, no hemos escrito mucho menos, pero si trabajsemos con 100, 500 o 1000 nmeros, la ganancia en comodidad s que est clara. 3.1.4. Datos repetitivos introducidos por el usuario Si queremos que sea el usuario el que introduzca datos a un array, usaramos otra estructura repetitiva ("for", por ejemplo) para pedrselos: using System; public class Ejemplo36 { public static void Main() { int[] numero = new int[5]; /* Un array de 5 nmeros enteros */ int suma; /* Un entero que ser la suma */ int i; /* Para recorrer los elementos */ for (i=0; i<5; i++) /* Pedimos los datos */ { Console.Write("Introduce el dato numero " + Convert.String(i+1)); numero[i] = System.Convert.ToInt32(System.Console.ReadLine()); } suma = 0; /* Valor inicial de la suma */ for (i=0; i<5; i++) /* Y hallamos la suma repetitiva */ suma += numero[i]; Console.WriteLine("Su suma es " + suma); } }
Ejercicios propuestos: A partir del programa propuesto en 3.1.2, que almacenaba en un arreglo el nmero de das que tiene cada mes, crear otro que pida al usuario que le indique la fecha, detallando el da (1 al 31) y el mes (1=enero, 12=diciembre), como respuesta muestre en pantalla el nmero de das que quedan hasta final de ao. Crear un programa que pida al usuario 10 nmeros y luego los muestre en orden inverso (del ltimo al primero). Crear un programa que pida al usuario 10 nmeros, calcule su media y luego muestre los que estn por encima de la media.