top of page

ARREGLOS Y MATRICES

Arreglos Bidimensionales

Un arreglos bidimensional esta compuesto, por un conjunto de elementos homogéneos y se puede acceder a los datos utilizando dos subíndices, este tipo de arreglo es también conocido como matriz.

Declaración

Un arreglo bidimensional se define así:

int arreglo[10][10];
float matriz[10][10];

también podemos utilizar constantes para definir la dimensión del arreglo de dos dimensiones:

const int N = 10;

int arreglo[N][N];

Inicialización

Una matriz o arreglo bidimensional se puede inicializar de este modo:

int matriz[3][3] = {{1,2,3},{4,5,6},{7,8,9}};

Con la anterior asignación se crea en memoria una matriz igual a la de abajo

 

 

     0    1    2

0   1    2    3

1   4    5    6

2   7    8    9

 

También podemos utilizar una estructura for dentro de otra estructura for para inicializar los valores de un arreglo de dos dimensiones como se muestra a continuación:

Ejemplo 8.1

Leer desde teclado una matriz de números enteros de dimensión 3x3.

 

#include <iostream.h>
void main()
{
const int TAM=3;
int matriz[TAM][TAM];
for( int i=0; i<TAM ; i++)
{
for( int j=0; j<TAM; j++)
{
cout<<”Ingrese el elemento [“<<i<<”,“<<j<<”] “;
cin>>matriz[I][j];
}
}
}

Acceso a los elementos de un arreglo bidimensional

En un arreglo de dos dimensiones necesitamos también dos índices para acceder a sus elementos.

Si utilizamos: matriz[i][j], entonces i se refiere a la fila y j a la columna.

Para acceder al elemento de la segunda fila y segunda columna de la matriz de la Fig. 8.1 hacemos:

int nro = matriz[1][1];

En la variable nro se guardara el número 5.

Las matrices o arreglos bidimensionales se suelen utilizar en cálculos matemáticos, operaciones con matrices, recorridos por matrices, y cualquier uso que nosotros le podamos dar.
 

Se pueden definir arreglos de más de 2 dimensiones, pero su manejo se dificultaría enormemente.

Ejemplo 8.2 (MULTIPLICACIÓN de Matrices)

Se requiere un programa que realice la multiplicación de dos matrices, para tal efecto se deben ingresar las dos matrices por teclado teniendo el cuidado de controlar que la primera matriz tenga una dimensión de N*M y la segunda de M*N para que se pueda realizar la multiplicación.

Solucion...

Ejemplo 8.3

Los alumnos de primer semestre de la carrera de Licenciatura en Química de la Universidad Mayor de San Simon son 20. Todos los alumnos toman inicialmente 5 materias lo que quiere decir que al final del semestre tendrán 5 notas cada alumno. Escribir un programa que pida las 5 notas de los 20 alumnos y luego devuelva el promedio de todas las notas.

Solución...

Ejemplo 8.4 (cuadrado perfecto)

Se debe imprimir un cuadrado mágico de tamaño N, donde N es un número impar comprendido entre 3 y 11. Un cuadrado mágico esta compuesto de números enteros entre 1 y N, con las siguientes características: la sumas de las filas, columnas, diagonales son iguales, como se ve en el siguiente ejemplo:

 

8     1       6

3     5       7

4     9       2

 

 

El método de generación del cuadrado mágico consiste en situar el número 1 en la casilla del centro de la primera fila, el siguiente número se debe situar en la casilla ubicada en la fila anterior (por encima) y en la columna de la derecha. Este proceso se repite hasta colocar los N números.
Es importante saber que el cuadrado mágico es cíclico, es decir, la fila anterior (encima) de la primera fila es la última fila y la columna a la derecha de la última es la primera columna. En caso de que un número se debe colocar en una casilla que ya esta ocupada, entonces se elige la casilla que se encuentra debajo (en la siguiente fila, la misma columna) del número que acabamos de ubicar.

 

Arreglos y Matrices

 

 

 

En cualquier lenguaje de programación es posible construir estructuras que almacenen conjuntos de datos. Estas estructuras pueden tener una o más dimensiones. Las estructuras con una dimensión se denominan arreglos y las estructuras con dos dimensiones se denominan matrices. Hay casos particulares en que se requiere el uso de más de dos dimensiones, en ese caso se denominan arreglos multidimensionales. Java además incluye en su API clases que proveen servicios para el almacenamiento de objetos denominadas colecciones.

Arreglos

