Você está na página 1de 23

UNIVERSIDAD MONSEOR OSCAR ARNULFO ROMERO

FACULTAD DE CIENCIAS EMPRESARIALES Y ECONMICAS


LICENCIATURA EN CIENCIAS DE LA COMPUTACIN
PROGRAMACIN DE SISTEMAS
Arreglos en C#
Los arreglos en C# (tambin conocidos como Arrays) al igual que en
C/C++, son indexados iniciando en cero (0). La forma de trabajo es muy
similar a la mayora de lenguajes pero hay algunas diferencias que
notarn.
En programacin un array (muchos lo llaman vector) es una zona de
almacenamiento que contiene elementos de un mismo tipo (enteros,
bolanos, fechas). En principio todos las arrays son de una dimensin,
pero se pueden simular facilmente arrays multidimensionales. Los ms
fciles de ver o imaginar son los de dos (un tablero de ajedrez) y tres
dimensiones (el cubo de Rugby).
Para que sirven los arrays?
Estas estructuras de datos son adecuadas para situaciones en las que el
acceso a los datos se realice de forma aleatoria e impredecible, por
ejemplo, cuando tenemos un conjunto de nmeros desordenados o una
lista de nombres.
Por el contrario, si los elementos pueden estar ordenados y se va a
utilizar acceso secuencial sera ms adecuado utilizar otra estructura
mejor diseada para estas situaciones. En lenguajes fuertemente
tipados como C# (aunque ya no tanto) los arrays solo pueden tener
elementos de un mismo tipo, a diferencia de PHP, Python y otros
lenguajes dinmicos. Veamos ahora como podemos trabajar con los
arrays en C#.
Como declarar e inicializar un arreglo en C#
Cuando vayamos a declarar un arreglo en debemos colocar los
corchetes despus de tipo de dato. En C/C++ se estila poner los
corchetes despus del identificador, eso causa un error de compilacin
en C#Array Unidimensionales
0

Declarar un Array
Para declarar un array de una dimensin, solamente debes especificar
de qu tipo sern los elementos de array, de esta forma:
<tipo> [] <nombre> = new <tipo> [<tamao>];
Por ejemplo, si quiero crear un nuevo array de 8 nmeros enteros:
int [] numeros = new int [8];
int es para decir que son enteros lo que voy a almacenar, numeros es el
nombre del array y new es el operador que indica al compilador que cree
un nuevo array con una capacidad de 8 elementos.
Si quieres establecer los 8 nmeros enteros desde un principio, debers
incluir entre llaves, los elementos separados por coma como en el
ejemplo:
int [] a = {6,1,5,6,4,8,6,9,7,4,14,26,14,12,10};
1.
2.
3.
4.
5.

//Declaracin erronea
int valores[];
//Declaracin valida
int[] valores;

En C# podemos indicar el tamao del arreglo luego de la declaracin.


Esto nos permite decidir qu tamao va a tener el arreglo segn lo que
necesitemos.
1. int[] valores; //valores sin inicializar
2. valores = new int[100]; //100 elementos
3. valores = new int[20]; //ahora contiene 20 elementos
En un array de N elementos el primero tiene ndice 0 y el ltimo N-1. Para acceder a un
elemento cualquiera, se utiliza el ndice. Por ejemplo, para almacenar el valor 12 en el
primer elemento de un array, se puede escribir:

//define un array de enteros de 23 elementos


int[] unArray=new int[23];
//almacena 12 en el primer elemento del array
unArray[0]=12;

La sintaxis de la declaracin e inicializacin de un array es bastante flexible. Se puede,


como se ha hecho anteriormente, declarar un array sin inicializarlo, y posteriormente
inicializarlo.
Por ejemplo:
string[] unArray;

//Cdigo

unArray=new string[3];
unArray[0]=Eduardo;
unArray[1]=Borja;
unArray[2]=Gabriel;

Tambin es posible declararlo e inicializarlo directamente, sin utilizar el operador new:


string[] unArray={Eduardo,Borja,Gabriel};

Lo anterior es equivalente a :

string[] unArray= new string[]{Eduardo,Borja,Gabriel};

o bien
string[] unArray= new string[3]{Eduardo,Borja,Gabriel};

El nmero de elementos que define la longitud de un array debe ser constante. Por eso,
no es posible inicializar un array de esta manera:
int unEntero=3;
string [] unArray= new string[unEntero]{Eduardo,Borja,Gabriel};

Para poder compilar, es necesario cambiar la primera de las dos lneas. Se ha de sustituir
por la lnea:
const int unEntero=3;

Los arrays son objetos


