Escolar Documentos
Profissional Documentos
Cultura Documentos
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;
//Cdigo
unArray=new string[3];
unArray[0]=Eduardo;
unArray[1]=Borja;
unArray[2]=Gabriel;
Lo anterior es equivalente a :
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;
el array es
o bien:
Array.Reverse (unArray);
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
//sin inicializar
//Arreglo de tres
10.
//Arreglo de arreglos
11.
int[][] matriz;
//sin inicializar
12.
13.
//Los arreglos de arreglos se inicializan de manera
diferente
14.
15.
16.
17.
18.
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.
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.
15.
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:
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;
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++)
{
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
El siguiente programa recorre un array y describe cada uno de sus elementos como par o
impar.
using System;
class RecorriendoArrays
{
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
su ndice.
Sort( ) Ordena un ArrayList.
ToArray( ) Copia los elementos
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"));
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
gracias a
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
___/___/____
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.
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.)