Capítulo 2 “Subprogramas/Funciones - Arreglos”

30
Departamento de Informática Departamento de Informática Universidad Técnica Federico Santa María Universidad Técnica Federico Santa María Capítulo 2 Capítulo 2 “Subprogramas/Funciones - Arreglos” “Subprogramas/Funciones - Arreglos” Arreglos-Arrays.

description

Capítulo 2 “Subprogramas/Funciones - Arreglos”. Arreglos-Arrays. Arreglos - Arrays. Supongamos que tenemos 10 variables: a; b; c; d; e; f; g; h; i; j Si se desea manipular las variables debemos poner sus nombres cada vez que se requiera - PowerPoint PPT Presentation

Transcript of Capítulo 2 “Subprogramas/Funciones - Arreglos”

Page 1: Capítulo 2 “Subprogramas/Funciones - Arreglos”

Departamento de InformáticaDepartamento de InformáticaUniversidad Técnica Federico Santa MaríaUniversidad Técnica Federico Santa María

Capítulo 2Capítulo 2“Subprogramas/Funciones - “Subprogramas/Funciones -

Arreglos”Arreglos”

Arreglos-Arrays.

Page 2: Capítulo 2 “Subprogramas/Funciones - Arreglos”

Departamento de InformáticaDepartamento de InformáticaProgramación de Computadores IWI-131Programación de Computadores IWI-131

Arreglos - Arrays

• Supongamos que tenemos 10 variables:

a; b; c; d; e; f; g; h; i; j• Si se desea manipular las variables debemos

poner sus nombres cada vez que se requiera• Un enfoque más general es utilizar las

variables con el mismo nombre, pero diferenciándolas con un nuúmero

• Semejante a como los libros de matemáticas utilizan los vectores y las tuplas

a1; a2; a3; a4; a5; a6; a7; a8; a9; a10

Page 3: Capítulo 2 “Subprogramas/Funciones - Arreglos”

Departamento de InformáticaDepartamento de InformáticaProgramación de Computadores IWI-131Programación de Computadores IWI-131

Arreglos - Arrays

• Ahora sumar las variables, es mucho más fácil:

Page 4: Capítulo 2 “Subprogramas/Funciones - Arreglos”

Departamento de InformáticaDepartamento de InformáticaProgramación de Computadores IWI-131Programación de Computadores IWI-131

Arreglos - Arrays

• Suponga que se quieren leer 5000 enteros y hacer algún tipo de operación con ellos

• Con los contenidos que conocemos(¿?) hasta ahora necesitamos utilizar 5000 variables

• Problemas:– De comprensión en la codificación– De utilización de memoria

• La solución es utilizar ARREGLOS ó ARRAYS

Page 5: Capítulo 2 “Subprogramas/Funciones - Arreglos”

Departamento de InformáticaDepartamento de InformáticaProgramación de Computadores IWI-131Programación de Computadores IWI-131

Arreglos - Arrays

• Los arreglos son conjuntos de variables que comparten un mismo nombre, son capaces de almacenar una colección de datos del mismo tipo.

• Pueden ser referenciadas de manera individual con ayuda de uno o más índices

• Tenemos según su dimensionalidad:– Unidimensionales (Ej. Vector Matemático)– Bidimensionales (Ej. Matriz)– Tridimensional (Ej. Cubo)– Multidimensionales

Page 6: Capítulo 2 “Subprogramas/Funciones - Arreglos”

Departamento de InformáticaDepartamento de InformáticaProgramación de Computadores IWI-131Programación de Computadores IWI-131

EjemplosEjemplos

UNIDIMENSIONAL

BIDIMENSIONAL

TRIDIMENSIONAL

Page 7: Capítulo 2 “Subprogramas/Funciones - Arreglos”

Departamento de InformáticaDepartamento de InformáticaProgramación de Computadores IWI-131Programación de Computadores IWI-131

EjemplosEjemplos

// Enteros tamaño

int[] unidimensional={2,0,0,7};

//Arreglo bidimensional de enteros

int[][] bidimensional={ {0,0,0},{1,1,1}};

Page 8: Capítulo 2 “Subprogramas/Funciones - Arreglos”

Departamento de InformáticaDepartamento de InformáticaProgramación de Computadores IWI-131Programación de Computadores IWI-131

Arreglos - Arrays

• Como las variables, al utilizar un arreglo primero que se debe hacer es declararlo.

