Post on 05-Jul-2018
8/16/2019 C#_Arreglos Estructura de Datos
1/23
UNIVERSIDAD MONSEÑOR OSCAR ARNULFO ROMEROFACULTAD DE CIENCIAS EMPRESARIALES Y ECONÓMICASLICENCIATURA EN CIENCIAS DE LA COMPUTACIÓNPROGRAMACIÓN DE SISTEMAS
Arreglos en C#Los arreglos en C# (a!"$n %ono%&os %o!o Arra's al g)al *)e enC+C,,- son n&e.a&os n%an&o en %ero (/0 La 1or!a &e ra"a2o es !)'s!lar a la !a'or3a &e leng)a2es 4ero 5a' alg)nas &1eren%as *)enoar6n0En 4rogra!a%7n )n arra' (!)%5os lo lla!an 8e%or es )na 9ona &eal!a%ena!eno *)e %onene ele!enos &e )n !s!o 4o (eneros-"ol$anos- 1e%5as0 En 4rn%4o o&os las arra's son &e )na &!ens7n-4ero se 4)e&en s!)lar 1a%l!ene arra's !)l&!ensonales0 Los !6s
16%les &e :8er; o !agnar son los &e &os ()n a"lero &e a2e&re9 ' res&!ensones (el %)"o &e R)g"'0
Para *)e sr8en los arra's<
Esas esr)%)ras &e &aos son a&e%)a&as 4ara s)a%ones en las *)e ela%%eso a los &aos se real%e &e 1or!a aleaora e !4re&e%"le- 4ore2e!4lo- %)an&o ene!os )n %on2)no &e n=!eros &esor&ena&os o )nalsa &e no!"res0Por el %onraro- s los ele!enos 4)e&en esar or&ena&os ' se 8a a
)l9ar a%%eso se%)en%al ser3a !6s a&e%)a&o )l9ar ora esr)%)ra!e2or &se>a&a 4ara esas s)a%ones0 En leng)a2es 1)ere!ene4a&os %o!o C# (a)n*)e 'a no ano los arra's solo 4)e&en enerele!enos &e )n !s!o 4o- a &1eren%a &e P?P- P'5on ' orosleng)a2es &n6!%os0 Vea!os a5ora %o!o 4o&e!os ra"a2ar %on losarra's en C#0
Como declarar e inicializar un arreglo en C#C)an&o 8a'a!os a &e%larar )n arreglo en &e"e!os %olo%ar los%or%5ees &es4)$s &e 4o &e &ao0 En C+C,, se esla 4oner los
%or%5ees &es4)$s &el &en@%a&or- eso %a)sa )n error &e %o!4la%7nen C#
Array Unidimensionales
/ B H J
8/16/2019 C#_Arreglos Estructura de Datos
2/23
De%larar )n Arra'
Para &e%larar )n arra' &e )na &!ens7n- sola!ene &e"es es4e%@%ar&e *)$ 4o ser6n los ele!enos &e arra'- &e esa 1or!aK
4o no!"re neQ 4o a!a>oPor e2e!4lo- s *)ero %rear )n n)e8o arra' &e n=!eros enerosK
n n)!eros neQ n int es 4ara &e%r *)e son eneros lo *)e 8o' a al!a%enar- numeros es elno!"re &el arra' ' new es el o4era&or *)e n&%a al %o!4la&or *)e %ree)n n)e8o arra' %on )na %a4a%&a& &e ele!enos0S *)eres esa"le%er los n=!eros eneros &es&e )n 4rn%4o- &e"er6sn%l)r enre lla8es- los ele!enos se4ara&os 4or %o!a %o!o en el
e2e!4loK
n a -B------J-H--B--B-B-B/
B0 //Declaración erronea0 int 8alores00 //Declaración valida0 int 8alores
En C# 4o&e!os n&%ar el a!a>o &el arreglo l)ego &e la &e%lara%7n0
Eso nos 4er!e &e%&r *)$ a!a>o 8a a ener el arreglo seg=n lo *)ene%ese!os0
B0 int 8alores //valores sin inicializar 0 8alores neQ intB// //100 elementos0 8alores neQ int/ //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;
http://www.google.com/search?q=new+msdn.microsoft.comhttp://www.google.com/search?q=new+msdn.microsoft.comhttp://www.google.com/search?q=new+msdn.microsoft.comhttp://www.google.com/search?q=new+msdn.microsoft.com
8/16/2019 C#_Arreglos Estructura de Datos
3/23
La sintaxis de la declaración e inicialización de un array es bastante lexible. !e puede,como se "a "ec"o anteriormente, declarar un array sin inicializarlo, y posteriormente
inicializarlo.Por ejemplo:string[] unArray;
//!"digo
unArray=new string[3];
unArray[0]=#$duardo#;
unArray[1]=#%or&a#;
unArray[2]=#'a(riel#;
#ambi$n es posible declararlo e inicializarlo directamente, sin utilizar el operador new:string[] unArray=)*$duardo#+#%or&a#+#'a(riel#,;
Lo anterior es equivalente a :string[] unArray= new string[])*$duardo#+#%or&a#+#'a(riel#,;
o bienstring[] unArray= new string[3])*$duardo#+#%or&a#+#'a(riel#,;
El número de elementos que deine la lon%itud de un array debe ser constante. Por eso,
no es posible inicializar un array de esta manera:int un$ntero=3;
string [] unArray= new string[un$ntero])*$duardo#+#%or&a#+#'a(riel#,;
Para poder compilar, es necesario cambiar la primera de las dos líneas. !e "a de sustituir por la línea:const int un$ntero=3;
Los arrays son objetosEn &', los arrays son objetos. (dem)s, todos los arrays, de cualquier tipo derivan de la
clase ystem.Array, que es el tipo base abstracto de todos los tipos de arrays.
La clase ystem.Array proporciona muc"os m$todos y propiedades para manipular
arrays. !e pueden utilizar las propiedades y otros miembros que tiene esta clase para
manipular los arrays. Por ejemplo, para obtener la lon%itud de un array se usa la
propiedad engt. El códi%o si%uiente asi%na la lon%itud del array unArray, que es , a
la variable longitudelArray:int[]unArray = )1+ 2+ 3+ + ,;
int longitudelArray = unArray.engt;
Es importante tener en cuenta que el tipo ystem.Array no es un tipo array, sino untipo del cual derivan todos los tipos array.
Las propiedades y m$todos m)s importantes son las si%uientes: *ota: En los ejemplos se utilizar) el si%uiente array de enteros:int [] unArray=new int[])2++3+,;
+ engt: devuelve el número de elementos de un array. Por ejemplo:int longitud=unArray.engt;
+ 'etengt: obtiene la lon%itud de una determinada dimensión cuando el array es
8/16/2019 C#_Arreglos Estructura de Datos
4/23
multidimensional. Por ejemplo, para obtener el número de elementos de la primera
dimensión:int longitud=otroArray.'etengt405;
+ ort y 6e7erse: Estos m$todos permiten ordenar un array de modo ascendente o
descendente. !on m$todos est)ticos. Por ejemplo:Array.ort4unArray5;
o bien:Array.6e7erse 4unArray5;
8/16/2019 C#_Arreglos Estructura de Datos
5/23
Arreglos multi-dimensionalesEn C# a!"$n 4o&e!os &e%larar arreglos !)l&!ensonales- a*)3 )nos e2e!4losK
Para &e%larar )n arra' n&!ensonal solo 5a' *)e ener en %)ena *)e a!e&&a *)e le agreg)e!os )na %o!a (- a los %or%5ees- se %rea )nan)e8a &!ens7n- 4or lo *)e s 5a%e!os - esa!os %rean&o )n arra'"&!ensonal- s agrega!os ora %o!a (-- ser3a r&!ensonal0Vea!os )n e2e!4loK
"ool - a"lero neQ "ool- //Se crea un array bidimensional llamado tablero de 8x8
CODE: SELECCIONAR ODO
B0 //Arreglos unidimensionales o de dimensión simle
0 int 8aloresB //sin inicializar
0 int 8alores neQ int/
0
0 //Arreglos multidimensionales
0 int- 8aloresB //sin inicializar
H0 int- 8alores neQ int-H
0 int-- 8alores neQ int-- //Arreglo de tresdimensiones
J0
http://www.latindevelopers.com/articulos/csharp/arreglos-en-csharp.phphttp://www.google.com/search?q=new+msdn.microsoft.comhttp://www.google.com/search?q=new+msdn.microsoft.comhttp://www.google.com/search?q=new+msdn.microsoft.comhttp://www.latindevelopers.com/articulos/csharp/arreglos-en-csharp.phphttp://www.google.com/search?q=new+msdn.microsoft.comhttp://www.google.com/search?q=new+msdn.microsoft.comhttp://www.google.com/search?q=new+msdn.microsoft.com
8/16/2019 C#_Arreglos Estructura de Datos
6/23
B/0 //Arreglo de arreglos
BB0 int !ar9 //sin inicializar
B0
B0 //!os arreglos de arreglos se inicializan de maneradi"erente
B0 int !ar9 neQ int
B0 !or (int / !ar90Leng5 ,,
B0
BH0 !ar9 neQ int
B0
"ueden cominarse los di!erentes ti$os de declaraci%n&Inicializaci%n?a' 8aras 1or!as &e n%al9ar los arreglosKCODE: SELECCIONAR ODO
B0 int 8alores neQ intB/ /-B------H--J
0 string 4ases neQ string Argenna- ol8a-Per)-C5le-Colo!"a
0
0 //#nicializacion omitiendo el tama$o de la matriz
0 int 8alores neQ int /-B------H--J
0 string 4ases neQ string Argenna- ol8a-Per)-C5le-Colo!"a
H0
0 //%ambien odemos omitir el oerador new
J0
B/0 int 8alores /-B------H--J
http://www.google.com/search?q=new+msdn.microsoft.comhttp://www.google.com/search?q=new+msdn.microsoft.comhttp://www.latindevelopers.com/articulos/csharp/arreglos-en-csharp.phphttp://www.google.com/search?q=new+msdn.microsoft.comhttp://www.google.com/search?q=new+msdn.microsoft.comhttp://www.google.com/search?q=new+msdn.microsoft.comhttp://www.google.com/search?q=new+msdn.microsoft.comhttp://www.google.com/search?q=new+msdn.microsoft.comhttp://www.google.com/search?q=new+msdn.microsoft.comhttp://www.latindevelopers.com/articulos/csharp/arreglos-en-csharp.phphttp://www.google.com/search?q=new+msdn.microsoft.comhttp://www.google.com/search?q=new+msdn.microsoft.comhttp://www.google.com/search?q=new+msdn.microsoft.comhttp://www.google.com/search?q=new+msdn.microsoft.com
8/16/2019 C#_Arreglos Estructura de Datos
7/23
BB0 string 4ases Argenna- ol8a-Per)-C5le-Colo!"a
B0
Para los arreglos !)l&!ensonales la %osa %a!"a )n 4o%oKCODE: SELECCIONAR ODO
B0 int- n)!eros neQ int- B- --- J- -H-- H---
0 string- regones neQ string- Argenna-rasl-Per)- USA-Me.%o-CosaR%a
0
0 //%ambien odemos omitir el tama$o de la matriz
0 int- n)!eros neQ int- B- --- J- -H-- H---
0 string- regones neQ string- Argenna-rasl-Per)- USA-Me.%o-CosaR%a
H0
0 //& tambien odemos olvidarnos del oerador
J0 int- n)!eros B- --- J- -H-- H- --
B/0 string- regones Argenna-rasl-Per)-USA-Me.%o-Cosa R%a
Para a%%e&er a los !e!"ros solo ene!os *)e %ar el n&%e %orre%o en
%a&a %asoKCODE: SELECCIONAR ODOB0 8aloresB //'ambia el valor del indice 1 a (
0 n)!eros-B B/ //'ambia el valor de indice 2)1 a 10
0
http://www.latindevelopers.com/articulos/csharp/arreglos-en-csharp.phphttp://www.google.com/search?q=new+msdn.microsoft.comhttp://www.google.com/search?q=new+msdn.microsoft.comhttp://www.google.com/search?q=new+msdn.microsoft.comhttp://www.google.com/search?q=new+msdn.microsoft.comhttp://www.latindevelopers.com/articulos/csharp/arreglos-en-csharp.phphttp://www.latindevelopers.com/articulos/csharp/arreglos-en-csharp.phphttp://www.google.com/search?q=new+msdn.microsoft.comhttp://www.google.com/search?q=new+msdn.microsoft.comhttp://www.google.com/search?q=new+msdn.microsoft.comhttp://www.google.com/search?q=new+msdn.microsoft.comhttp://www.latindevelopers.com/articulos/csharp/arreglos-en-csharp.php
8/16/2019 C#_Arreglos Estructura de Datos
8/23
0 //*n un arreglo de arreglos+
0 !ar9B
0
En C# los arreglos son o'etosUna 8ena2a 1rene a C,, es *)e los arreglos son o"2eos (s %on4ro4e&a&es- la 4ro4e&as !as =l es leng5 (long)& *)e nos n&%a*)e a!a>o ene n)esro arreglo0 A*) )n e2e!4loKCODE: SELECCIONAR ODO
B0 S'se!0Console0WreLne(8alores0Leng5
0 S'se!0Console0WreLne(n)!eros0Leng5
0 S'se!0Console0WreLne(regones0Leng5
Na(egar $or los (alores del arreglo )!oreac*+En C# a!"$n 4o&e!os )l9ar la senen%a 1orea%5- es )na !aneras!4le &e a%%e&er a los 8alores &e )n arreglo0CODE: SELECCIONAR ODO
B0 int 8alores - - - B- - - H- J-
0 !oreac* (int in 8alores
0
0 Console0Wre(/ -
0
0
H0 Console0Wre(
0
J0 //tambi,n en arreglos multidimensionales
B/0 int- n)!eros neQ int- --B- H----J -B/
BB0 !oreac*(int in n)!eros
http://www.latindevelopers.com/articulos/csharp/arreglos-en-csharp.phphttp://www.latindevelopers.com/articulos/csharp/arreglos-en-csharp.phphttp://www.google.com/search?q=new+msdn.microsoft.comhttp://www.latindevelopers.com/articulos/csharp/arreglos-en-csharp.phphttp://www.latindevelopers.com/articulos/csharp/arreglos-en-csharp.phphttp://www.google.com/search?q=new+msdn.microsoft.com
8/16/2019 C#_Arreglos Estructura de Datos
9/23
B0
B0 Console0Wre(/ -
B0
B0
La sal&a &el 4rogra!a aneror esKCODE: SELECCIONAR ODO
B0 B H J
0 B H J B/
Para a%%e&er a los 8alores &e arreglos !as %o!4le2os 4o&e!os )l9arsenen%as 1orea%5 an&a&os0
Acceso a los miembros de un array
!e accede a los elementos de un array de manera similar a como se "ace en & y &.Por ejemplo, para acceder al quinto elemento del array y asi%narle -:
int[] unArray = )10+ 8+ 9+ :+ + + + 3+ 2+ 1+ 0,;unArray[] = 2:;
El si%uiente códi%o declara un array multidimensional y asi%na 2: al elemento
localizado en [1+ 1]:int[+] otroArray = ) )1+ 2,+ )3+ ,+ )+ ,+ ):+ 9,+ )8+ 10, ,;
otroArray[1+ 1] = 2:;
&on los arrays de arrays el acceso es como si%ue:int[][] tercerArray = new int[][]
)
new int[] )1+ 2,+
new int[] )3+ ,
,;
tercerArray[1][1] = ;
&' permite dos tipos de array multidimensionales: los arrays rectangulares y los arraysdentados./n array bidimensional rectangular es aquel en el cual todas sus ilas tienen
el mismo número de columnas. Los arrays que anteriormente se "an mostrado
como ejemplos, son rectan%ulares. En %eneral son sencillos de declarar,
inicializar y manejar. ( continuación se declara un array de string
bidimensional de cuatro ilas y dos columnas:
http://www.latindevelopers.com/articulos/csharp/arreglos-en-csharp.phphttp://www.latindevelopers.com/articulos/csharp/arreglos-en-csharp.php
8/16/2019 C#_Arreglos Estructura de Datos
10/23
string [+] misNom(res=) )*%or&a#+#ultidimensional
string[+] otroArray = new string[+];!onsole.Driteine4Ea longitud de otroArray es )0,E+
otroArray.engt5;
// Array de arrays
(yte[][] arrayeArrays = new (yte[][];
!onsole.Driteine4Ea longitud de arrayeArrays es )0,E+
arrayeArrays.engt5;
// crea un array de arrays
for 4int i = 0; i B arrayeArrays.engt; iCC5
)
8/16/2019 C#_Arreglos Estructura de Datos
11/23
arrayeArrays[i] = new (yte[iC3];
,
for 4int i = 0; i B arrayeArrays.engt; iCC5
)
!onsole.Driteine4Ea longitud de )0, es )1,E+ i+
arrayeArrays[i].engt5;
,
,,
La salida que se obtiene al ejecutar este pro%rama es:
a longitud de unArray es
a longitud de otroArray es 20
a longitud de arrayeArrays es
a longitud de 0 es 3
a longitud de 1 es
a longitud de 2 es
a longitud de 3 es
a longitud de es :
Usando foreach en Arrays!e puede )cilmente recorrer un array con la sentencia foreac. Esta sentencia
proporciona una manera ele%ante y sencilla de 0recorrer1 los distintos elementos de un
array. !e utiliza para recorrer m)s )cilmente la colección o el array pero no debería
utilizarse para cambiar los contenidos de la colección o array porque puede tener eectoscolaterales no deseados. Por ejemplo, el si%uiente códi%o crea un array llamado
unArray :using ystem;
class 6ecorriendoArrays
)pu(lic static 7oid >ain45
)
int[] unArray = )+ + + -1+ 0,;
foreac 4int i in unArray5
)
ystem.!onsole.Driteine4i5;
,
,
,
La salida de este códi%o es:
-1
0
El si%uiente pro%rama recorre un array y describe cada uno de sus elementos como par o
impar.using ystem;
class 6ecorriendoArrays
)
8/16/2019 C#_Arreglos Estructura de Datos
12/23
pu(lic static 7oid >ain45
)
int[] unArray = )+ + + -1+ 2:,;
int par=0;
int impar=0;
string dos=EparE;
string uno=EimparE;
foreac4int i in unArray5)
!onsole.Driteine4i5;
if4iF2==05
)
parCC;
!onsole.Driteine4E$l elemento )0, es )1,E+i+dos5;
,
else
)
imparCC;
!onsole.Driteine4E$l elemento )0, es )1,E+i+uno5;
,
,
!onsole.Driteine4EGay )0, pares y )1, imparesE +par+ impar5;
,
,
,
La salida de este pro%rama es:
$l elemento es par
$l elemento es impar
$l elemento es par
-1$l elemento -1 es impar
2:
$l elemento 2: es impar
Gay dos pares y 3 impares
8/16/2019 C#_Arreglos Estructura de Datos
13/23
Colecciones
Introducción(nteriormente se "a estudiado cómo utilizar los arrays para reerenciar unconjunto de objetos o de variables. Es evidente, sin embar%o que los arrays tienen
al%unas limitaciones. La mayor de ella es que una vez que el pro%ramador "a creado el
array, su tama2o no se puede cambiar porque es ijo, constante. El problema se presentacuando se pretende a2adir nuevos elementos al array, sin crear uno nuevo.
En %eneral, se puede decir que una colección se utiliza para trabajar con listas o
conjuntos ordenados de objetos y proporciona una uncionalidad mayor que la de unsimple array. Esta uncionalidad proviene de la implementación de una serie de
interaces del namespace ystem.!ollections. Este namespace tambi$n contiene
clases que implementan estos interaces y acilitan enormemente la tarea del pro%ramador.
Las colecciones proporcionan m$todos b)sicos para acceder a los elementos de
la colección utilizando corc"etes, de manera id$ntica a como se accede a los elementos
de un array.
&' proporciona una serie de clases e interaces que est)n contenidas en elnamespace ystem.!ollections, que nos permite trabajar conjuntos de datos o
colecciones, de manera muy sencilla.
Los interaces que proporcionan uncionalidad a las colecciones, son los
si%uientes:X H$numera(le: Proporciona la capacidad para 0recorrer1 una colección a trav$s de suselementos, por medio de una sentencia foreac.
X H!ollection: 3ereda de H$numera(le. Proporciona la capacidad para obtener elnúmero de elementos de la colección y de copiar elementos a un simple array.oHist: 3ereda de H$numera(le y de H!ollection. Proporciona una lista de los
elementos de la colección con las capacidades de los interaces anteriormente citados y
al%unas otras capacidades b)sicas.X Hictionary: 3ereda de H$numera(le y de H!ollection. Proporciona una lista deelementos de la colección accesibles a trav$s de un valor en lu%ar de un índice.
Los arrays, en &' son objetos de la clase ystem.Array que es un tipo de colección. La
clase ystem.Array "ereda de Hist, H!ollection e H$numera(le pero no
proporciona al%unas uncionalidades avanzadas de Hist. 4epresenta una lista de
elementos con un tama2o ijo. El pro%ramador puede tambi$n crear sus propiascolecciones especíicas.
La clase ArrayList
/na de las clases m)s importantes que proporciona el namespace
ystems.!ollections se denomina ystem.!ollections.Arrayist, que implementa
las interaces Hist, H!ollection e H$numera(le.
Este tipo puede utilizarse para representar una lista de elementos con un tama2ovariable, es decir es un array cuyo tama2o puede cambiar din)micamente cuando sea
8/16/2019 C#_Arreglos Estructura de Datos
14/23
necesario. Proporciona un determinado número de m$todos y propiedades para
manipular sus elementos.(l%unos de los m)s importantes son los si%uientes:
Adapter4 5 5$todo est)tico que crea un Arrayist para un objeto que
implementa Hist.
!apacity 6etermina o lee el número de elementos del Arrayist.!ount El número actual de elementos del Arrayist.
Htem4 5 7btiene o ija el elemento correspondiente a su índice
determinado.
Add4 5 (2ade elementos al Arrayist.
Add6auge 4 5 Permite a2adir los elementos de una H!ollection al inal
del Arrayist.
!lear 4 5 Elimina todos los elementos del Arrayist.
!ontains 4 5 6etermina si un elemento est) en la Arrayist.
Hnde? If 4 5 6evuelve el índice de un determinado elemento.
Hnsert 4 5 8nserta un elemento en un Arrayist.
Hnsert6ange4 5 8nserta elementos de una colección en un Arrayist.
6emo7e Elimina un determinado elemento.
6emo7eAt Elimina un determinado elemento accediendo a $l a trav$s de
su índice.ort4 5 7rdena un Arrayist.
@oArray4 5 &opia los elementos del Arrayist a un array.
El si%uiente ejemplo ilustra bien la dierencia entre un Array y un Arrayist puede
ser J
&onsidere la clase Animal almacenada en el ic"ero Animal.cs con el si%uiente códi%o:using ystem;
namespace !onsoleApplication2)
pu(lic class Animal
)
protected string nom(re;
pu(lic Animal4string unNom(re5
)
nom(re=unNom(re;
,
pu(lic string Nom(re
)
get
)
return nom(re;
,
set
)
nom(re=7alue;
,
,
pu(lic 7oid !omer45
)
8/16/2019 C#_Arreglos Estructura de Datos
15/23
!onsole.Driteine4E el animal )0, a comidoE+nom(re5;
,
,
,
( continuación, modiique el códi%o en el m$todo >ain45 por el si%uiente:using ystem;
namespace !onsoleApplication2
)
class >iAplicacion
)
static 7oid >ain4string[] args5
)
!onsole.Driteine4EKKKK$&emplo de ArrayKKKKE5;
//e define un array de dos elementos de la clase Animal
Animal[] arrayAnimal = new Animal[2];
Animal gato=new Animal 4E>imosoE5;
arrayAnimal[0]=gato;
arrayAnimal[1]=new Animal4EAndra&osoE5;// se recorre el array por medio de la sentencia foreac
!onsole.Driteine4ELn6ecorremos el array con
foreacE5;
foreac4Animal an in arrayAnimal5
!onsole.Driteine4an.Nom(re5;
// se recorre el array por medio de la sentencia for
!onsole.Driteine4ELn6ecorremos el array con una
sentencia forE5;
for 4int i=0;iBarrayAnimal.engt;iCC5
!onsole.Driteine4arrayAnimal[i].Nom(re5;
!onsole.Driteine4E$l nMmero de elementos del array es
)0,E+arrayAnimal.engt5;
,
,,
Animal gato=new Animal 4E>imosoE5;
arrayAnimal[0]=gato;
arrayAnimal[1]=new Animal4EAndra&osoE5;
// se recorre el array por medio de la sentencia foreac
!onsole.Driteine4ELn6ecorremos el array con
foreacE5;
foreac4Animal an in arrayAnimal5
!onsole.Driteine4an.Nom(re5;
// se recorre el array por medio de la sentencia for
!onsole.Driteine4ELn6ecorremos el array con una
sentencia forE5;
for 4int i=0;iBarrayAnimal.engt;iCC5
!onsole.Driteine4arrayAnimal[i].Nom(re5;
!onsole.Driteine4E$l nMmero de elementos del array es
)0,E+arrayAnimal.engt5;
,
,
,
8/16/2019 C#_Arreglos Estructura de Datos
16/23
!onsole.Driteine4E$l arraylilst tiene aora )0, elementosE+
listaArrayAnimales.!ount5;
//uede utiliarse unArrayist como un Array
//os elementos de un Arrayist son o(&etos+y es necesario
//con7ertirlos a o(&etos de la clase Animal al utiliarlo como array
!onsole.Driteine4ELn6ecorremos la coleccion con una sentencia forE5;for4int i=0;iBlistaArrayAnimales.!ount;iCC5
!onsole.Driteine4ENom(reJ )0, E+
44Animal5listaArrayAnimales[i]5.Nom(re5;
!onsole.Driteine4ELn6ecorremos la coleccion con una sentencia
foreacE5;
//AOu no es necesaria la con7ersi"n
foreac4Animal an in listaArrayAnimales5
!onsole.Driteine4an.Nom(re5;
//Pn Arrayist puede cam(iar de tamaQo
!onsole.Driteine4ELnKKKKK$&emplo de cam(io de tamaQo en el
ArrayistKKKE5;
!onsole.Driteine4EAQadimos aora array creado al comienoE5;
listaArrayAnimales.Add6ange4arrayAnimal5;
!onsole.Driteine4E$l arraylilst tiene aora )0, elementosE+
listaArrayAnimales.!ount5;
!onsole.Driteine4ELn6ecorremos el array con una sentencia forE5;
for4int i=0;iBlistaArrayAnimales.!ount;iCC5
!onsole.Driteine4ENom(reJ )0, E+
44Animal5listaArrayAnimales[i]5.Nom(re5;
!onsole.Driteine4ELn6ecorremos el array con una sentencia foreacE5;
foreac4Animal an in listaArrayAnimales5
!onsole.Driteine4an.Nom(re5;
En el anterior ejemplo se "an creado dos colecciones de objetos: el primero utiliza la
clase ystem.Array 9que de "ec"o es una colección+, y el se%undo utiliza la claseystem.!ollections.Arrayist. (mbas colecciones tienen objetos de la clase
Animal que est) deinida en el ic"ero Animal.cs. 4especto a la manipulación del
array, probablemente el lector encontrar) pocas diicultades para su comprensión. !in
embar%o, es importante se2alar aquí que cuando se crea un array se especiica un
tama2o, que ser) ijo y constante a lo lar%o del pro%rama:Animal[] arrayAnimal = new Animal[2];
&uando se crea un objeto de la clase Arrayist, no se deine nin%ún tama2o. Para crear
la colección, simplemente se utiliza el códi%o si%uiente:Arrayist listaArrayAnimales = new Arrayist45;
Existen otros dos constructores de esta clase. El primero de ellos, utiliza como
par)metro una colección y el otro, especiica la capacidad 9la propiedad capacity+ onúmero de elementos inicial de la colección y se pasa como par)metro entero.
8nicialmente, la colección Arrayist no tiene nin%ún elemento. *o se puede a2adir
objetos a trav$s del índice, como en los arrays. Para ello, se utiliza el m$todo Add45
como se ve en el ejemplo:
listaArrayAnimales.Add4new Animal4EericoE55;
listaArrayAnimales.Add4new Animal4EAnOuilosadoE55;
8/16/2019 C#_Arreglos Estructura de Datos
17/23
Animal pantera=new Animal4E>ougliE5;
listaArrayAnimales.Add 4pantera5;
/na vez que se "a a2adido un elemento, se puede modiicar como si uera un array,
aunque no se "a "ec"o anteriormente. Por ejemplo:listaArrayAnimales[0]=new Animal4EepeE5;
!e puede recorrer, por medio de una sentencia foreac+ tanto un array como un
Arrayist porque ambos implementan la interace H$numera(le:foreac4Animal an in arrayAnimal5
!onsole.Driteine4an.Nom(re5;
foreac4Animal an in listaArrayAnimales5
!onsole.Driteine4an.Nom(re5;
!e puede acceder al número de elemento o tama2o de un array por medio de la
propiedad engt:!onsole.Driteine4E$l nMmero de elementos del array es )0,E+
arrayAnimal.engt5;
al tama2o de una colección Arrayist por medio de la propiedad !ount, %racias a
que esta clase implementa la interace H!ollection:!onsole.Driteine4E$l arraylist tiene aora )0, elementosE+
listaArrayAnimales.!ount5;La dierencia m)s importante es que un array est) uertemente tipado, y permite acceder
a sus elementos directamente:!onsole.Driteine4arrayAnimal[i].Nom(re5;
&uando se accede a los elementos por medio del índice debe realizarse una conversiónde tipos:!onsole.Driteine4ENom(reJ )0, E+
44Animal5listaArrayAnimales[i]5.Nom(re5;
;inalmente, pueden eliminarse objetos de una colección por medio de los m$todos
6emo7e4o(&ect unI(&eto5 o 6emo7eAt4int indice5.
Por ejemplo, si se pretende eliminar el elementogato
y el primer elemento de lacolección, "an de a2adirse estas líneas al inal del códi%o del m$todo >ain45:listaArrayAnimales.6emo7e4gato5;
listaArrayAnimales.6emo7eAt405;
!onsole.Driteine4E$l arraylist tiene aora )0, elementosE+
listaArrayAnimales.!ount5;
(dem)s puede obtenerse el índice de un determinado elemento por medio del m$todoHnde?If45, por ejemplo:!onsole.Driteine4listaArrayAnimales.Hnde?If4gato55;
!i no existe el elemento en la colección, este m$todo devuelve R1.
(dem)s, puede a2adirse una colección a un objeto de la clase Arrayist, por medio
del m$todo Add6ange45, al que se le pasa la colección como par)metro. 6ic"acolección puede ser tambi$n un array, que es una colección tambi$n. Por ejemplo, en la
si%uiente línea se a2ade el array arrayAnimal al Arrayist:listaArrayAnimales.Add6ange4arrayAnimal5;
Las colecciones son imprescindibles para trabajar con al%unos controles como ist%o?,
!om(o%o?, etc, y su conocimiento reduce enormemente el esuerzo de la pro%ramación
de este tipo de controles.
8/16/2019 C#_Arreglos Estructura de Datos
18/23
8/16/2019 C#_Arreglos Estructura de Datos
19/23
LICENCIAURA EN CIENCIAS DE LACO,"UACIN CICLO I
./01"RO2RA,ACIN DE SISE,AS
"R3CICA 4& 5ECORES 6 ,ARICES FEC?A
NOMREK ++
1. Introducción.
Los vectores y matrices son uno de los medios principales para el almacenamiento de los
datos en un pro%rama. En esta pr)ctica veremos todos los conceptos relativos a la &reación
y manejo en &' de vectores, matrices y cadenas de caracteres.
2. Conceptos nuevos.
Los conceptos nuevos introducidos son:
= 6einición y manejo de cadenas de caracteres.
?= @úsqueda de un elemento dentro de un vector.A= @úsqueda de un elemento dentro de una tabla.
3. Lenguaje C.
Las nuevas características de &' que "a aprendido y que necesita saber para la realización
de la pr)ctica son:
= 6einición y uncionamiento de cadenas de caracteres.
!. Entorno "evC.
La única uncionalidad nueva de 6ev&' necesaria para esta pr)ctica es saber cómo
visualizar un vector en la ventana de depuración.
#. $%s&ueda en vectores y matrices.
&omo ya "emos comentado inicialmente, los vectores y matrices son uno de los medios
principales mediante los cuales se almacenan los datos en un pro%rama &. 6ebido a esta
causa, existen operaciones undamentales cuyo tratamiento es imprescindible conocer.Estas operaciones esenciales son la búsqueda de elementos y la ordenación. En este cursosólo se abordar) la primera de ellas.
Beremos cómo realizar una búsqueda en un vector y cómo realizar una búsqueda en una
matriz.
#.1. $%s&ueda en un vector.
8/16/2019 C#_Arreglos Estructura de Datos
20/23
La búsqueda de un elemento dentro de un vector se basa en ir recorriendo secuencialmente
el vector, de una posición a la si%uiente, comenzando en la primera posición del vector ydeteni$ndose únicamente cuando se encuentra el elemento buscado o bien cuando se
alcanza el inal del vector.
El pseudocódi%o asociado a lo anteriormente expuesto sería el si%uiente:
Inicio
encontrado = 0
indice = 0mientras (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 posición” indice sino
Escribir “Elemento no encontrado”Fin
7bservando el pseudocódi%o anterior vemos que se utiliza una variable entera encontradoque indica si el elemento se encontró en la búsqueda. La variable encontrado se inicializa a
C Dalso= y se activa a < Dverdadero= cuando se encuentra el elemento buscado. !e utiliza un
operador and Den & =, que permite evaluar las dos condiciones de terminación de la
búsqueda: que el elemento se "aya encontrado o que no "aya m)s elementos Dcuando elíndice del vector excede al último valor v)lido del mismo=. &uando el bucle se termina, el
elemento o bien se "a encontrado o bien no se "a encontrado. !i el elemento se "a
encontrado, el valor de la variable encontrado ser) < y el valor de la variable indice ser) la posición del vector donde se encuentra el elemento buscado. Por el contrario, si el elemento
no se "a encontrado el valor de la variable encontrado ser) C.
#.2. $%s&ueda en una matri'.
/tilizando un razonamiento an)lo%o al expuesto en la sección anterior, la búsqueda de un
elemento dentro de una matriz se basa en ir recorriendo secuencialmente la matriz.La única dierencia con el caso anterior es que a"ora "ay que recorrer ilas y columnas
comenzando en la primera ila y primera columna del vector y deteni$ndose únicamente
cuando se encuentra el elemento buscado o bien cuando se alcanza la última ila y la últimacolumna.
El pseudocódi%o asociado a una búsqueda en una matriz bidimensional, sería el si%uiente:
Inicio
encontrado = 0
8/16/2019 C#_Arreglos Estructura de Datos
21/23
indice_!ila = 0mientras (encontrado == 0) y (indice_!ila < ultima_!ila) hacer
indice_columna = 0 mientras (encontrado == 0) y (indice_columna < ultima_columna) hacer si (Vector[indice_!ila" indice_columna] == elemento_buscado) entonces
encontrado = 1 sino
incrementar indice_columna fin_mientras
si (encontrado == 0)
incrementar indice_!ila fin_mientras
si (encontrado==1) entonces
Escribir “Elemento encontrado en posición” indice_!ila “"” indice_columna
sino
Escribir “Elemento no encontradoFin
La única dierencia con el códi%o visto en la sección anterior es que en este caso son
necesarios dos bucles anidados, uno para recorrer las ilas y otro para recorrer las columnas.
(. Ejercicios propuestos.
( continuación se propone el enunciado de una serie de ejercicios &ue el alumno tiene &ue
reali'ar antes de asistir a la sesión de pr)cticas , con el in de presentar las dudas que
"ayan aparecido en la realización de los mismos durante la sesión de pr)cticas.
8/16/2019 C#_Arreglos Estructura de Datos
22/23
A= Escribir un pro%rama que lea un matriz de enteros de - ilas y ? columnas y muestre por
pantalla la traspuesta a dic"a matriz. Ejemplo:Entrada: - > ? A !alida -
A ? >
? A
A ?
= Escribir un pro%rama que lea una matriz de números enteros y que devuelva la suma de
los elementos positivos de la matriz y la suma de los elementos ne%ativos.
= Escribir un pro%rama que lea una matriz de enteros de ? ilas y ? columnas y a
continuación intercambie la ila i con la ila #, siendo i y # dos valores introducidos por teclado.
F= Escribir un pro%rama que lea una matriz de ? ilas y > columnas, la visualice por pantalla
y a continuación encuentre el mayor y el menor elemento de la matriz y sus posiciones.
G= Escribir un pro%rama que lea una rase y determine la recuencia de aparición de cada
vocal con respecto al total de caracteres de la rase.
8/16/2019 C#_Arreglos Estructura de Datos
23/23
x > es una matriz > x > ormada por números del < al G donde lasuma de sus ilas, sus columnas y sus dia%onales son id$nticas. &rear un pro%rama que
permita introducir un cuadrado por teclado y determine si este cuadrado es m)%ico o no. El
pro%rama deber) comprobar que los números introducidos son correctos, es decir, est)n
entre el < y el G.