Un arreglo es una estructura que posee un conjunto de datos del mismo tipo. Los arreglos en Java son objetos pero sus elementos pueden ser tipos primitivos de datos o clases. Un arreglo tiene las siguientes características:

 

 

view source

 

 

 

view source

 

  • Nombre. El nombre identifica al arreglo y a través de este, se accede al arreglo para su lectura y escritura de información. La identificacion del arreglo con el nombre, se realiza mediante la declaracion del arreglo

  • print?

     

     

    1int [] miArreglo;

  • Instancia con el operador “new” que permite la asignación del tamaño del arreglo

  • print?

     

     

    1miArreglo = new int[20]

  • Es posible realizar los procedimientos anteriores en una sola línea de código.

 

1int [] miArreglo = new int[20]

  • Se accede a los elementos del arreglo a través de corchetes cuadrados “[ ]” indicando la posición del elemento al cual se desea acceder. La posición del elemento es denominada índice. El índice inicial es 0 y el final es n-1 donde n es la cantidad de elementos del arreglo

 

 

view source

 

print?

 

 

1miArreglo[0]=10;

  • Los elementos de un arreglo se inicializan al valor por defecto del tipo de dato

  • Los arreglos se pueden inicializar con valores entre corchetes “{ }” separados por comas

 

 

view source

 

print?

 

 

1String dias[] = {"lunes", "martes", "miercoles", "jueves", "viernes", "sabado", "domingo"};

Calculo de promedio en un arreglo

Para calcular el promedio en un arreglo, basta con hacer la sumatoria de números del arreglo y dividir en el número de elementos

Su implementación es la siguiente

 

 

view source

 

print?

 

 

01import java.util.Scanner;

 

02public class EjemplosArreglos {

 

03 public static void main(String[] args) {

 

04  Scanner s = new Scanner(System.in);

 

05  double promedio;

 

06  double sumatoria=0;

 

07  int tamano=10;

 

08  double []arreglo = new double[tamano];

 

09  for(int i=0; i<tamano; i++){

 

10   arreglo[i]=s.nextInt();

 

11  }

 

12  System.out.println("El arreglo original es:");

 

13  for(int i=0; i<tamano; i++){

 

14   System.out.println(arreglo[i]);

 

15  }

 

16  for(int i=0; i<tamano; i++){

 

17   sumatoria+=arreglo[i];

 

18  }

 

19  promedio=sumatoria/tamano;

 

20  System.out.println("El promedio es:"+promedio);

 

21 }

 

22}

 

Para probar el algoritmo, se usan los sigientes datos

Entrada Estándar

25

34

12

8

7

11

45

20

21

10

Salida Estándar

El arreglo original es:

25.0

34.0

12.0

8.0

7.0

11.0

45.0

20.0

21.0

10.0

El promedio es:19.3

 

Búsqueda lineal

La búsqueda lineal en un arreglo, consiste en la implementación de un proceso iterativo que recorre todo el arreglo. Se debe contar con un índice que inicia en 0 e incrementa en cada iteración. En cada iteración consulta a través de un “if” si el valor a buscar es igual al valor del arreglo en índice actual. En caso de ser verdadero, debe retornar el índice. Si se compara todo el arreglo y en ningún caso encuentra el valor, retorna el valor -1. Su implementación es la siguiente

 

01public class EjemplosArreglos {

 

02 public static void main(String[] args) {

 

03  int []numeros = new int[10];

 

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

 

05   numeros[i]=i*5;

 

06  }

 

07  System.out.println("El arreglo original es:");

 

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

 

09   System.out.println(numeros[i]);

 

10  }

 

11  EjemplosArreglos ejemplo = new EjemplosArreglos();

 

12  int indice=ejemplo.busquedaLineal(numeros, 40);

 

13  System.out.println("El indice del valor '40' es: "+indice);

 

14  

 

15 }

 

16 

 

17 public int busquedaLineal(int []arreglo, int clave){

 

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

 

19   if(arreglo[i]==clave){

 

20    return i;

 

21   }

 

22  }

 

23  return -1;

 

24 }

 

25}

 

 

Salida Estándar

El arreglo original es:

0

5

10

15

20

25

30

35

40

45

El indice del valor '40' es: 8

 

Búsqueda binaria

La búsqueda binaria en un arreglo es más eficiente y sofisticada que la búsqueda lineal y consiste en la implementación de un proceso recursivo que recibe el arreglo y el valor que se desea buscar. Esta búsqueda debe realizarse con arreglos ordenados. Se inicia consultando el valor ubicado en la mitad del arreglo. Si el valor a buscar es igual, se retorna el índice. Si el valor a buscar es menor, se hace el llamado recursivo realizando la búsqueda con los valores desde la posición inicial hasta la posición anterior a la mitad, pero si no hay elementos entre estas posiciones, retorna -1. Si el valor a buscar es mayor, se hace el llamado recursivo realizando la búsqueda con los valores desde la posición siguiente a la mitad hasta la última posición, pero si no hay elementos entre estas posiciones, retorna -1.

