Сортировка матриц - VB
Формулировка задачи:
Строки матрицы А(т, п) в произвольном порядке поступают с устройства ввода (из файла или с клавиатуры). Располагать их по мере поступления в выделенном под нее массиве лексикографически по возрастанию; совпадающие строки вставлять единожды.
Решение задачи: «Сортировка матриц»
textual
Листинг программы
Sub Main() Dim A(1 To 100, 1 To 5) As Integer HomeDir$ = ThisWorkbook.Path fname$ = "matrix.txt" fi% = FreeFile Open HomeDir$ + "\" + fname$ For Input As #fi% ptrR% = 0 Do While Not EOF(fi%) Line Input #fi%, Stri$ ' читаем строку Stri$ = Trim$(Stri$) ' удаляем лишние пробелы If Len(Stri$) > 0 Then ' если строка непуста V = Split(Stri$, ",") ' расшепляем For i% = 1 To 5 ' заносим в рабочую строку A(ptrR% + 1, i%) = CInt(V(i% - 1)) Next i% '::: Проверим, нет ли уже такой строки в матрице q% = 0 If ptrR% > 0 Then For i% = 1 To ptrR% - 1 If cmpRows(A, i%, ptrR%) = 0 Then q% = -1 Exit For End If Next i% End If If q% = 0 Then ptrR% = ptrR% + 1 'строки нет - оставим End If Loop Close #fi% '::: Сортируем матрицу SortMatrix A, ptrR% '::: Печатаем For i% = 1 To ptrR% For j% = 1 To 5 Debug.Print A(i%, j%); " "; Next j% Debug.Print Next i% End Sub '::: Сортировка строк матрицы Sub SortMatrix(A() As Integer, n As Integer) m% = UBound(A, 2) For i% = 1 To n% - 1 For j% = i% + 1 To n% k% = cmpRows(A, i%, j%) If k% > 0 Then For k% = 1 To m% tmp% = A(i%, k%) A(i%, k%) = A(j%, k%) A(j%, k%) = tmp% Next k% End If Next j% Next i% End Sub '::: Сравнить две строки Function cmpRows(A() As Integer, n1 As Integer, n2 As Integer) As Integer m% = UBound(A, 2) cmpRows = 0 For j% = 1 To m% If A(n1%, j%) > A(n2%, j%) Then cmpRows = 1 Exit Function End If If A(n1%, j%) < A(n2%, j%) Then cmpRows = -1 Exit Function End If Next j% End Function
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д