You are on page 1of 4

Matriz

1.- Realizar un algoritmo de dos matrices A y B, sumarla y almacenar dicho


resultado en otra matriz C, adems hallar el mayor y menor elemento de la
matriz C.
Module Module1
Sub Main()
Dim m1(,) As Integer = CrearMatrizConNumerosAleatoreos(2, 2)
Dim m2(,) As Integer = CrearMatrizConNumerosAleatoreos(2, 2)
Dim m12(,) As Integer = SumarDosMatrices(m1, m2)
MayorMenorSumarDosMatrices(m12)
End Sub
Function CrearMatrizConNumerosAleatoreos(ByVal fila As Integer, ByVal columna
As Integer) As Integer(,)
Dim matriz(fila - 1, columna - 1) As Integer
Dim numero_aleatoreo As New Random()
For i = 0 To matriz.GetUpperBound(0)
For j = 0 To matriz.GetUpperBound(1)
matriz(i, j) = numero_aleatoreo.Next(0, 100)
Next
Next

Return matriz
End Function
Function SumarDosMatrices(ByVal M1 As Integer(,), ByVal M2 As Integer(,)) As
Integer(,)
Dim matrizsuma(M1.GetUpperBound(0), M1.GetUpperBound(1)) As Integer

For i = 0 To matrizsuma.GetUpperBound(0)
For j = 0 To matrizsuma.GetUpperBound(1)
matrizsuma(i, j) = M1(i, j) + M2(i, j)
Next
Next

Return matrizsuma

End Function
Sub MayorMenorSumarDosMatrices(ByVal matrizsuma As Integer(,))
Dim mayor, menor As Integer
mayor = matrizsuma(0, 0)
menor = matrizsuma(0, 0)
For i = 0 To matrizsuma.GetUpperBound(0)
For j = 0 To matrizsuma.GetUpperBound(1)
If matrizsuma(i, j) > mayor Then
mayor = matrizsuma(i, j)
End If
If matrizsuma(i, j) < menor Then
menor = matrizsuma(i, j)
End If
Next
Next
Console.WriteLine("El mayor es: " & mayor.ToString() & "y el menor es : " &
menor.ToString())
Console.ReadLine()

End Sub
End Module
Source:
Dim m1(,) As Integer = CrearMatrizConNumerosAleatoreos(M, M)
Dim m2(,) As Integer = CrearMatrizConNumerosAleatoreos(M, M)

2.- multiplicacin de una matriz


C++
#include <iostream>
void MultiplyWithOutAMP() {
int aMatrix[3][2] = {{1, 4}, {2, 5}, {3, 6}};
int bMatrix[2][3] = {{7, 8, 9}, {10, 11, 12}};
int product[3][3] = {{0, 0, 0}, {0, 0, 0}, {0, 0, 0}};
for (int row = 0; row < 3; row++) {
for (int col = 0; col < 3; col++) {
// Multiply the row of A by the column of B to get the row, column of
product.
for (int inner = 0; inner < 2; inner++) {
product[row][col] += aMatrix[row][inner] * bMatrix[inner][col];
}
std::cout << product[row][col] << " ";
}
std::cout << "\n";
}
}
void main() {
MultiplyWithOutAMP();
getchar();
}
3.- Para multiplicar mediante C++ AMP
En MatrixMultiply.cpp, agregue el siguiente cdigo antes del mtodo main.
C++
void MultiplyWithAMP() {
int aMatrix[] = { 1, 4, 2, 5, 3, 6 };
int bMatrix[] = { 7, 8, 9, 10, 11, 12 };
int productMatrix[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0 };
array_view<int, 2> a(3, 2, aMatrix);
array_view<int, 2> b(2, 3, bMatrix);
array_view<int, 2> product(3, 3, productMatrix);
parallel_for_each(
product.extent,

[=](index<2> idx) restrict(amp) {


int row = idx[0];
int col = idx[1];
for (int inner = 0; inner < 2; inner++) {
product[idx] += a(row, inner) * b(inner, col);
}
}
);
product.synchronize();
for (int row = 0; row < 3; row++) {
for (int col = 0; col < 3; col++) {
//std::cout << productMatrix[row*3 + col] << " ";
std::cout << product(row, col) << " ";
}
std::cout << "\n";
}
}

NOTA:
El cdigo de AMP es similar al cdigo que no es de AMP. La llamada
a parallel_for_each inicia un subproceso para cada elemento
de product.extent y reemplaza los bucles for por fila y columna. El
valor de la celda en la fila y la columna se encuentra disponible
en idx. Puede tener acceso a los elementos de un
objeto array_viewbien usando el operador [] y una variable de ndice,
o el operador () y las variables de fila y columna. En este ejemplo se
muestran ambos mtodos. El mtodoarray_view::synchronize copia
los valores de la variable product en la variable productMatrix.

4.-

You might also like