c#_arreglos estructura de datos

Upload: ferreroacix

Post on 05-Jul-2018

214 views

Category:

Documents


0 download

TRANSCRIPT

  • 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.