Este algoritmo se puede implementar sin usar recursividad, sin embargo, es recomendable implementarlo de esta forma para optimizar el código. Su implementación es la siguiente

 

01public class EjemplosArreglos {

 

02 public static void main(String[] args) {

 

03  int []numeros = new int[10];

 

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

 

05   numeros[i]=i*5;

 

06  }

 

07  System.out.println("El arreglo original es:");

 

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

 

09   System.out.println(numeros[i]);

 

10  }

 

11  EjemplosArreglos ejemplo = new EjemplosArreglos();

 

12  int indice=ejemplo.busquedaBinaria(numeros, 40, 0, numeros.length-1);

 

13  System.out.println("El indice del valor '40' es: "+indice);

 

14 }

 

15 

 

16 public int busquedaBinaria(int []arreglo, int clave, int posInicial, int posFinal){

 

17  int posMitad=(posFinal+posInicial)/2;

 

18  if(clave==arreglo[posMitad]){

 

19   return posMitad;

 

20  }else if(clave<arreglo[posMitad]){

 

21   if(posMitad-1<=posInicial){

 

22    return -1;

 

23   }else{

 

24    return busquedaBinaria(arreglo,clave,posInicial,posMitad-1);

 

25   } 

 

26  }else{

 

27   if(posMitad+1>=posFinal){

 

28    return -1;

 

29   }else{

 

30    return busquedaBinaria(arreglo,clave,posMitad+1,posFinal);

 

31   }

 

32  }

 

33 }

 

34}

 

Salida Estándar

El arreglo original es:

0

5

10

15

20

25

30

35

40

45

El indice del valor '40' es: 8

Ordenamiento de un arreglo de números

Considerando un arreglo tipo int, es posible ordenarlo utilizando diferentes técnicas que varían en su complejidad de implementación y de ejecución. La técnica más simple es el ordenamiento de burbuja.

El algoritmo de burbuja consiste en evaluar cada elemento por los demás elementos. Para ello, se requiere un índice que recorra el arreglo desde la primera posición hasta la penúltima. Adicionalmente se requiere un índice que recorra el arreglo desde la siguiente posición del primer índice hasta la última posición del arreglo. Con base en un arreglo denominado A de 5 posiciones y los datos en cada posición son: 8, 3, 5, 9, 1, la representación del ordenamiento mediante el algoritmo de burbuja se presenta en la siguiente figura.

 

 

Su implementación es la siguiente

 

 

view source

 

print?

 

 

01import java.util.Scanner;

 

02public class EjemplosArreglos {

 

03 public static void main(String[] args) {

 

04  Scanner s = new Scanner(System.in);

 

05  int []arreglo = new int[10];

 

06  int indice=0;

 

07  while(indice<10){

 

08   arreglo[indice]=s.nextInt();

 

09   indice++;

 

10  }

 

11  System.out.println("El arreglo original es:");

 

12  for(int i=0; i<indice; i++){

 

13   System.out.println(arreglo[i]);

 

14  }

 

15  for(int i=0; i<indice-1; i++){

 

16   for(int j=i+1; j<indice; j++){

 

17    if(arreglo[i]>arreglo[j]){

 

18     int temporal=arreglo[i];

 

19     arreglo[i]=arreglo[j];

 

20     arreglo[j]=temporal;

 

21    }

 

22   }

 

23  }

 

24  System.out.println("El arreglo ordenado es:");

 

25  for(int i=0; i<indice; i++){

 

26   System.out.println(arreglo[i]);

 

27  }

 

28 }

 

29}

 

Entrada Estándar

 

25

34

12

8

7

9

45

20

21

10

Salida Estándar

El arreglo original es:

25

34

12

8

7

9

45

20

21

10

El arreglo ordenado es:

7

8

9

10

12

20

21

25

34

45

 

Matrices

Una matriz es un arreglo bidimensional. Una matriz cuenta con filas y columnas. Con base en la combinación de fila y columna, se puede acceder a cada uno de los elementos de la matriz.

Una matriz tiene las siguientes características:

 

 

view source

 

 

 

view source

 

 

 

view source

 

 

 

