22 - Matrices - Cantidad de filas y columnas


Como hemos visto para definir y crear la matriz utilizamos la siguiente sintaxis:

Private mat(2, 4) As Integer

Como las matrices son objetos en Visual Basic .Net disponemos de un método llamado GetUpperBound(numero de índice) que le pasamos como parámetro la dimensión y nos retorna el valor de dicha dimensión.

Para la definición de la matriz indicada arriba si accedemos a la primera dimesión con el método GetUpperBound retorna un 2:

Console.WriteLine(mat.GetUpperBound(0))

Si accedemos a la segunda dimesión se imprime un 4:

            Console.WriteLine(mat.GetUpperBound(1))

La primer dimensión son la cantidad de filas más uno y la segunda dimensión son la cantidad de columnas más uno de la matriz.

Problema 1:

Crear una matriz de n * m filas (cargar n y m por teclado) Imprimir la matriz completa y la última fila.

Programa:

Module Module1

    Public Class Matriz5

        Private mat(,) As Integer

        Public Sub Cargar()
            Dim filas, columnas As Integer
            Console.Write("Cuantas fila tiene la matriz:")
            filas = Console.ReadLine()
            Console.Write("Cuantas columnas tiene la matriz:")
            columnas = Console.ReadLine()
            ReDim mat(filas - 1, columnas - 1)
            Dim f, c As Integer
            For f = 0 To mat.GetUpperBound(0)
                For c = 0 To mat.GetUpperBound(1)
                    Console.Write("Ingrese componente:")
                    mat(f, c) = Console.ReadLine()
                Next
            Next
        End Sub

        Public Sub Imprimir()
            Dim f, c As Integer
            For f = 0 To mat.GetUpperBound(0)
                For c = 0 To mat.GetUpperBound(1)
                    Console.Write(mat(f, c) & " ")
                Next
                Console.WriteLine()
            Next
        End Sub

        Public Sub ImprimirUltimaFila()
            Dim c As Integer
            Console.WriteLine("Ultima fila")
            For c = 0 To mat.GetUpperBound(1)
                Console.Write(mat(mat.GetUpperBound(0), c) & " ")
            Next
        End Sub
    End Class


    Sub Main()
        Dim ma As New Matriz5()
        ma.Cargar()
        ma.Imprimir()
        ma.ImprimirUltimaFila()
        Console.ReadKey()
    End Sub

End Module

Declaramos la matriz sin indicar el valor de cada una de las dos dimensiones:

        Private mat(,) As Integer

En este ejemplo cada vez que se ejecute el programa el tamaño de la matriz lo define el usuario, para ello ingresamos por teclado dos enteros y seguidamente procedemos a crear la matriz con dichos valores restando uno a filas y columnas:

            Dim filas, columnas As Integer
            Console.Write("Cuantas fila tiene la matriz:")
            filas = Console.ReadLine()
            Console.Write("Cuantas columnas tiene la matriz:")
            columnas = Console.ReadLine()
            ReDim mat(filas - 1, columnas - 1)

Ahora las estructuras repetitivas las acotamos preguntando a la misma matriz la cantidad de filas y la cantidad de columnas:

            For f = 0 To mat.GetUpperBound(0)
                For c = 0 To mat.GetUpperBound(1)
                    Console.Write("Ingrese componente:")
                    mat(f, c) = Console.ReadLine()
                Next
            Next

El algoritmo de impresión es idéntico al visto anteriormente con la modificación de los For:

        Public Sub Imprimir()
            Dim f, c As Integer
            For f = 0 To mat.GetUpperBound(0)
                For c = 0 To mat.GetUpperBound(1)
                    Console.Write(mat(f, c) & " ")
                Next
                Console.WriteLine()
            Next
        End Sub

Para imprimir la última fila debemos disponer un valor fijo en el subíndice de la fila, en este caso no podemos disponer un número fijo sino preguntarle a la misma matriz el valor definido para la primer dimensión.

También el For debemos acotarlo con el segundo índice (columnas):

        Public Sub ImprimirUltimaFila()
            Dim c As Integer
            Console.WriteLine("Ultima fila")
            For c = 0 To mat.GetUpperBound(1)
                Console.Write(mat(mat.GetUpperBound(0), c) & " ")
            Next
        End Sub

Problema 2:

Crear una matriz de n * m filas (cargar n y m por teclado) Imprimir el mayor elemento y la fila y columna donde se almacena.

Programa:

Module Module1

    Public Class Matriz6

        Private mat(,) As Integer

        Public Sub Cargar()
            Dim filas, columnas As Integer
            Console.Write("Cuantas fila tiene la matriz:")
            filas = Console.ReadLine()
            Console.Write("Cuantas columnas tiene la matriz:")
            columnas = Console.ReadLine()
            ReDim mat(filas - 1, columnas - 1)
            Dim f, c As Integer
            For f = 0 To mat.GetUpperBound(0)
                For c = 0 To mat.GetUpperBound(1)
                    Console.Write("Ingrese componente:")
                    mat(f, c) = Console.ReadLine()
                Next
            Next
        End Sub

        Public Sub ImprimirMayor()
            Dim mayor As Integer = mat(0, 0)
            Dim filamay As Integer = 0
            Dim columnamay As Integer = 0
            Dim f, c As Integer
            For f = 0 To mat.GetUpperBound(0)
                For c = 0 To mat.GetUpperBound(1)
                    If mat(f, c) > mayor Then
                        mayor = mat(f, c)
                        filamay = f
                        columnamay = c
                    End If
                Next
            Next
            Console.WriteLine("El elemento mayor es:" & mayor)
            Console.WriteLine("Se encuentra en la fila:" & filamay & " y en la columna: " & columnamay)
            Console.ReadKey()
        End Sub
    End Class


    Sub Main()
        Dim ma As New Matriz6()
        ma.Cargar()
        ma.ImprimirMayor()
    End Sub

End Module

Para obtener el mayor elemento de la matriz y la fila y columna donde se ubica debemos inicializar una variable mayor con el elemento de la fila cero y columna cero (esto lo hacemos suponiendo que en dicha posición se almacena el mayor):

            Dim mayor As Integer = mat(0, 0)
            Dim filamay As Integer = 0
            Dim columnamay As Integer = 0

Luego mediante dos for recorremos todos los elementos de la matriz y cada vez que encontramos un elemento mayor al actual procedemos a actualizar la variable mayor y la posición donde se almacena:

            For f = 0 To mat.GetUpperBound(0)
                For c = 0 To mat.GetUpperBound(1)
                    If mat(f, c) > mayor Then
                        mayor = mat(f, c)
                        filamay = f
                        columnamay = c
                    End If
                Next
            Next

Fuera de los dos For procedemos a mostrar el contenido de la variable mayor y la posición donde se encuentra dentro de la matriz:

            Console.WriteLine("El elemento mayor es:" & mayor)
            Console.WriteLine("Se encuentra en la fila:" & filamay & " y en la columna: " & columnamay)

Problemas propuestos

  1. Crear una matriz de n * m filas (cargar n y m por teclado) Intercambiar la primer fila con la segundo. Imprimir luego la matriz.
  2. Crear una matriz de n * m filas (cargar n y m por teclado) Imprimir los cuatro valores que se encuentran en los vértices de la misma (mat[0][0] etc.)
Solución
Module Module1
    Public Class Matriz7

        Private mat(,) As Integer

        Public Sub Cargar()
            Dim filas, columnas As Integer
            Console.Write("Cuantas fila tiene la matriz:")
            filas = Console.ReadLine()
            Console.Write("Cuantas columnas tiene la matriz:")
            columnas = Console.ReadLine()
            ReDim mat(filas - 1, columnas - 1)
            Dim f, c As Integer
            For f = 0 To mat.GetUpperBound(0)
                For c = 0 To mat.GetUpperBound(1)
                    Console.Write("Ingrese componente:")
                    mat(f, c) = Console.ReadLine()
                Next
            Next
        End Sub

        Public Sub Intercambiar()
            Dim c As Integer
            For c = 0 To mat.GetUpperBound(0)
                Dim aux As Integer = mat(0, c)
                mat(0, c) = mat(1, c)
                mat(1, c) = aux
            Next
        End Sub

        Public Sub Imprimir()
            Dim f, c As Integer
            For f = 0 To mat.GetUpperBound(0)
                For c = 0 To mat.GetUpperBound(1)
                    Console.Write(mat(f, c) & " ")
                Next
                Console.WriteLine()
            Next
            Console.ReadKey()
        End Sub
    End Class


    Sub Main()
        Dim ma As New Matriz7()
        ma.Cargar()
        ma.Intercambiar()
        ma.Imprimir()
    End Sub

End Module





Module Module1
    Public Class Matriz8

        Private mat(,) As Integer

        Public Sub Cargar()
            Dim filas, columnas As Integer
            Console.Write("Cuantas fila tiene la matriz:")
            filas = Console.ReadLine()
            Console.Write("Cuantas columnas tiene la matriz:")
            columnas = Console.ReadLine()
            ReDim mat(filas - 1, columnas - 1)
            Dim f, c As Integer
            For f = 0 To mat.GetUpperBound(0)
                For c = 0 To mat.GetUpperBound(1)
                    Console.Write("Ingrese componente:")
                    mat(f, c) = Console.ReadLine()
                Next
            Next
        End Sub

        Public Sub ImprimirVertices()

            Console.WriteLine("Vértice superior izquierdo:")
            Console.WriteLine(mat(0, 0))
            Console.WriteLine("Vértice superior derecho:")
            Console.WriteLine(mat(0, mat.GetUpperBound(1)))
            Console.WriteLine("Vértice inferior izquierdo:")
            Console.WriteLine(mat(mat.GetUpperBound(0), 0))
            Console.WriteLine("Vértice inferior derecho:")
            Console.WriteLine(mat(mat.GetUpperBound(0), mat.GetUpperBound(1)))
            Console.ReadKey()
        End Sub
    End Class


    Sub Main()
        Dim ma As New Matriz8()
        ma.Cargar()
        ma.ImprimirVertices()
    End Sub

End Module

Retornar