Сортировка матриц - 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

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


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

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

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