Переупорядочить массив по убыванию его элементов в строках - 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