En C#, los arrays son objetos. Adems, todos los arrays, de cualquier tipo derivan de la
clase System.Array, que es el tipo base abstracto de todos los tipos de arrays.
La clase System.Array proporciona muchos mtodos y propiedades para manipular
arrays. Se pueden utilizar las propiedades y otros miembros que tiene esta clase para
manipular los arrays. Por ejemplo, para obtener la longitud de un array se usa la
propiedad Length. El cdigo siguiente asigna la longitud del array unArray, que es 5, a
la variable longitudDelArray:
int[]unArray = {1, 2, 3, 4, 5};
int longitudDelArray = unArray.Length;

Es importante tener en cuenta que el tipo System.Array no es un tipo array, sino un


tipo del cual derivan todos los tipos array.
Las propiedades y mtodos ms importantes son las siguientes:
Nota: En los ejemplos se utilizar el siguiente array de enteros:
int [] unArray=new int[]{2,5,3,4};
- Length: devuelve el nmero de elementos de un array. Por ejemplo:
int longitud=unArray.Length;
- GetLength: obtiene la longitud de una determinada dimensin cuando

el array es

multidimensional. Por ejemplo, para obtener el nmero de elementos de la primera


dimensin:
int longitud=otroArray.GetLength(0);
- Sort y Reverse: Estos mtodos permiten ordenar

descendente. Son mtodos estticos. Por ejemplo:


Array.Sort(unArray);

o bien:

Array.Reverse (unArray);

un array de modo ascendente o

Arreglos multi-dimensionales
En C# tambin podemos declarar arreglos multidimensionales, aqu
unos ejemplos:

Para declarar un array n-dimensional solo hay que tener en cuenta que a
medida que le agreguemos una coma (,) a los corchetes, se crea una
nueva dimensin, por lo que si hacemos [,] estamos creando un array
bidimensional, si agregamos otra coma ([,,]) sera tridimensional.
Veamos un ejemplo:
bool [,] tablero = new bool[8,8];
//Se crea un array bidimensional llamado tablero de 8x8
CODE: SELECCIONAR TODO
1. //Arreglos unidimensionales o de dimensin simple
2. int[] valores1;

//sin inicializar

3. int[] valores2 = new int[50];


4.
5. //Arreglos multidimensionales
6. int[,] valores1;

//sin inicializar

7. int[,] valores2 = new int[3,7];


8. int[,,] valores3 = new int[3,4,2];
dimensiones
9.

//Arreglo de tres

10.

//Arreglo de arreglos

11.

int[][] matriz;

//sin inicializar

12.
13.
//Los arreglos de arreglos se inicializan de manera
diferente
14.

int[][] matriz = new int[3][];

15.

for (int i = 0; i < matriz.Length; i++)

16.

17.
18.

matriz[i] = new int[4];


}

Pueden combinarse los diferentes tipos de declaracin.


Inicializacin
Hay varias formas de inicializar los arreglos:
CODE: SELECCIONAR TODO
1. int[] valores = new int[10] {0,1,2,3,4,5,6,7,8,9};
2. string[] paises = new string[5] {"Argentina", "Bolivia",
"Peru","Chile","Colombia"};
3.
4. //Inicializacion omitiendo el tamao de la matriz
5. int[] valores = new int[] {0,1,2,3,4,5,6,7,8,9};
6. string[] paises = new string[] {"Argentina", "Bolivia",
"Peru","Chile","Colombia"};
7.
8. //Tambien podemos omitir el operador new
9.
10.

int[] valores = {0,1,2,3,4,5,6,7,8,9};

11.
string[]
paises
=
"Peru","Chile","Colombia"};

