29 de jul. de 2010

Arreglos con N-dimensiones "Matrices"

Un arreglo de dos o mas dimensiones es denominado tambien MATRIZ o TABLA. En la practica no es comun trabajar con matrices de de mas de 3 dimensiones, aunque es posible crearlos.

Una matriz bidimensional, esta compuesto por FILAS y COLUMNAS, asi por ejemplo, en la imagen de abajo tenemos una matriz de 5 columnas por 5 filas, donde para hubicar un elemento de esa matriz, se debe especificar ambas dimensiones matriz(fila, columna).

DECLARACION DE UNA MATRIZ EN .NET
Una matriz se declara al igual que un arreglo unidimensional, pero especificando todas las dimensiones que se deseen, asi por ejemplo, para declarar una matriz HORARIO de tipo STRING, que tendra 7 columnas (dias de la semana) y 24 filas (horas) se tiene:


01 Dim HORARIO(23, 6) As String
Tambien puede declarase una matriz sin rango inicial,  esto se utiliza cuando no sabemos de antemano cuantas dimensiones podra tener una matriz, por ejemplo:


01 Dim matriz(,) As Byte
Se declara una matriz de tipo byte, esta está vacia y hasta que no se especifique el rango de las dimensiones, al tratar de utilizar un elemento de esa matriz, este causa una excepcion.
Para declarar las dimensiones una ves creada la matriz, se utiliza la instruccion REDIM:

01 ReDim matriz(fila, columna)
Ejemplo:
Escribir un programa que permita multiplicar dos matrices leidas por teclado y visualizar la matriz resultante.

Solucion: Si las matrices A,B y la matriz resultante es C, se pueden multiplicar si el numero de columnas de la matriz A es igual al numero de filas de la matriz B; entonces la matriz C tiene el numero de filas de la matriz A y el numero de columnas de la matriz B. Los elementos de la matriz C se obtienen a partir de la siguiente ecuacion:
donde:

Codigo fuente:


01 Module Module1
02     Const maximo As Byte = 19
03 
04     'se crea una estructura tipo matriz con sus propios procedimientos
05     Structure matriz
06 
07         Public m(,) As Single
08 
09         Public Sub New(ByVal f As Single, ByVal c As Single)
10             ReDim m(f, c)
11         End Sub
12 
13         Public Sub introducir(ByVal t As String, ByVal nf As Byte, ByVal nc As Byte)
14             Dim i, j As Byte
15             Console.WriteLine(t)
16             Console.WriteLine("------------------------------------")
17             For i = 0 To nf
18                 For j = 0 To nc
19                     Console.Write("Matriz[" & i & "," & j & "]= ")
20                     m(i, j) = Val(Console.ReadLine)
21                 Next
22             Next
23             Console.WriteLine("------------------------------------")
24         End Sub
25 
26         Public Sub imprimir(ByVal t As String, ByVal nf As Byte, ByVal nc As Byte)
27             Dim i, j As Byte
28             Console.WriteLine(t)
29             For i = 0 To nf
30                 For j = 0 To nc
31                     Console.Write(m(i, j) & "   ")
32                 Next
33                 Console.WriteLine()
34             Next
35             Console.WriteLine()
36         End Sub
37 
38     End Structure
39 
40     Dim A As matriz = New matriz(maximo, maximo)
41     Dim B As matriz = New matriz(maximo, maximo)
42     Dim C As matriz = New matriz(maximo, maximo)
43 
44     Sub Main()
45         Dim num As Byte
46         Console.Write("Filas y columnas [i,j] = ")
47         num = Val(Console.ReadLine) - 1
48 
49         If num > maximo Then
50             Console.WriteLine("el limite es un maximo de " & maximo & " filas y columnas")
51         Else
52             A.introducir("Matriz A", num, num)
53             B.introducir("Matriz B", num, num)
54             multiplicar(num)
55             Console.Clear()
56             A.imprimir("Matriz A", num, num)
57             B.imprimir("Matriz B", num, num)
58             C.imprimir("Matriz A * B", num, num)
59         End If
60         Console.WriteLine("presione una tecla para terminar...")
61         Console.ReadLine()
62     End Sub
63 
64     'procedimiento publico que calcula el producto de dos matrices
65     Public Sub multiplicar(ByVal num As Byte)
66         Dim i, j, k As Byte
67         For i = 0 To num
68             For j = 0 To num
69                 For k = 0 To num
70                     C.m(i, j) = C.m(i, j) + A.m(i, k) * B.m(k, j)
71                 Next
72             Next
73         Next
74     End Sub
75 End Module

En la solucion de este problema, se hace uso de una STRUCTURE (visto en un post anterior) donde se declara la matriz y sus metodos. tambien se especifica como una constante el valor maximo que podra tener una matriz (columnas y filas).

Resultado:

1 comentarios:

Anónimo dijo...

gracias si que ayuda y mas eso muy bien explicado

Publicar un comentario en la entrada

 
Design by Free WordPress Themes | Bloggerized by Lasantha - Premium Blogger Themes | cna certification