• Al igual que otras variables, la declaración de un arreglo tiene dos componentes primarios: tipoArreglo[] nombre;

• Un tipo de arreglo incluye el tipo de dato de los elementos que va contener el arreglo.

88

Page 9: Capítulo 2 “Subprogramas/Funciones - Arreglos”

Departamento de InformáticaDepartamento de InformáticaProgramación de Computadores IWI-131Programación de Computadores IWI-131

Arreglos - Arrays

• Por ejemplo, el tipo de dato para un arreglo que sólo va a contener elementos enteros es un arreglo de enteros.

int[] arrayDeEnteros;

99

Page 10: Capítulo 2 “Subprogramas/Funciones - Arreglos”

Departamento de InformáticaDepartamento de InformáticaProgramación de Computadores IWI-131Programación de Computadores IWI-131

Arreglos - Arrays

int[] arrayDeEnteros;

• La parte int de la declaración indica que arrayDeEnteros es un arreglo de enteros.

• []: indica que su dimensionalidad es uno

• La declaración NO ha asignado memoria para contener los elementos del arreglo.

1010

Page 11: Capítulo 2 “Subprogramas/Funciones - Arreglos”

Departamento de InformáticaDepartamento de InformáticaProgramación de Computadores IWI-131Programación de Computadores IWI-131

Arreglos - Arrays

• Para asignar memoria se utiliza el operador new.

• La siguiente sentencia asigna la suficiente memoria para que arrayDeEnteros pueda contener diez enteros.

int[] arrayDeEnteros = new int[10];

1111

Page 12: Capítulo 2 “Subprogramas/Funciones - Arreglos”

Departamento de InformáticaDepartamento de InformáticaProgramación de Computadores IWI-131Programación de Computadores IWI-131

Arreglos - Arrays

• En general, cuando se crea un arreglo, se utiliza el operador new, más el tipo de dato de los elementos del arreglo, más el número de elementos deseados encerrado entre corchetes cuadrados ('[' y ']').

TipoElemento[] nombreArray = new TipoElementos[tamano];

1212

Page 13: Capítulo 2 “Subprogramas/Funciones - Arreglos”

Departamento de InformáticaDepartamento de InformáticaProgramación de Computadores IWI-131Programación de Computadores IWI-131

Arreglos - Arrays

• Ahora que se ha asignado memoria para un arreglo ya se pueden asignar valores a los elementos y recuperar esos valores.

for (int j = 0; j < arrayDeEnteros.length; j++) {

arrayDeEnteros[j] = j;

StdOut.println("[j] = " + arrayDeEnteros[j]);

}

1313

Page 14: Capítulo 2 “Subprogramas/Funciones - Arreglos”

Departamento de InformáticaDepartamento de InformáticaProgramación de Computadores IWI-131Programación de Computadores IWI-131

Arreglos - Arrays

• Como se puede ver en el ejemplo anterior, para referirse a un elemento del arreglo, se añade corchetes cuadrados al nombre del array.

• Entre los corchetes cuadrados se indica (bien con una variable o con una expresión) el índice del elemento al que se quiere acceder.

• El índice del array empieza en 0 y termina en la longitud del array menos uno.

1414

Page 15: Capítulo 2 “Subprogramas/Funciones - Arreglos”

Departamento de InformáticaDepartamento de InformáticaProgramación de Computadores IWI-131Programación de Computadores IWI-131

Accediendo los elementosAccediendo los elementos

• Un índice describe la posición de un elemento dentro de un arreglo. Recordar en Java el primer elemento tiene el índice cero!

Page 16: Capítulo 2 “Subprogramas/Funciones - Arreglos”

Departamento de InformáticaDepartamento de InformáticaProgramación de Computadores IWI-131Programación de Computadores IWI-131

Arreglos - Arrays

• Hay otro elemento interesante en el pequeño ejemplo anterior. – El bucle for itera sobre cada elemento de

arrayDeEnteros asignándole valores e imprimiendo esos valores.

– Se usa arrayDeEnteros.length para obtener el tamaño real del arreglo, length es una propiedad proporcionada para todos los arreglos de Java.

1616

Page 17: Capítulo 2 “Subprogramas/Funciones - Arreglos”

Departamento de InformáticaDepartamento de InformáticaProgramación de Computadores IWI-131Programación de Computadores IWI-131

EjemplosEjemplos

1.- Realizar un programa en el que se ingresen 10 enteros, y luego muestre la suma de ellos y su promedio