{"Argentina",

"Bolivia",

12.
Para los arreglos multidimensionales la cosa cambia un poco:
CODE: SELECCIONAR TODO
1. int[,] numeros = new int[3, 4] { {1, 2,3,4}, {9, 8,7,6}, {7,
6,2,5} };
2. string[,]
regiones
=
{"Argentina","Brasil","Peru"},
Rica"} };

new

string[2,
3]
{
{"USA",";Mexico","Costa

3.
4. //Tambien podemos omitir el tamao de la matriz
5. int[,] numeros = new int[,] { {1, 2,3,4}, {9, 8,7,6}, {7,
6,2,5} };
6. string[,]
regiones
=
{"Argentina","Brasil","Peru"},
Rica"} };

new
string[,]
{
{"USA",";Mexico","Costa

7.
8. //Y tambien podemos olvidarnos del operador
9. int[,] numeros = { {1, 2,3,4}, {9, 8,7,6}, {7, 6,2,5} };
10.
string[,] regiones = { {"Argentina","Brasil","Peru"},
{"USA",";Mexico","Costa Rica"} };

Para acceder a los miembros solo tenemos que citar el indice correcto en
cada caso:
CODE: SELECCIONAR TODO
1. valores[1]
= 4; //Cambia el valor del indice 1 a 4
2. numeros[2,1] = 10; //Cambia el valor de indice 2,1 a 10
3.

4. //En un arreglo de arreglos:


5. matriz[2][1] = 4;
6.
En C# los arreglos son objetos
Una ventaja frente a C++ es que los arreglos son objetos (si con
propiedades), la propiedas mas til es lenght (longitud) que nos indica
que tamao tiene nuestro arreglo. Aqui un ejemplo:
CODE: SELECCIONAR TODO
1. System.Console.WriteLine(valores.Length);
2. System.Console.WriteLine(numeros.Length);
3. System.Console.WriteLine(regiones.Length);
Navegar por los valores del arreglo (foreach)
En C# tambin podemos utilizar la sentencia foreach, es una manera
simple de acceder a los valores de un arreglo.
CODE: SELECCIONAR TODO
1. int[] valores = {3, 5, 2, 1, 5, 3, 7, 9, 8};
2. foreach (int i in valores)
3. {
4.

Console.Write("{0} ", i);

5. }
6.
7. Console.Write(" ");
8.
9. //tambin en arreglos multidimensionales
10.
int[,] numeros = new int[2, 3] {{5,2,1}, {7,4,5},
{2,9 ,10}};
11.

foreach(int i in numeros)

12.

13.
14.

Console.Write("{0} ", i);


}

15.

La salida del programa anterior es:


CODE: SELECCIONAR TODO
1. 3 5 2 1 5 3 7 9 8
2. 5 2 1 7 4 5 2 9 10

Para acceder a los valores de arreglos mas complejos podemos utilizar


sentencias foreach anidados.

Acceso a los miembros de un array


Se accede a los elementos de un array de manera similar a como se hace en C y C++.
Por ejemplo, para acceder al quinto elemento del array y asignarle 27:
int[] unArray = {10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0};
unArray[4] = 27;
El siguiente cdigo declara un array multidimensional y asigna 27 al elemento
localizado en [1, 1]:
int[,] otroArray = { {1, 2}, {3, 4}, {5, 6}, {7, 8}, {9, 10} };
otroArray[1, 1] = 27;

Con los arrays de arrays el acceso es como sigue:


int[][] tercerArray = new int[][]
{
new int[] {1, 2},
new int[] {3, 4}
};
tercerArray[1][1] = 5;

C# permite dos tipos de array multidimensionales: los arrays rectangulares y los arrays
dentados.
Un array bidimensional rectangular es aquel en el cual todas sus filas tienen
el mismo nmero de columnas. Los arrays que anteriormente se han mostrado
como ejemplos, son rectangulares. En general son sencillos de declarar,
inicializar y manejar. A continuacin se declara un array de string
bidimensional de cuatro filas y dos columnas:

string [,] misNombres={ {Borja,Yosune},


{Gabriel,Patricia},
{Marco,Arantxa},
{Eduardo,Lola} };

La otra alternativa de arrays multidimensionales es el array dentado, es decir, un array


que no es rectangular. Un array bidimensional dentado, es un array en el que cada fila
tinen un nmero diferente de columnas. Aunque evidentemente proporciona una mayor
flexibilidad que el array rectangular, sin embargo son ms complicados de declarar e
inicializar. Para crear un array dentado, bsicamente lo que se hace es crear un array de
arrays:
Por ejemplo:
int[][] a=new int[3][];
a[0]=new int[4];
a[1]=new int[3];
a[2]=new int[1];

En lugar de usar la coma en el corchete, lo que se hace es usar un corchete extra, por
cada dimensin. Por ejemplo, para declarar un array dentado de tres dimensiones:
int [][][] unArrayDeEnteros;

Un ejemplo completo puede aclarar esta idea:

string [][]animales=new string [3][];


animales[0]=new string[]{Ballena,Tiburn,Delfn,Pulpo};
animales[1]=new string[]{Gorrin,Loro,Buitre};
animales[2]=new string[]{Perro,Gato};
//Se imprime
for(int i=0;i<animales.GetLength(0);i++)
for(int j=0 ; j< animales[i].Length ; j++)
Console.WriteLine(animales [i][j]);

Ejemplo:
// arrays.cs
using System;
class EjemploDeDeclaracionDeArrays
{
public static void Main()
{
//array de una dimensin
int[] unArray = new int[5];
Console.WriteLine("La longitud de unArray es {0}",
unArray.Length);
//array Multidimensional
string[,] otroArray = new string[5,4];
Console.WriteLine("La longitud de otroArray es {0}",
otroArray.Length);
// Array de arrays
byte[][] arrayDeArrays = new byte[5][];
Console.WriteLine("La longitud de arrayDeArrays es {0}",
arrayDeArrays.Length);
// crea un array de arrays
for (int i = 0; i < arrayDeArrays.Length; i++)
{

arrayDeArrays[i] = new byte[i+3];


}
for (int i = 0; i < arrayDeArrays.Length; i++)
{
Console.WriteLine("La longitud de {0} es {1}", i,
arrayDeArrays[i].Length);
}
}
}

La salida que se obtiene al ejecutar este programa es:


La
La
La
La
La
La
La
La

longitud
longitud
longitud
longitud
longitud
longitud
longitud
longitud

de
de
de
de
de
de
de
de

unArray es 5
otroArray es 20
arrayDeArrays es 5
0 es 3
1 es 4
2 es 5
3 es 6
4 es 7

Usando foreach en Arrays


Se puede fcilmente recorrer un array con la sentencia foreach. Esta sentencia
proporciona una manera elegante y sencilla de recorrer los distintos elementos de un
array. Se utiliza para recorrer ms fcilmente la coleccin o el array pero no debera
utilizarse para cambiar los contenidos de la coleccin o array porque puede tener efectos
colaterales no deseados. Por ejemplo, el siguiente cdigo crea un array llamado
unArray :
using System;
class RecorriendoArrays
{
public static void Main()
{
int[] unArray = {4, 5, 6, -1, 0};
foreach (int i in unArray)
{
System.Console.WriteLine(i);
}
}
}

La salida de este cdigo es:


4
5
6
-1
0

El siguiente programa recorre un array y describe cada uno de sus elementos como par o
impar.
using System;
class RecorriendoArrays
{

public static void Main()


{
int[] unArray = {4, 5, 6, -1, 27};
int par=0;
int impar=0;
string dos="par";
string uno="impar";
foreach(int i in unArray)
{
Console.WriteLine(i);
if(i%2==0)
{
par++;
Console.WriteLine("El elemento {0} es {1}",i,dos);
}
else
{
impar++;
Console.WriteLine("El elemento {0} es {1}",i,uno);
}
}
Console.WriteLine("Hay {0} pares y {1} impares" ,par, impar);
}
}
}

La salida de este programa es:

4
El elemento 4 es par
5
El elemento 5 es impar
6
El elemento 6 es par
-1
El elemento -1 es impar
27
El elemento 27 es impar
Hay dos pares y 3 impares

Colecciones
Introduccin
Anteriormente se ha estudiado cmo utilizar los arrays para referenciar un
conjunto de objetos o de variables. Es evidente, sin embargo que los arrays tienen
algunas limitaciones. La mayor de ella es que una vez que el programador ha creado el
array, su tamao no se puede cambiar porque es fijo, constante. El problema se presenta
cuando se pretende aadir nuevos elementos al array, sin crear uno nuevo.
En general, se puede decir que una coleccin se utiliza para trabajar con listas o
conjuntos ordenados de objetos y proporciona una funcionalidad mayor que la de un
simple array. Esta funcionalidad proviene de la implementacin de una serie de
interfaces del namespace System.Collections. Este namespace tambin contiene
clases que implementan estos interfaces y facilitan enormemente la tarea del
programador.
Las colecciones proporcionan mtodos bsicos para acceder a los elementos de
la coleccin utilizando corchetes, de manera idntica a como se accede a los elementos
de un array.
C# proporciona una serie de clases e interfaces que estn contenidas en el
namespace System.Collections, que nos permite trabajar conjuntos de datos o
colecciones, de manera muy sencilla.
Los interfaces que proporcionan funcionalidad a las colecciones, son los
siguientes:
IEnumerable: Proporciona la capacidad para recorrer una coleccin a travs de sus
elementos, por medio de una sentencia foreach.
ICollection: Hereda de IEnumerable. Proporciona la capacidad para obtener el
nmero de elementos de la coleccin y de copiar elementos a un simple array.
oIList: Hereda de IEnumerable y de ICollection. Proporciona una lista de los
elementos de la coleccin con las capacidades de los interfaces anteriormente citados y
algunas otras capacidades bsicas.
IDictionary: Hereda de IEnumerable y de ICollection. Proporciona una lista de
elementos de la coleccin accesibles a travs de un valor en lugar de un ndice.
Los arrays, en C# son objetos de la clase System.Array que es un tipo de coleccin. La
clase System.Array hereda de IList, ICollection e IEnumerable pero no
proporciona algunas funcionalidades avanzadas de IList. Representa una lista de
elementos con un tamao fijo. El programador puede tambin crear sus propias
colecciones especficas.

La clase ArrayList

Una de las clases ms importantes que proporciona el namespace


Systems.Collections se denomina System.Collections.ArrayList, que implementa
las interfaces IList, ICollection e IEnumerable.
Este tipo puede utilizarse para representar una lista de elementos con un tamao
variable, es decir es un array cuyo tamao puede cambiar dinmicamente cuando sea

necesario. Proporciona un determinado nmero de mtodos y propiedades para


manipular sus elementos.
Algunos de los ms importantes son los siguientes:
Adapter( ) Mtodo esttico que crea un ArrayList para un objeto que
implementa IList.
Capacity Determina o lee el nmero de elementos del ArrayList.
Count El nmero actual de elementos del ArrayList.
Item( ) Obtiene o fija el elemento correspondiente a su ndice
determinado.
Add( ) Aade elementos al ArrayList.
AddRauge ( ) Permite aadir los elementos de una ICollection al final
del ArrayList.
Clear ( ) Elimina todos los elementos del ArrayList.
Contains ( ) Determina si un elemento est en la ArrayList.
Index Of ( ) Devuelve el ndice de un determinado elemento.
Insert ( ) Inserta un elemento en un ArrayList.
InsertRange( ) Inserta elementos de una coleccin en un ArrayList.
Remove Elimina un determinado elemento.
RemoveAt Elimina un determinado elemento accediendo a l a travs de

su ndice.
Sort( ) Ordena un ArrayList.
ToArray( ) Copia los elementos

del ArrayList a un array.


El siguiente ejemplo ilustra bien la diferencia entre un Array y un ArrayList puede
ser:
Considere la clase Animal almacenada en el fichero Animal.cs con el siguiente cdigo:
using System;
namespace ConsoleApplication2
{
public class Animal
{
protected string nombre;
public Animal(string unNombre)
{
nombre=unNombre;
}
public string Nombre
{
get
{
return nombre;
}
set
{
nombre=value;
}
}
public void Comer()
{

Console.WriteLine(" el animal {0} ha comido",nombre);


}
}
}
A continuacin, modifique el cdigo en el mtodo Main() por el siguiente:
using System;
namespace ConsoleApplication2
{
class MiAplicacion
{
static void Main(string[] args)
{
Console.WriteLine("****Ejemplo de Array****");
//Se define un array de dos elementos de la clase Animal
Animal[] arrayAnimal = new Animal[2];

Animal gato=new Animal ("Mimoso");


arrayAnimal[0]=gato;
arrayAnimal[1]=new Animal("Andrajoso");
// se recorre el array por medio de la sentencia foreach
Console.WriteLine("\nRecorremos el array con
foreach");
foreach(Animal an in arrayAnimal)
Console.WriteLine(an.Nombre);
// se recorre el array por medio de la sentencia for
Console.WriteLine("\nRecorremos el array con una
sentencia for");
for (int i=0;i<arrayAnimal.Length;i++)
Console.WriteLine(arrayAnimal[i].Nombre);
Console.WriteLine("El nmero de elementos del array es
{0}",arrayAnimal.Length);
}
}
}

Animal gato=new Animal ("Mimoso");


arrayAnimal[0]=gato;
arrayAnimal[1]=new Animal("Andrajoso");
// se recorre el array por medio de la sentencia foreach
Console.WriteLine("\nRecorremos el array con
foreach");
foreach(Animal an in arrayAnimal)
Console.WriteLine(an.Nombre);
// se recorre el array por medio de la sentencia for
Console.WriteLine("\nRecorremos el array con una
sentencia for");
for (int i=0;i<arrayAnimal.Length;i++)
Console.WriteLine(arrayAnimal[i].Nombre);
Console.WriteLine("El nmero de elementos del array es
{0}",arrayAnimal.Length);
}
}
}

Console.WriteLine("El arraylilst tiene ahora {0} elementos",


listaArrayAnimales.Count);
//Puede utilizarse unArrayList como un Array
//Los elementos de un ArrayList son objetos,y es necesario
//convertirlos a objetos de la clase Animal al utilizarlo como array
Console.WriteLine("\nRecorremos la coleccion con una sentencia for");
for(int i=0;i<listaArrayAnimales.Count;i++)
Console.WriteLine("Nombre: {0} ",
((Animal)listaArrayAnimales[i]).Nombre);
Console.WriteLine("\nRecorremos la coleccion con una sentencia
foreach");
//Aqu no es necesaria la conversin
foreach(Animal an in listaArrayAnimales)
Console.WriteLine(an.Nombre);
//Un ArrayList puede cambiar de tamao
Console.WriteLine("\n*****Ejemplo de cambio de tamao en el
ArrayList***");
Console.WriteLine("Aadimos ahora array creado al comienzo");
listaArrayAnimales.AddRange(arrayAnimal);
Console.WriteLine("El arraylilst tiene ahora {0} elementos",
listaArrayAnimales.Count);
Console.WriteLine("\nRecorremos el array con una sentencia for");
for(int i=0;i<listaArrayAnimales.Count;i++)
Console.WriteLine("Nombre: {0} ",
((Animal)listaArrayAnimales[i]).Nombre);
Console.WriteLine("\nRecorremos el array con una sentencia foreach");
foreach(Animal an in listaArrayAnimales)
Console.WriteLine(an.Nombre);

En el anterior ejemplo se han creado dos colecciones de objetos: el primero utiliza la


clase System.Array que de hecho es una coleccin-, y el segundo utiliza la clase
System.Collections.ArrayList. Ambas colecciones tienen objetos de la clase
Animal que est definida en el fichero Animal.cs. Respecto a la manipulacin del
array, probablemente el lector encontrar pocas dificultades para su comprensin. Sin
embargo, es importante sealar aqu que cuando se crea un array se especifica un
tamao, que ser fijo y constante a lo largo del programa:
Animal[] arrayAnimal = new Animal[2];
Cuando se crea un objeto de la clase ArrayList,

no se define ningn tamao. Para crear


la coleccin, simplemente se utiliza el cdigo siguiente:
ArrayList listaArrayAnimales = new ArrayList();

Existen otros dos constructores de esta clase. El primero de ellos, utiliza como
parmetro una coleccin y el otro, especifica la capacidad la propiedad capacity- o
nmero de elementos inicial de la coleccin y se pasa como parmetro entero.
Inicialmente, la coleccin ArrayList no tiene ningn elemento. No se puede aadir
objetos a travs del ndice, como en los arrays. Para ello, se utiliza el mtodo Add()
como se ve en el ejemplo:
listaArrayAnimales.Add(new Animal("Perico"));
listaArrayAnimales.Add(new Animal("Anquilosado"));

Animal pantera=new Animal("Mougli");


listaArrayAnimales.Add (pantera);

Una vez que se ha aadido un elemento, se puede modificar como si fuera un array,
aunque no se ha hecho anteriormente. Por ejemplo:
listaArrayAnimales[0]=new Animal("Pepe");
Se puede recorrer, por medio de una sentencia foreach, tanto un array como
ArrayList porque ambos implementan la interface IEnumerable:
foreach(Animal an in arrayAnimal)
Console.WriteLine(an.Nombre);
foreach(Animal an in listaArrayAnimales)
Console.WriteLine(an.Nombre);

un

Se puede acceder al nmero de elemento o tamao de un array por medio de la


propiedad Length:
Console.WriteLine("El nmero de elementos del array es {0}",
arrayAnimal.Length);
Y al tamao de una coleccin ArrayList por medio de la propiedad Count,
que esta clase implementa la interface ICollection:
Console.WriteLine("El arraylist tiene ahora {0} elementos",
listaArrayAnimales.Count);

gracias a

La diferencia ms importante es que un array est fuertemente tipado, y permite acceder


a sus elementos directamente:
Console.WriteLine(arrayAnimal[i].Nombre);

Cuando se accede a los elementos por medio del ndice debe realizarse una conversin
de tipos:
Console.WriteLine("Nombre: {0} ",
((Animal)listaArrayAnimales[i]).Nombre);

Finalmente, pueden eliminarse objetos de una coleccin por medio de los mtodos
Remove(object unObjeto) o RemoveAt(int indice).
Por ejemplo, si se pretende eliminar el elemento gato y el primer elemento de la
coleccin, han de aadirse estas lneas al final del cdigo del mtodo Main():
listaArrayAnimales.Remove(gato);
listaArrayAnimales.RemoveAt(0);
Console.WriteLine("El arraylist tiene ahora {0} elementos",
listaArrayAnimales.Count);

Adems puede obtenerse el ndice de un determinado elemento por medio del mtodo
IndexOf(), por ejemplo:
Console.WriteLine(listaArrayAnimales.IndexOf(gato));
Si no existe el elemento en la coleccin, este mtodo devuelve 1.
Adems, puede aadirse una coleccin a un objeto de la clase ArrayList, por medio
del mtodo AddRange(), al que se le pasa la coleccin como parmetro. Dicha

coleccin puede ser tambin un array, que es una coleccin tambin. Por ejemplo, en la
siguiente lnea se aade el array arrayAnimal al ArrayList:
listaArrayAnimales.AddRange(arrayAnimal);

Las colecciones son imprescindibles para trabajar con algunos controles como ListBox,
ComboBox, etc, y su conocimiento reduce enormemente el esfuerzo de la programacin
de este tipo de controles.

LICENCIATURA EN CIENCIAS DE LA
COMPUTACIN
PROGRAMACIN DE SISTEMAS

CICLO I
2016

PRCTICA 4. VECTORES Y MATRICES


FECHA
NOMBRE:

___/___/____

1. Introduccin.
Los vectores y matrices son uno de los medios principales para el almacenamiento de los
datos en un programa. En esta prctica veremos todos los conceptos relativos a la Creacin
y manejo en C# de vectores, matrices y cadenas de caracteres.
2. Conceptos nuevos.
Los conceptos nuevos introducidos son:
1) Definicin y manejo de vectores o arrays unidimensionales.
2) Definicin y manejo de matrices o tablas.
3) Definicin y manejo de cadenas de caracteres.
4) Bsqueda de un elemento dentro de un vector.
5) Bsqueda de un elemento dentro de una tabla.
3. Lenguaje C#.
Las nuevas caractersticas de C# que ha aprendido y que necesita saber para la realizacin
de la prctica son:
1) Definicin y funcionamiento de vectores o arrays unidimensionales.
2) Definicin y funcionamiento de matrices o tablas.
3) Definicin y funcionamiento de cadenas de caracteres.
4. Entorno DevC#.
La nica funcionalidad nueva de DevC# necesaria para esta prctica es saber cmo
visualizar un vector en la ventana de depuracin.
5. Bsqueda en vectores y matrices.
Como ya hemos comentado inicialmente, los vectores y matrices son uno de los medios
principales mediante los cuales se almacenan los datos en un programa C. Debido a esta
causa, existen operaciones fundamentales cuyo tratamiento es imprescindible conocer.
Estas operaciones esenciales son la bsqueda de elementos y la ordenacin. En este curso
slo se abordar la primera de ellas.
Veremos cmo realizar una bsqueda en un vector y cmo realizar una bsqueda en una
matriz.
5.1. Bsqueda en un vector.

