9matricescsharp

Anuncio
7/30/11
Objetivos de la sesión
  Entender
el concepto de dimensión
en un arreglo, sus posibles
aplicaciones y su importancia.
  Conocer la forma en que se definen,
crean y utilizan arreglos
bidimensionales.
Fundamentos de programación C#. R. Mtz.
Dimensiones en un arreglo
 
Los arreglos que se han manejado hasta
ahora, se consideran de una dimensión
(unidimensionales), pues los elementos se
organizan linealmente.
 
Sin embargo, se pueden trabajar más
dimensiones, formando:
 
 
 
ARREGLOS BIDIMENSIONALES (Matrices).
ARREGLOS TRIDIMENSIONALES (Cubos).
ARREGLOS de más dimensiones.
Fundamentos de programación C#. Román Mtz.
Fundamentos de programación C#. Román Mtz.
¿Cuándo utilizar más de una
dimensión?
 
La cantidad de dimensiones de un arreglo,
dependerá de a cuántas características se
quiere asociar un conjunto de datos.
 
Ejemplo: Calificaciones
Se asocian a alumnos.
  Se asocian a parciales.
  Se asocian a materias.
 
Fundamentos de programación C#. Román Mtz.
1
7/30/11
Ejemplo: Calificaciones
Ejemplo: Calificaciones
alumno1
alumno1
alumno2
alumno2
alumno3
alumno3
alumno4
alumno4
alumno5
alumno5
alumno6
alumno6
alumno7
alumno7
…
…
alumnoX
alumnoX
Parcial1
Fundamentos de programación C#. Román Mtz.
Final
Arreglos bidimensionales
 
alumno1
alumno2
 
alumno3
alumno4
alumno5
 
alumno6
alumno7
…
alumnoX
Fundamentos de programación C#. Román Mtz.
Parcial3
Fundamentos de programación C#. Román Mtz.
Ejemplo: Calificaciones
Parcial1
Parcial2
Parcial2
Parcial3
Final
Como se puede observar, es un arreglo de
arreglos unidimensionales.
Se puede manejar como un espacio
matricial de renglones y columnas.
Equivalente también a un plano cartesiano
con posiciones (x,y).
Materia1
Materia2
Matreia3
Materia4
Renglones
Fundamentos de programación C#. Román Mtz.
Columnas
2
7/30/11
Declaración de arreglos
bidimensionales en C#
Creación de arreglos
bidimensionales en C#
Las variables de tipo arreglo no se pueden utilizar
hasta que haya sido creado el espacio en memoria para
las mismas a través del operador new
tipo[,] nombre;
nombre = new tipo[#renglones, #columnas];
Tipo de dato de
los elementos que
conformarán el
arreglo.
Indicador
de que la
variable es
un arreglo
bidimensional
Identificador
de la variable
que será un
arreglo.
Fundamentos de programación C#. Román Mtz.
Identificador
de la variable
que se declaró
como arreglo.
Tipo de dato de
los elementos que
conformarán el
Arreglo (congruente
con la declaración
realizada previamente).
Valores que
indican la
cantidad de
elementos a
guardar en el
arreglo.
Fundamentos de programación C#. Román Mtz.
Acceso a un arreglo
bidimensional
Ejemplo
  Formato:
int[,] produccion = new int[5,12];
variable[renglón,columna]
Variable que
identifica al
arreglo
Subíndice
que identifica
al renglón
a accesar
Subíndice
que identifica
a la columna
a accesar
Los subíndices corresponden a una expresión de tipo entero
cuyo valor puede ser desde 0 hasta la cantidad de reglones
o columnas menos 1.
Fundamentos de programación C#. Román Mtz.
0
1
2
3
4
5
6
7
8
9
10 11
0
1
2
3
4
produccion[2,4]
produccion[1,9]
Fundamentos de programación C#. Román Mtz.
3
7/30/11
¿Cómo manejar información
de las dimensiones?
Inicialización de matrices con
valores constantes
 
Formato:
tipo[,] nombre = {{valor1.1, valor1.2,…,valor1.N},
{valor2.1, valor2.2,…,valor2.N},
…
{valorN.1, valorN.2,…,valorN.N}};
 
Indica cuántas dimensiones tiene un arreglo.
Obtiene la cantidad de elementos que tiene el arreglo en la
dimensión x.
Ejemplo:
matriz
matriz.Rank // vale 2
matriz.GetLength(0) // vale 3 (cantidad de renglones)
matriz.GetLength(1) // vale 2 (cantidad de columnas)
Fundamentos de programación C#. Román Mtz.
Generalizando el acceso…
Generalizando el acceso…
¿Cómo se desplegaría la información del primer
renglón?
for (int col = 0; col < matriz.Getlength(1); col++)
Console.WriteLine(matriz[0,col]);
for (int reng=0; reng<matriz.GetLength(0); reng++)
{ for (int col=0; col<matriz.GetLength(1); col++)
¿Y del segundo renglón?
for (int col = 0; col < matriz.Getlength(1); col++)
Console.WriteLine(matriz[1,col]);
 
Método GetLength(x)
 
{{1, 2, 3}, 1 2 3
4 5 6
{4, 5, 6},
7 8 9
{7, 8, 9}};
Fundamentos de programación C#. Román Mtz.
 
 
int[,] matriz = {{1, 2}, {4, 5}, {7, 8}};
Ejemplo:
 
Atributo Rank
 
Crea un arreglo de tantos valores se especifiquen, asociando cada
valor a cada casilla del arreglo según el orden dado.
int[,] matriz =
 
Console.Write(matriz[reng,col]+" ");
Console.WriteLine();
}
Entonces… ¿cómo desplegar toda la matriz?
Fundamentos de programación C#. Román Mtz.
Fundamentos de programación C#. Román Mtz.
4
7/30/11
CASO: Sumar todos los elementos
de la matriz
Generalizando el acceso…
 
¿Cómo se desplegaría la información de la primer
columna?
for (int reng=0; reng<matriz.GetLength(0); reng++)
Console.WriteLine(matriz[reng,0]);
  ¿Y
de la segunda columna?
for (int reng=0; reng<matriz.GetLength(0); reng++)
Console.WriteLine(matriz[reng,1]);
En el encabezado del método se especifica
el tipo de dato de la matriz.
static int Suma (int[,] matriz)
{ int acum = 0;
for (int r = 0; r < matriz.GetLength(0); r++)
for (int c = 0; c < matriz.GetLength(1); c++)
acum += matriz[r,c];
return acum;
}
Uso:
x = Suma(m);
En la llamada al método se pone solo el
nombre de la variable que representa la matriz.
Fundamentos de programación C#. Román Mtz.
Fundamentos de programación C#. Román Mtz.
Casos
 
 
 
 
 
 
 
Sumar todos los elementos de una matriz
Sumar dos matrices
Sumar los elementos de una columna
Sumar los elementos de un renglón
Sumar los elementos de la diagonal
principal
Sumar los elementos de la diagonal
secundaria
Obtener la matriz transpuesta.
Fundamentos de programación C#. Román Mtz.
5
Descargar