2.- Encontrar el máximo de una lista de 10 elementos

3.- Desarrolle un programa que calcule el promedio de las notas de un curso

Page 18: Capítulo 2 “Subprogramas/Funciones - Arreglos”

Departamento de InformáticaDepartamento de InformáticaProgramación de Computadores IWI-131Programación de Computadores IWI-131

Ejemplo notas alumno

• public class Notas• {• public static void main(String[]args)• {• int Nota[] = new int[7];• int i;• float suma=0;• for(i=0; i<7; i++)• do• {• StdOut.println("Ingrese la nota "+(i+1)+ " de su quiz");• Nota[i]=StdIn.readInt();• }• while(Nota[i]<=0);• for(i=0;i<7;i++)• suma = suma + Nota[i];• StdOut.println(suma);• StdOut.println("El promedio de sus quices es de "+ (float)(suma/7));• }• }

Page 19: Capítulo 2 “Subprogramas/Funciones - Arreglos”

Departamento de InformáticaDepartamento de InformáticaProgramación de Computadores IWI-131Programación de Computadores IWI-131

Arreglos Bidimensionales

• Un arreglo bidimensional es una lista de arreglos unidimensional

• Para declarar un arreglo bidimensional de enteros int [][] matriz = new int[3][4];

Page 20: Capítulo 2 “Subprogramas/Funciones - Arreglos”

Departamento de InformáticaDepartamento de InformáticaProgramación de Computadores IWI-131Programación de Computadores IWI-131

EjemploEjemplo

int fila=3,col=4;

for(fila=0;fila<3;fila++)

for(col=0;col<4;col++)

matriz[fila][col]=fila*col;

//más fácil

for(fila=0;fila<matriz.length;fila++)

for(col=0;col<matriz[0].length;col++)

StdOut.print(matriz[fila][col]);

Page 21: Capítulo 2 “Subprogramas/Funciones - Arreglos”

Departamento de InformáticaDepartamento de InformáticaProgramación de Computadores IWI-131Programación de Computadores IWI-131

Arreglos Bidimensionales

• Por ejemplo: Cada alumno tiene tres notas, una por cada certamen.

• Entonces las notas de un alumno pueden contenerse en un arreglo de tamaño tres,

• Ahora si queremos mantener las notas de un curso de 52 alumnos.

• Podemos mantener las notas en un arreglo de 52 arreglos de tamaño 3

Page 22: Capítulo 2 “Subprogramas/Funciones - Arreglos”

Departamento de InformáticaDepartamento de InformáticaProgramación de Computadores IWI-131Programación de Computadores IWI-131

Notas del curso

int alumnos=52; int notas=3; int curso[][] = new int[alumnos][notas]; int fila,col; for(fila=0;fila<alumnos;fila++) for(col=0;col<notas;col++) curso[fila][col]=StdIn.readInt();

• Con lo cual curso[10][2] representa la nota del tercer certamen del alumno identificado como 10 (que realmente será el 11 ingresado dado que el arreglo comienza en 0)

Page 23: Capítulo 2 “Subprogramas/Funciones - Arreglos”

Departamento de InformáticaDepartamento de InformáticaProgramación de Computadores IWI-131Programación de Computadores IWI-131

EjemploEjemplo

• Desarrolle un programa que reciba como entrada las notas de cada pregunta del certamen 1 de programación, para todos los alumnos, y muestre como salida un resumen con las notas finales de todos los alumnos

Page 24: Capítulo 2 “Subprogramas/Funciones - Arreglos”

Departamento de InformáticaDepartamento de InformáticaProgramación de Computadores IWI-131Programación de Computadores IWI-131

Ejemplo notas curso

• public class Curso• {• public static void main(String[] args)• {• int C[][] = new int[3][4];• int i, j, suma;• for(i=0; i<3;i++)• for(j=0;j<4;j++)• { • do• {• StdOut.println("Ingrese la nota "+(j+1)+" del curso "+(i+1));• C[i][j]=StdIn.readInt();• }while(C[i][j]<=0);• } • for(i=0; i<3;i++)• {• suma=0;• for(j=0;j<4;j++)• suma = suma + C[i][j];• StdOut.println("El promedio de notas del curso "+(i+1)+ " es de: "+ (suma/4));• }• }• }

Page 25: Capítulo 2 “Subprogramas/Funciones - Arreglos”

Departamento de InformáticaDepartamento de InformáticaProgramación de Computadores IWI-131Programación de Computadores IWI-131