La bsqueda de un elemento dentro de un vector se basa en ir recorriendo secuencialmente


el vector, de una posicin a la siguiente, comenzando en la primera posicin del vector y
detenindose nicamente cuando se encuentra el elemento buscado o bien cuando se
alcanza el final del vector.
El pseudocdigo asociado a lo anteriormente expuesto sera el siguiente:
Inicio
encontrado = 0
indice = 0
mientras (encontrado == 0) y (indice < ultimo) hacer
si (Vector[indice] == elemento_buscado) entonces
encontrado = 1
sino
incrementar indice
fin_mientras
si (encontrado == 1) entonces
Escribir Elemento encontrado en posicin indice
sino
Escribir Elemento no encontrado
Fin
Observando el pseudocdigo anterior vemos que se utiliza una variable entera encontrado
que indica si el elemento se encontr en la bsqueda. La variable encontrado se inicializa a
0 (falso) y se activa a 1 (verdadero) cuando se encuentra el elemento buscado. Se utiliza un
operador and (en C &&), que permite evaluar las dos condiciones de terminacin de la
bsqueda: que el elemento se haya encontrado o que no haya ms elementos (cuando el
ndice del vector excede al ltimo valor vlido del mismo). Cuando el bucle se termina, el
elemento o bien se ha encontrado o bien no se ha encontrado. Si el elemento se ha
encontrado, el valor de la variable encontrado ser 1 y el valor de la variable indice ser la
posicin del vector donde se encuentra el elemento buscado. Por el contrario, si el elemento
no se ha encontrado el valor de la variable encontrado ser 0.
5.2. Bsqueda en una matriz.
Utilizando un razonamiento anlogo al expuesto en la seccin anterior, la bsqueda de un
elemento dentro de una matriz se basa en ir recorriendo secuencialmente la matriz.
La nica diferencia con el caso anterior es que ahora hay que recorrer filas y columnas
comenzando en la primera fila y primera columna del vector y detenindose nicamente
cuando se encuentra el elemento buscado o bien cuando se alcanza la ltima fila y la ltima
columna.
El pseudocdigo asociado a una bsqueda en una matriz bidimensional, sera el siguiente:
Inicio
encontrado = 0

