arreglo s

10

Click here to load reader

Upload: luis-antonio-diaz-rosales

Post on 23-Nov-2015

10 views

Category:

Documents


1 download

TRANSCRIPT

  • UNIDAD II: ARREGLOS.

    ARREGLOS UNIDIMENSIONALES Y MULTIDIMENSIONALES

    Objetivo El estudiante conocer la representacin interna de los arreglos unidimensionales. As

    mismo, ser capaz de aplicarlos al construir modelos y desarrollar aplicaciones de software que

    requieran de estos.

    Unidimensional.

    Multidimensional.

    ARREGLOS UNIDIMENSIONALES LISTAS (VECTORES) Un array almacena muchos elementos del mismo tipo, tales como veinte enteros, cincuenta nmeros

    de cmo flotante o quince caracteres. Los arrays pueden ser de una dimensin y son los ms

    utilizados, de dos dimensiones, tablas o matrices, tambin de tres o ms dimensiones. El array es

    muy importante por diversas razones. Una muy importante es que permite almacenar secuencias o

    cadenas de texto; por su importancia, Java proporciona la clase String, que representa a una

    secuencia de caracteres y las operaciones con cadenas ms comunes.

    Conceptos bsicos

    Un array (lista o tabla) es una secuencia de datos del mismo tipo. Los datos se llaman elementos del

    array y se numeran consecutivamente 0, 1, 2, 3 El tipo de elemento almacenado en el array puede ser cualquier tipo de dato simple de Java, o de tipo previamente declarado. Normalmente el array se

    utiliza para almacenar tipos tales como char, int o flotante.

    Un array puede contener, por ejemplo la edad de los alumnos de una clase, las temperaturas de cada

    da de un mes en una ciudad determinada, o el nmero de personas que residen en cada uno de los

    municipios de la ciudad de Misantla, cada item sedenomina elemento. Los elementos de un array,

    como ya se ha comentado del 0, 1, 2, 3 Estos nmeros se denominan valores ndices o subndices del array. Estos nmeros localizan la posicin del elemento dentro del array, proporcionando acceso

    directo al array.

    Si el nombre del array es ciudad, entonces ciudad[0] es el elemento que est en la posicin 0,

    ciudad[1] es el elemento que est en la posicin 1, etc. En general, el elemento i-simo est en la

    posicin i-1. De modo que si el array tiene n elementos, sus nombres son ciudad[0], ciudad[1],. ciudad[n-1]. Grficamente se representa as el array ciudad con seis elementos.

    - Vectores paralelos

    Este concepto se da cuando hay una relacin entre las componentes de igual subndice (misma

    posicin) de un vector y otro.

  • Si tenemos dos vectores de 5 elementos cada uno. En uno se almacenan los nombres de personas en

    el otro las edades de dichas personas. Decimos que el vector nombres es paralelo al vector edades si

    en la componente 0 de cada vector se almacena informacin relacionada a una persona (Juan 12 aos). Es decir hay una relacin entre cada componente de los dos vectores. Esta relacin la conoce

    nicamente el programador y se hace para facilitar el desarrollo de algoritmos que procesen los

    datos almacenados en las estructuras de datos.

    Ejemplo: Desarrollar un programa que permita cargar 5 nombres de personas y sus edades

    respectivas. Luego de realizar la carga por teclado de todos los datos imprimir los nombres de las

    personas mayores de edad (mayores o iguales a 18 aos)

    Programa:

    import java.util.Scanner;

    public class PruebaVector10 {

    private Scanner teclado;

    private String[] nombres;

    private int[] edades;

    public void cargar() {

    teclado=new Scanner(System.in);

    nombres=new String[5];

    edades=new int[5];

    for(int f=0;f

  • - Vectores (mayor y menor elemento)

    Es una actividad comn la bsqueda del mayor y menor elemento de un vector, lo mismo que su

    posicin. El mayor elemento es el 820 y se encuentra en la posicin n 2.

    Ejemplo: Crea un programa que permita cargar los nombres de 5 operarios y sus sueldos

    respectivos. Mostrar el sueldo mayor y el nombre del operario.

    Programa:

    import java.util.Scanner;

    public class PruebaVector11 {

    private Scanner teclado;

    private String[] nombres;

    private float[] sueldos;

    public void cargar() {

    teclado=new Scanner(System.in);

    nombres=new String[5];

    sueldos=new float[5];

    for(int f=0;f

  • - Vectores (ordenamiento)

    El ordenamiento de un vector se logra intercambiando las componentes de manera que: vec[0]

  • Analizando el algoritmo podemos comprobar que el elemento mayor del vector se ubica ahora en el

    ltimo lugar. Podemos definir otros vectores con distintos valores y comprobar que siempre el

    elemento mayor queda al final. Pero todava con este algoritmo no se ordena un vector. Solamente

    est ordenado el ltimo elemento del vector. Ahora bien, con los 4 elementos que nos quedan

    podemos hacer el mismo proceso visto anteriormente, con lo cual quedar ordenado otro elemento

    del vector. Este proceso lo repetiremos hasta que quede ordenado por completo el vector. Como

    debemos repetir el mismo algoritmo podemos englobar todo el bloque en otra estructura repetitiva.

    Realicemos una prueba del siguiente algoritmo:

    Cuando k = 0

    f = 0 f = 1 f = 2 f = 3

    750 750 750 750

    1200 820 820 820

    820 1200 550 550

    550 550 1200 490

    490 490 490 1200

    Cuando k = 1

    f = 0 f = 1 f = 2 f = 3

    750 750 750 750

    820 550 550 550

    550 820 490 490

    490 490 820 820

    1200 1200 1200 1200

    Cuando k = 2

    f = 0 f = 1 f = 2 f = 3

    550 550 550 550

    750 490 490 490

    490 750 750 750

    820 820 820 820

    1200 1200 1200 1200

    Cuando k = 3

    f = 0 f = 1 f = 2 f = 3

    490 490 490 490

    550 550 550 550

    750 750 750 750

    820 820 820 820

    1200 1200 1200 1200

    Porque repetimos 4 veces el for externo? Como sabemos cada vez que se repite en forma completa

    el for interno queda ordenada una componente del vector. A primera vista diramos que deberamos

    repetir el for externo la cantidad de componentes del vector, en este ejemplo el vector sueldos tiene

    5 componentes. Si observamos, cuando quedan dos elementos por ordenar, al ordenar uno de ellos

    queda el otro automticamente ordenado (podemos imaginar que si tenemos un vector con 2

    elementos no se requiere el for externo, porque este debera repetirse una nica vez). Una ltima

    consideracin a este ALGORITMO de ordenamiento es que los elementos que se van ordenando

    continuamos comparndolos.

  • Ejemplo: En la primera ejecucin del for interno el valor 1200 queda ubicado en la posicin 4 del

    vector. En la segunda ejecucin comparamos si el 820 es mayor a 1200, lo cual seguramente ser

    falso. Podemos concluir que la primera vez debemos hacer para este ejemplo 4 comparaciones, en

    la segunda ejecucin del for interno debemos hacer 3 comparaciones y en general debemos ir

    reduciendo en uno la cantidad de comparaciones. Si bien el algoritmo planteado funciona, un

    algoritmo ms eficiente, que se deriva del anterior es el plantear un for interno con la siguiente

    estructura: (f=0 ; f

  • Ejemplo: Definir un vector donde almacenar los nombres de 5 paises. Confeccionar el algoritmo de

    ordenamiento alfabtico.

    Programa:

    import java.util.Scanner;

    public class PruebaVector14 {

    private Scanner teclado;

    private String[] paises;

    public void cargar() {

    teclado=new Scanner(System.in);

    paises=new String[5];

    for(int f=0;f

  • - Vectores (ordenamiento con vectores paralelos)

    Cuando se tienen vectores paralelos y se ordena uno de ellos hay que tener la precaucin de

    intercambiar los elementos de los vectores paralelos.

    Ejemplo: Crea un programa que permita cargar los nombres de 5 alumnos y sus notas respectivas.

    Luego ordenar las notas de mayor a menor. Imprimir las notas y los nombres de los alumnos.

    Programa:

    import java.util.Scanner;

    public class PruebaVector16 {

    private Scanner teclado;

    private String[] nombres;

    private int[] notas;

    public void cargar() {

    teclado=new Scanner(System.in);

    nombres=new String[5];

    notas=new int[5];

    System.out.println("Carga de nombres y notas");

    for(int f=0;f

  • }

    public static void main(String[] ar) {

    PruebaVector16 pv=new PruebaVector16();

    pv.cargar();

    pv.ordenar();

    pv.imprimir();

    }

    }

    ARREGLOS MULTIDIMENSIONALES Los arrays vistos anteriormente se conocen como arrays unidimensionales (una sola dimensin) y se

    caracterizan por tener un solo subndice. Estos arrays se conocen tambin por el trmino listas. Los

    arrays multidimensionales son aquellos que tienen ms de una dimensin y, en consecuencia, ms

    de un ndice. Los arrays ms usuales son los de dos dimensiones, conocidos tambin por el nombre

    de tablas o matrices. Sin embargo, es posible crear arrays de tantas dimensiones como requieran sus

    aplicaciones, esto es, tres, cuatro o ms dimensiones.

    - Estructura de datos tipo matriz

    Una matriz es una estructura de datos que permite almacenar un CONJUNTO de datos del MISMO

    tipo. Con un nico nombre se define la matriz y por medio de DOS subndices hacemos referencia a

    cada elemento de la misma (componente)

    Hemos graficado una matriz de 3 filas y 5 columnas. Para hacer referencia a cada elemento

    debemos indicar primero la fila y luego la columna, por ejemplo en la componente 1,4 se almacena

    el valor 97. En este ejemplo almacenamos valores enteros. Todos los elementos de la matriz deben

    ser del mismo tipo (int, float, String etc.). Las filas y columnas comienzan a numerarse a partir de

    cero, similar a los vectores. Una matriz se la puede representar por un conjunto de vectores.

    Ejemplo: Crear una matriz de 3 filas por 5 columnas con elementos de tipo int, cargar sus

    componentes y luego imprimirlas.

    Programa:

    import java.util.Scanner;

    public class Matriz1 {

  • private Scanner teclado;

    private int[][] mat;

    public void cargar() {

    teclado=new Scanner(System.in);

    mat=new int[3][5];

    for(int f=0;f