Un array es un tipo de dato compuesto que permite almacenar un número x de elementos del mismo tipo.
Cada elemento del array se referencia mediante su posición en la tabla, empezando a contar en 0. Es decir si quisiéramos acceder al valor 5, diríamos que queremos el valor que se encuentra en la posición 1.El contenido del array puede ser de cualquiera de los tipos de datos estudiados mientras que cada posición será un número entero de 0 a n, siendo n el número de elementos del array -1.
Cuando precisemos usar un array:
Crearemos el identificador que permitirá acceder a los datos, es la referencia a la primera posición del array. A esto se le conoce como declaración: tipo_de_datos [] identificador;
Reservaremos el espacio en memoria para guardar todos los datos que mantendrá el array. A esto se le conoce como creación del array: identificador= new tipo_de_datos[Número_de_elementos];
tipo_de_datos [] identificador= newntipo_de-datos [Número_de_elementos];
Ejemplo:
int [] numeros; //Declaración de un array llamado números.
numeros=new int [5]; /* Creación del array números, reservamos espacio en memoria para albergar 5 números enteros. */
char [] letras=new char[20]; /* Declaración y creación de array letras, contendrá 20 caracteres. */
Para acceder a los datos almacenados en un array necesitaremos indicar el nombre de este, así como la posición en la que se encuentran estos.
identificador[posición]; //Extrae el valor de la posición indicada.
identificador[posición]=valor; //Asigna un valor a la posición indicada.
Continuando con el ejemplo:
Console.Write(numeros[5]); //Saca por pantalla el valor de la posición 5. Al no haberle asignado un valor por anterioridad el valor será 0.
letras[19]='a'; //Ahora el valor de la posición 19 es a.
La incialización de un array en C# o a la asignación de un valor inicial a cada posición puede realizase de varias formas, pero en todas estableciendo entre llaves los valores que debe contener. El valor incluido entre las llaves debe ser igual al valor que especifiquemos entre los paréntesis.
Continuando con el ejemplo:
int[]num=new int [4]{1,2,3,4}; //inicializamos en el momento de la declaración y creación del array.
int []num=new int[]{1,2,3,4}; /*no es necesario escribir un 4 entre paréntesis ya que el número finito de elementos escritos entre las llaves proporciona el total de elementos del array*/
int[] num={1.2,3,4};//Otra opción de realización.
La posición siempre debe ser un entero, ahora bien, podemos usar variables:
- valores[n]
- valores[0]
- valores[n-1]
- valores[n*3+4]
- valores[funcion(x)]
- valores[num[6]]
- etc
Un array de caracteres se declara y crea como hemos estudiado hasta ahora, la diferencia radica en su visualización, ya que para obtener la cadena completa que almacena solo es necesario su identificador.
Ejemplo:
int [] num=new int [] {1,2,3};
char [] letras=new char [] {'h','o','l','a'};
Console.WriteLine(letras);
Un array puede ser pasado por como parámetro en cualquier función teniendo en cuenta que este siempre es pasado por referencia, según esto, todas las modificaciones que realicemos sobre el objeto en el interior de la función se verán reflejadas en él, una vez acabe esta.
Debemos dejar claro que no es lo mismo pasar un array como parámetro que un elemento del array ya que en el primer de los casos se está realizando un parámetro por referencia y en la segunda por valor.
REPETICIÓN EN CÓDIGO:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace estudioarrays
{
class Program
{
//funciones para comprobar cuando se pasa un array por referencia, y cuando por un valor.
static void modificaref (int [] n)
{
n[1] = 5;
}
static void modificavalor (int a)
{
a = 5;
}
static void Main(string[] args)
{
//Declaración y creación de un array
//Declaración de un array llamado números.
int[] numeros;
/* Creación del array números, reservamos espacio en memoria para albergar 5 números enteros. */
numeros = new int[5];
/* Declaración y creación de array letras, contendrá 20 caracteres. */
char[] letras = new char[20];
//inicialización de un array
//inicializamos en el momento de la declaración y creación del array.
int[] modouno = new int[4] { 1, 9, 8, 7 };
/*no es necesario escribir un 4 entre paréntesis ya que el número finito de elementos escritos entre las llaves proporciona el total de elementos del array*/
float[] mododos = new float[] { 1, 20, 300, 4000 };
//Otra opción de realización.
double[] modotres = { 1.1, 2.22, 3.333, 4.4444 };
//arrays de caracteres
char[] frase = new char[]{ 'e','s','t','u','d','i','a',' ','m','u','c','h','o','.'};
//acceso y modificación a los datos de un array
Console.WriteLine("Saca por pantalla el valor de la posición 5. Como no se le asigno valor, será 0.");
Console.WriteLine(numeros[4]);
Console.WriteLine("\n");
letras[19] = 'a'; //Ahora el valor de la posición 19 es a.
Console.WriteLine("comprobación de cambio de valor:");
Console.WriteLine(letras[19]);
Console.WriteLine("\n");
Console.WriteLine("Visualización a traves de un bucle que recorre los tres arrays a la vez:");
Console.WriteLine("modouno - mododos - modotres");
for (int i = 0; i < 4; i++)
{
Console.WriteLine(" {0} - {1} - {2}",modouno[i], mododos[i], modotres[i]);
}
Console.WriteLine("\n");
//indices en un array
Console.WriteLine("Visualización de una posición a través de variables (siempre con resultado de un entero(int))");
for (int i = 3; i > 1; i--)
{
Console.WriteLine(modouno[i - 2]);
}
Console.WriteLine("\n");
//visualización de arrays de caracteres
Console.WriteLine("Visualización de un array de caracteres");
Console.WriteLine(frase);
Console.WriteLine("\n");
//lamamos a las funciones para disinguir paso por valor o por referencia de un array
Console.WriteLine("Paso por valor de un array");
modificavalor(modouno[1]);
for(int i = 0; i < 4; i++)
{
Console.WriteLine(modouno[i]);
}
Console.WriteLine("Paso por referencia de un array");
modificaref(modouno);
for (int i = 0; i < 4; i++)
{
Console.WriteLine(modouno[i]);
}
Console.ReadKey();
}
}
}
Crea un programa que almacene las notas de una asignatura de todos los alumnos de la clase.
Continúa con el programa anterior de forma que se muestre por pantalla cuál es la mayor y menor nota.
He usado el algoritmo de ordenación por selección (lo puedes ver en el especial algoritmos de ordenación que entraran para el segundo examen).
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace estudioarrays
{
class Program
{
static void Main(string[] args)
{
int[] notas = new int[4];
string[] alumnos = new string[] { "juan", "susana", "jose", "sabrina" };
int notaMayor,aux;
Console.WriteLine("Introduzca la nota de :");
for (int i= 0; i<=3; i++)
{
Console.Write(alumnos[i]);
Console.Write("\n");
notas[i] = int.Parse(Console.ReadLine());
}
Console.WriteLine("Boletin ordenado de mayor a menor:");
for (int i = 0; i < 4-1; i++)
{
notaMayor = i;
for (int j = i + 1; j < 4; j++)
{
if (notas[j] > notas[notaMayor])
{
notaMayor = j;
}
}
if (i!= notaMayor)
{
aux = notas[i];
notas[i] = notas[notaMayor];
notas[notaMayor] = aux;
}
}
for (int i= 0; i<=3; i++)
{
Console.Write(alumnos[i]);
Console.Write(" - ");
Console.Write(notas[i]);
Console.Write("\n");
}
Console.ReadKey();
}
}
}
Existe otro tipo de de sentencia de control repetitiva conocida como bucle foreach. Es muy utilizada sobre todo cuando usamos tablas de objetos. El bucle foreach recorrerá todo el array hasta llegar al último dato, de forma que en cada vuelta asignará a una variable el valorde la posición que se esté analizando en ese momento.
foreach (tipo_de_dato nombre_elemento in array)
{
Sentencias;
}
Ejemplo:
RESUMIENDO
- Un bucle foreach se usa recorrer todos los elementos del array.
- Se ejecutarán las instrucciones para todos los elementos del array.
- En la cabecera foreach (tipo variable inarray), variable es un elemento de solo lectura. Se encargaráde guardar el valor de la posición del array que está siendo analizada. Este valor puede ser interpretado y podremos realizar operaciones con él, pero sin embargo no podremos modificar la posición del array a la que referencia.
- El array que queremos recorrer con el foreach debe estar declarado y creado antes de ser recorrido.
- Podemos saber el número de elementos almacenados en un array utilizando la propiedad Length. Al ser una propiedad se usa sin paréntesis, precios.Length;
Crea un array de tipomde dato string. Iniciliza este a las cadenas de caracteres que desees. A continuación, y haciendo uso del bucle foreach, muestra por pantalla cada cadena con el número de caracteres que contiene. La función que devuelve el número de caracteres de un tipo string es Length.
Caracteres para el final.
Crea un array de números enteros. Inicializa cada posición al valor que desees. Muestra por pantalla para cada elemento del array si este es par o impar.Utiliza el bucle foreach.
Extra
Hasta ahora hemos estado usando arrays de una sola dimensión, conocidos también como vectores, tablas o listas. Estos arrays se reconocen con ayuda de un solo índice. Los arrays, que se identifican con más de un índice, son los arays multidimensionales. Los más comunes son los de dos dimensionales o bidimensionales, también llamados matrices. Es común representar este tipo de datos como una tabla compuesta por una serie de filas y columnas.
Entre los paréntesis se colocan los índices que representan a la matriz. El primero es la fila, el segundo la columna.
Podemos generar arrays de tantas dimensiones como queramos aunque es cierto, que la mayoría de los problemas más complejos como máximo necesitarán 3 dimensiones.
La declaración de los arrays multidimensionales incorpora en los corchetes una coma por cada dimensión adicional.
tipo [ , ] matriz;
matriz = new tipo_de_datos[numeros_de_elementos, numeros_de_elementos];
tipo [ , ] matriz = new tipo_de_datos [ numeros_de_elementos, numeros_de_elementos];
tipo[ , ] matriz = new tipo [filas, columnas]{{elementos_fila}{elementos_columnas}};
tipo [ , ] matriz ={{elementos_fila}{elementos_columnas}};
tipo [ , ] matriz = new tipo [ , ]{{elemento_filas}{elemento_columnas}}
matriz[fila, columna] = valor;
Ejemplo:
namespace estudioarrays
{
class Program
{
const int FILAS = 4;
const int COLUMNAS = 4;
static void visualiza (char[,] matriz)
{
for (int i = 0; i < FILAS; i++)
{
for (int j = 0; j < COLUMNAS; j++)
{
Console.Write(matriz[i, j]);
}
Console.Write("\n");
}
}
static void Main(string[] args)
{
char[,] matriz = new char[4, 4] {{'K','S','A','P'},{'M','Q','C','Z'},{'W','G','L','N'},{'X','S','J','R'}};
visualiza(matriz);
Console.ReadKey();
}
}
}
0 comentarios:
Publicar un comentario