indice_fila = 0
mientras (encontrado == 0) y (indice_fila < ultima_fila) hacer
indice_columna = 0
mientras (encontrado == 0) y (indice_columna < ultima_columna) hacer
si (Vector[indice_fila, indice_columna] == elemento_buscado) entonces
encontrado = 1
sino
incrementar indice_columna
fin_mientras
si (encontrado == 0)
incrementar indice_fila
fin_mientras
si (encontrado==1) entonces
Escribir Elemento encontrado en posicin indice_fila , indice_columna
sino
Escribir Elemento no encontrado
Fin
La nica diferencia con el cdigo visto en la seccin anterior es que en este caso son
necesarios dos bucles anidados, uno para recorrer las filas y otro para recorrer las columnas.
6. Ejercicios propuestos.
A continuacin se propone el enunciado de una serie de ejercicios que el alumno tiene que
realizar antes de asistir a la sesin de prcticas, con el fin de presentar las dudas que
hayan aparecido en la realizacin de los mismos durante la sesin de prcticas.
1) Escribir un programa que pida 10 nmeros enteros por teclado y que imprima por
pantalla:
i. Cuntos de esos nmeros son pares.
ii. Cul es el valor del nmero mximo.
iii. Cul es el valor del nmero mnimo.
2) Escribir un programa que lea un vector de 10 elementos. Deber imprimir el mismo
vector por pantalla pero invertido. Ejemplo: dado el vector 1 2 3 4 5 6 7 8 9 10 el programa
debera imprimir 10 9 8 7 6 5 4 3 2 1.
3) Escribir un programa que lea 10 nmeros por teclado. Luego lea dos ms e indique si
stos estn entre los anteriores.
4) Escribir un programa que lea una matriz de 3 filas y 3 columnas de valores enteros.
A continuacin, el programa debe pedir el nmero de una fila. El programa deber devolver
el mximo de esa fila.

