Переупорядочить массив по убыванию его элементов в строках - VB

Узнай цену своей работы

Формулировка задачи:

помогите доделать задание: 1.Организовать ввод элементов двумерного массива размерностью N*M из текстового файла(открытие файла через объкеты DriveListBox,DirListBox,FileListBox) 2.Вывести исходный массив в таблицу MSFlexGrid. 3.Определить сумму элементов массива с четными значениями индексов его элементов. 4.Найти местоположения (номера индексов) максимальных элементов массива. 5. Элементы массива упорядочены по возрастанию элементов в строках. Переупорядочить массив по убыванию его элементов в строках.

Решение задачи: «Переупорядочить массив по убыванию его элементов в строках»

textual
Листинг программы
Option Explicit
Dim Arr() As Integer
 
Private Sub Command1_Click()
    Call ReadTxtFile(App.Path + "\input.txt")
    Call ShowArrayInFlexGrid(Arr)
    Call MaxAndSum(Arr)
End Sub
 
Private Sub Command2_Click()
    Call ReadTxtFile(App.Path + "\input.txt")
    Call SortArray(Arr, 1)
End Sub
 
Private Sub Command3_Click()
    Call ReadTxtFile(App.Path + "\input.txt")
    Call SortArray(Arr, 2)
End Sub
 
Private Sub ReadTxtFile(ByVal FileName As String)
    Dim n As Integer, m As Integer, i As Integer, j As Integer, ff As Integer
    ff = FreeFile
    Open FileName For Input As #ff 'открытие файла на чтение, задание ему номера ff
       Input #ff, n, m 'ввод размерности из файла
       ReDim Arr(1 To n, 1 To m) 'установление размера массива
       For i = 1 To n  'цикл, отсчитывающий номера строк в массиве
            For j = 1 To m   'цикл, отсчитывающий номера столбцов в массиве
                  Input #ff, Arr(i, j) 'оператор ввода из структур с разделителями (запятые, пробелы)
            Next j 'конец внутреннего цикла
       Next i 'конец внешнего цикла
    Close #ff 'закрытие файла
End Sub
 
Private Sub MaxAndSum(ByRef a() As Integer)
    Dim i As Integer, j As Integer, max As Integer
    Dim n As Integer, m As Integer, s As String, sum As Long
    n = UBound(a, 1): m = UBound(a, 2)
    Label1.Caption = "Максимальные значения массива:"
    max = a(1, 1)
    
    For i = 1 To n   'цикл, отсчитывающий номера строк в массиве
           For j = 1 To m    'цикл, отсчитывающий номера столбцов в массиве
                     If i Mod 2 = 0 And j Mod 2 = 0 Then sum = sum + a(i, j)
                     If a(i, j) > max Then max = a(i, j)
           Next j 'конец внутреннего цикла
    Next i 'конец внешнего цикла
    
    For i = 1 To n   'цикл, отсчитывающий номера строк в массиве
           For j = 1 To m    'цикл, отсчитывающий номера столбцов в массиве
                     If a(i, j) = max Then s = s & "Arr (" & CStr(i) & "," & CStr(j) & ") = " & CStr(max) & vbCrLf
           Next j 'конец внутреннего цикла
    Next i 'конец внешнего цикла
    
    Label1.Caption = Label1.Caption & vbCrLf & s & vbCrLf & _
                     "Сумма элементов массива, имеющих четные индексы:" & vbCrLf & sum
End Sub
 
Private Sub ShowArrayInFlexGrid(ByRef a() As Integer)
    Dim i As Integer, j As Integer, n As Integer, m As Integer
    n = UBound(a, 1): m = UBound(a, 2)
    MSFlexGrid1.Clear 'очистка таблицы на случай многократного использования
    MSFlexGrid1.Rows = n + 1 'установление количества строк в таблице
    MSFlexGrid1.Cols = m + 1 'установление количества колонок в таблице
    For i = 1 To n  'цикл, отсчитывающий номера строк в массиве
            MSFlexGrid1.TextMatrix(i, 0) = CStr(i)
            For j = 1 To m   'цикл, отсчитывающий номера столбцов в массиве
                  MSFlexGrid1.TextMatrix(0, j) = CStr(j)
                  MSFlexGrid1.TextMatrix(i, j) = CStr(a(i, j))    'запись в соответствующую ячейку элемента массива
            Next j 'конец внутреннего цикла
    Next i 'конец внешнего цикла
End Sub
 
Private Sub SortArray(ByRef a() As Integer, ByVal OrderSort As Integer)
    Dim i As Integer, j As Integer, ar() As Integer
    Dim n As Integer, m As Integer, k As Integer, tmp As Integer
    n = UBound(a, 1): m = UBound(a, 2)
    
    For i = 1 To n   'цикл, отсчитывающий номера строк в массиве
        For j = 1 To m    'цикл, отсчитывающий номера столбцов в массиве
               For k = 1 To m - 1
                   Select Case OrderSort
                          Case 1
                               If a(i, k) > a(i, k + 1) Then
                                    tmp = a(i, k)
                                    a(i, k) = a(i, k + 1)
                                    a(i, k + 1) = tmp
                               End If
                          Case 2
                               If a(i, k) < a(i, k + 1) Then
                                    tmp = a(i, k)
                                    a(i, k) = a(i, k + 1)
                                    a(i, k + 1) = tmp
                               End If
                   End Select
               Next k
           Next j 'конец внутреннего цикла
    Next i 'конец внешнего цикла
    Call ShowArrayInFlexGrid(a)
    Call MaxAndSum(a)
End Sub

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

7   голосов , оценка 4.143 из 5
Похожие ответы