view source

 

  • Nombre. El nombre identifica al arreglo y a través de este, se accede al arreglo para su lectura y escritura de información. La identificación de la matriz con el nombre, se realiza mediante la declaración de la matriz

  • print?

     

     

    1int [][] miMatriz;

  • Instancia con el operador “new” que permite la asignación del tamaño del arreglo

  • print?

     

     

    1miMatriz = new int[3][4];

  • Es posible realizar los procedimientos anteriores en una sola línea de código

  • print?

     

     

    1int [][] miMatriz = new int[3][4];

  • Los elementos de una matriz se inicializan al valor por defecto del tipo de dato

  • Las matrices se pueden inicializar con valores entre corchetes “{}” separados por comas por cada fila de datos. Cada fila también se separa por comas

  • print?

     

     

    1int [][] miMatriz ={{1,2,3,4},{5,6,7,8},{9,10,11,12}

La siguiente figura representa una matriz en Java

 

Calculo de la traspuesta de una matriz

La traspuesta de una matriz consiste en intercambiar filas por columnas y viceversa. Su implementación es la siguiente

 

 

view source

 

print?

 

 

01public class EjemplosMatrices {

 

02 public static void main(String[] args) {

 

03  int [][] miMatriz ={{1,2,3},

 

04    {4,5,6},

 

05    {7,8,9}

 

06  };

 

07  int [][] miMatrizTraspuesta = new int[3][3];

 

08  System.out.println("La matriz original es:");

 

09  for(int i=0; i<3; i++){

 

10   for(int j=0; j<3; j++){

 

11    System.out.print(miMatriz[i][j]+"\t");

 

12   }

 

13   System.out.println();

 

14  }

 

15  for(int i=0; i<3; i++){

 

16   for(int j=0; j<3; j++){

 

17    miMatrizTraspuesta[j][i]=miMatriz[i][j];

 

18   }

 

19  }

 

20  System.out.println("La matriz traspuesta es:");

 

21  for(int i=0; i<3; i++){

 

22   for(int j=0; j<3; j++){

 

23    System.out.print(miMatrizTraspuesta[i][j]+"\t");

 

24   }

 

25   System.out.println();

 

26  }

 

27 }

 

28}

 

Salida Estándar

La matriz original es:

1 2 3

4 5 6

7 8 9

La matriz traspuesta es:

1 4 7

2 5 8

3 6 9

Multiplicación de matrices

Dadas dos matrices A y B donde el número de columnas de la matriz A es igual al número de filas de la matriz B que se denota como:

 

 

 

La multiplicación de A x B se denota como:

 

 

 

 

Donde cada elemento cij se calcula mediante:

 

 

 

 

 

Para dos matrices 3 x 3, la representación grafica de la multiplicación se presenta en la siguiente figura

La implementación para dos matrices de 3 x 3 es la siguiente

 

 

view source

 

print?

 

 

01public class EjemplosMatrices {

 

02 public static void main(String[] args) {

 

03  int [][] A ={{1,2,3},

 

04    {4,5,6},

 

05    {7,8,9}

 

06  };

 

07  int [][] B ={{9,8,7},

 

08    {6,5,4},

 

09    {3,2,1}

 

10  };

 

11  int [][] C = new int[3][3];

 

12  System.out.println("La matriz A es:");

 

13  for(int i=0; i<3; i++){

 

14   for(int j=0; j<3; j++){

 

15    System.out.print(A[i][j]+"\t");

 

16   }

 

17   System.out.println();

 

18  }

 

19  System.out.println("La matriz B es:");

 

20  for(int i=0; i<3; i++){

 

21   for(int j=0; j<3; j++){

 

22    System.out.print(B[i][j]+"\t");

 

23   }

 

24   System.out.println();

 

25  }

 

26  for(int i=0; i<3; i++){

 

27   for(int j=0; j<3; j++){

 

28    for(int k=0; k<3; k++){

 

29     C[i][j]+=A[i][k]*B[k][j];

 

30    }

 

31   }

 

32  }

 

33  System.out.println("La multiplicacion es:");

 

34  for(int i=0; i<3; i++){

 

35   for(int j=0; j<3; j++){

 

36    System.out.print(C[i][j]+"\t");

 

37   }

 

38   System.out.println();

 

39  }

 

40 }

 

41}

 

Salida Estándar

La matriz A es:

1 2 3

4 5 6

7 8 9

La matriz B es:

9 8 7

6 5 4

3 2 1

La multiplicacion es:

30

24

18

84

69

54

138

114

90

© 2023 by Salt AND Pepper.  Proudly created with Wix.com

bottom of page