5) Escribir un programa que lea un matriz de enteros de 2 filas y 4 columnas y muestre por
pantalla la traspuesta a dicha matriz. Ejemplo:
Entrada: 2 3 4 5
Salida 2 7
7654
36
45
54
6) Escribir un programa que lea una matriz de nmeros enteros y que devuelva la suma de
los elementos positivos de la matriz y la suma de los elementos negativos.
7) Escribir un programa que lea una matriz de enteros de 4 filas y 4 columnas y a
continuacin intercambie la fila i con la fila j, siendo i y j dos valores introducidos por
teclado.
8) Escribir un programa que lea una matriz de 4 filas y 3 columnas, la visualice por pantalla
y a continuacin encuentre el mayor y el menor elemento de la matriz y sus posiciones.
9) Escribir un programa que lea una frase y determine la frecuencia de aparicin de cada
vocal con respecto al total de caracteres de la frase.
10) Escribe un programa que lea del teclado una cadena y muestre en la pantalla la cantidad
de consonantes y de vocales que contiene.
11) Escribe un programa que lea del teclado una cadena y construya y muestre en la
pantalla otra cadena en la que cada vocal haya sido reemplazada por un punto.
7. Ejercicios propuestos de un nivel de dificultad mayor
Los ejercicios anteriores no presentaban una gran dificultad, en el sentido que la solucin se
consigue realizando una serie de pasos conocidos: inicializacin de variables, uso de uno o
varios bucles (anidados o no) y dentro de dichos bucles uso de sentencias condicionales if
else para actualizar el valor de ciertas variables. Los siguientes ejercicios tienen una
complejidad mayor a los propuestos anteriormente, en el sentido que la solucin a simple
vista no es tan obvia como los anteriores. Intente realizar los ejercicios siguientes.
Encontrar que algunos son ms difciles de lo que parecen y que otros, en cambio, son ms
fciles de lo que en un principio pensamos:
12) Escribir un programa que lea una frase y a continuacin visualice cada palabra de la
frase una debajo de otra, seguida cada palabra del nmero de letras que compone cada
palabra.
13) Escribir un programa que lea una frase y sustituya todas las secuencias de dos o ms
blancos por un solo blanco y visualice la frase.
14) Una palabra es palndroma si se puede leer igual de izquierda a derecha que de derecha
a izquierda, por ejemplo: reconocer es palndroma. Construye un programa que pida una
palabra por teclado e imprima por pantalla si es o no palndroma.

15) Un cuadrado mgico 3 x 3 es una matriz 3 x 3 formada por nmeros del 1 al 9 donde la
suma de sus filas, sus columnas y sus diagonales son idnticas. Crear un programa que
permita introducir un cuadrado por teclado y determine si este cuadrado es mgico o no. El
programa deber comprobar que los nmeros introducidos son correctos, es decir, estn
entre el 1 y el 9.
16) Se dice que una matriz tiene un punto de silla si alguna posicin de la matriz es el
menor valor de su fila y a la vez el mayor de su columna. Escribir un programa que tenga
como entrada una matriz de nmeros enteros y calcule la posicin de un punto de silla (si es
que existe).
8. La Frase.
Non pudeat, quae nescieris, te velle doceri: scire aliquid laus est, cupa est nil discere
velle
Pregunta sin reparos lo que quieras saber: ms que ignorar, es malo no querer aprender
Marco Porcio Catn (234-149 a.C.)

Você também pode gostar