Оформление подпрограммы поиска наибольшего числа двухмерного массива

adept7771

Здравствуйте уважаемые господа знатоки! Проштудировал тему с подпрограммами и документацию в инете... но такая у меня ахинея получается, что жуть.ТЗ: имеется массив (двухмерный) со случайными данными цисловыми (целые неотрицательные), должны написать подпрограмму, которая в массиве ищет наибольший элемент. Я дописал к задачке генератор массива. Но вот оформить как функцию - ту часть, где происходит поиск, не смог...Программулина в общем то написана, оформить правда не могу
Module Module1
 
    Sub Main()
 
        Dim IndexA, IndexB As Byte
 
        MsgBox("Введите неотрицательные, целые, индексы будущего массива.")
 
        IndexA = InputBox("Введите IndexA") - 1
        IndexB = InputBox("Введите IndexB") - 1
 
        MsgBox("Будет создан массив в указанных границах.")
 
 
        ' Array declaration
        Dim arrayX(IndexA, IndexB) As Integer
        ' Array initialization
        Dim objRandom As New Random
        Dim CounterA As Integer
        Dim CounterB As Integer
 
        ' Array creating with random values from 0 to 100
        For CounterA = 0 To IndexA
            For CounterB = 0 To IndexB
                arrayX(CounterA, CounterB) = objRandom.Next(100)
            Next
        Next
 
        ' Show array to display with spaces
        Dim ResultString As String = ""
        For CounterA = 0 To IndexA ' array first index
            ResultString = ""
            For CounterB = 0 To IndexB  ' array second index
                ResultString = ResultString & arrayX(CounterA, CounterB) & "   "
            Next
            Console.WriteLine(ResultString)
        Next
 
        Console.WriteLine(" ")
        Console.WriteLine("Array created! Push any button to continue.")
 
        Console.ReadLine()
        MsgBox("Будет произведен поиск наибольшего значения в массиве.")
 
        Dim maxValue As Integer = 0
 
        For CounterA = 0 To IndexA
            For CounterB = 0 To IndexB
                If maxValue < arrayX(CounterA, CounterB) Then
                    maxValue = arrayX(CounterA, CounterB)
                End If
            Next
        Next
 
        Console.WriteLine("Maximum value: " & maxValue)
 
        Console.ReadLine()
 
 
 
    End Sub
 
End Module
2 ответа

adept7771

Например,
'…
Dim **********(,) As Integer = {{1, 2, 3, 4, 5}, {26, 37, 28, 29, 30}}
Dim maxValue As Integer = getMaxValue(**********)
MsgBox(maxValue.ToString)
'…
Public Function getMaxValue(ByVal ar(,) As Integer) As Integer
    Dim maxValue As Integer = 0
    For CounterA = 0 To ar.GetLength(0) - 1
        For CounterB = 0 To ar.GetLength(1) - 1
            If maxValue < ar(CounterA, CounterB) Then
                maxValue = ar(CounterA, CounterB)
            End If
        Next
    Next
    Return maxValue
End Function


adept7771

Если задачу решать в функциональном стиле и использовать Linq, то программа будет очень простой и короткой.
Public Sub Main()
    Dim objRandom As New Random
    Dim IndexA As Integer = 3 ' Первое измерение
    Dim IndexB As Integer = 4 ' Второе измерение
    Dim intBound As Integer = 100 ' Диапазон значений
    
    ' Получение двумерного множества из случайных чисел в диапазоне [0, intBound)
    Dim m = Enumerable.Range(1, IndexA).Select(Function(i) Enumerable.Range(1, IndexB).Select(Function(j) objRandom.Next(intBound)).ToArray).ToArray
    
    ' Распечатать множество
    Console.WriteLine(String.Join(vbCrLf,  m.Select(Function(i) String.Join(vbTab, i.Select(Function(j) j.ToString).ToArray)).ToArray))
    
    ' Найти максимум
    Dim intMax = m.Select(Function(i) i.Max).Max
    Console.WriteLine(intMax)
End Sub