MultidimensionalesMultidimensionales

• No existe un limite lógico definido para la cantidad de dimensiones que puede tener un arreglo, físico sí, la memoria reservada.

• Java permite arreglos con mas de dos dimensiones,La forma general de una declaración de arreglo es: tipo[][]…[] nombre_var;nombre_var= new tipo[tamaño1][tamaño2]…[tamañoN];

int a=3,b=4,c=5,i ,j ,k; int[][][] arr= new int[a][b][c]; for(i=0; i<a; i++) for(j=0; j<b; j++) for(k=0; k<c; k++) arr[i][j][k]=i+j+k;

Page 26: Capítulo 2 “Subprogramas/Funciones - Arreglos”

Departamento de InformáticaDepartamento de InformáticaProgramación de Computadores IWI-131Programación de Computadores IWI-131

Nota máxima, curso y alumno

• public class Nota_Max• {• public static void main(String[] args)• {• int a, b, i, j, max, posi, posj;• do• {• StdOut.println("Ingrese la cantidad de Cursos"); • a = StdIn.readInt();• }• while(a<=0);• do• {• StdOut.println("Ingrese la cantidad de Alumnos"); • b = StdIn.readInt();• }• while(a<=0);• int C[][] = new int[a][b];• for(i=0;i<a;i++)• {• for(j=0;j<b;j++)• {• do• {• StdOut.println("Ingrese la nota "+(j+1)+" del curso "+(i+1));• C[i][j]=StdIn.readInt();• }while((C[i][j]<=0)||(C[i][j]>100));• }• }• max=C[0][0];• posi=0;• posj=0;• for(i=0;i<a;i++)• for(j=0;j<b;j++)• {• if(max<=C[i][j])• {• max = C[i][j];• posi = i;• posj = j;• }• }• StdOut.println("La nota maxima fue de "+ max+" y la saco el alumno "+(posj+1)+" en el curso "+(posi+1)); • }• }

Page 27: Capítulo 2 “Subprogramas/Funciones - Arreglos”

Departamento de InformáticaDepartamento de InformáticaProgramación de Computadores IWI-131Programación de Computadores IWI-131

Ordenamiento BurbujaOrdenamiento Burbuja

• Existen numerosos algoritmos para ordenar. A continuación se verá Ordenamiento Burbuja (bublesort).• Idea: vamos comparando elementos adyacentes y

empujamos los valores más livianos hacia arriba (los más pesados van quedando abajo).

• Idea de la burbuja que asciende, por lo liviana que es.

Page 28: Capítulo 2 “Subprogramas/Funciones - Arreglos”

Departamento de InformáticaDepartamento de InformáticaProgramación de Computadores IWI-131Programación de Computadores IWI-131

Ordenamiento Burbuja CódigoOrdenamiento Burbuja Código

for (int i = 0; i < arreglo.length; i++) for (int j = 0; j < arreglo.length - 1;

j++) if (arreglo[j] > arreglo[j + 1]) {

aux = arreglo[j];arreglo[j] = arreglo[j +

1];arreglo[j + 1] = aux;

}

2828

Page 29: Capítulo 2 “Subprogramas/Funciones - Arreglos”

Departamento de InformáticaDepartamento de InformáticaProgramación de Computadores IWI-131Programación de Computadores IWI-131

Ordenamiento Burbuja AplicadoOrdenamiento Burbuja Aplicadoimport java.util.Random;

public class Burbuja {

public static void main(String args[]) {

Random numeroAleatorio = new Random();

int arreglo[] = new int[10];

// Generamos numeros

for (int i = 0; i < arreglo.length; i++) {

arreglo[i] = numeroAleatorio.nextInt(9) + 1;

System.out.print(arreglo[i]);

}

System.out.println();

// Los ordenamos con ordenamiento burbuja

int aux;

for (int i = 0; i < arreglo.length; i++) {

for (int j = 0; j < arreglo.length - 1; j++) {

if (arreglo[j] > arreglo[j + 1]) {

aux = arreglo[j];

arreglo[j] = arreglo[j + 1];

arreglo[j + 1] = aux;

}

}

}}

}

2929

Page 30: Capítulo 2 “Subprogramas/Funciones - Arreglos”

Departamento de InformáticaDepartamento de InformáticaUniversidad Técnica Federico Santa MaríaUniversidad Técnica Federico Santa María

FinFin

Preparando la revancha …