Нужно создать сортировку массива по возрастание в Visual Basic в отдельном List Box - VB

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

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

Листинг программы
  1. Private Sub MaassiveMake(M As Byte, X)
  2. Dim I As Byte
  3. For I = 0 To M - 1
  4. X(I) = Rnd
  5. ListBox1.AddItem ("X(" + Str(I) + ")=" + Str(X(I)))
  6. Next
  7. End Sub
  8. Private Sub SumAr(M As Byte, Sum As Single, X)
  9. Dim I As Byte
  10. Sum = 0
  11. For I = 0 To M - 1
  12. Sum = Sum + X(I)
  13. Next
  14. End Sub
  15. Private Sub GetMin(M As Byte, min As Single, X)
  16. Dim I As Byte
  17. min = 1E+38
  18. For I = 0 To M - 1
  19. If X(I) < min Then min = X(I)
  20. Next
  21. End Sub
  22. Private Sub GetMax(M As Byte, Max As Single, X)
  23. Dim I As Byte
  24. Max = 1E-38
  25. For I = 0 To M - 1
  26. If X(I) > Max Then Max = X(I)
  27. Next
  28. End Sub
  29. Private Sub CommandButton1_Click()
  30. Dim XX(100) As Single
  31. Dim C As Single
  32. Dim MM As Byte
  33. MM = Val(TextBox1.Text)
  34. Call MaassiveMake(MM, XX)
  35. Call SumAr(MM, C, XX)
  36. TextBox2.Text = Str(C)
  37. Call GetMin(MM, C, XX)
  38. ListBox2.AddItem (Str(C))
  39. Call GetMax(MM, C, XX)
  40. ListBox3.AddItem (Str(C))
  41. End Sub
  42. Private Sub CommandButton2_Click()
  43. TextBox1.Text = " "
  44. TextBox2.Text = " "
  45. ListBox1.Clear
  46. ListBox2.Clear
  47. ListBox3.Clear
  48. End Sub

Решение задачи: «Нужно создать сортировку массива по возрастание в Visual Basic в отдельном List Box»

textual
Листинг программы
  1. Option Explicit
  2. Const r = 90
  3. Dim WithEvents cb As CommandButton, WithEvents lb As ListBox
  4. Dim i&, j&, l&, t&, w&, h&, s$, v
  5.  
  6. Private Sub cb_Click()
  7.     Const max = 100, z = ", "
  8.     Select Case Mid$(cb.Name, 3)
  9.     Case 1
  10.          lb.Clear: For i = 0 To max: lb.AddItem Rnd * 99 \ 1 + 1 & z & Rnd * 99 \ 1 + 1: Next
  11.          
  12.          
  13.          
  14.     Case 2 'Сортировка левой части
  15.        v = ListToArr(lb) 'Переменной V присваеваем массив из списка ListBox
  16.        'В левую часть каждого элемента добавляем 10 байт со вставленным числом (из левой части)
  17.        s = Space$(10): For i = 0 To max: RSet s = val(v(i)): v(i) = s & v(i): Next
  18.         ReturnToList v, lb, 11 ' Вернуть всё в список
  19.        
  20.        
  21.        
  22.        
  23.     Case 3 'Сортировка правой части
  24.        v = ListToArr(lb) 'Переменной V присваеваем массив из списка ListBox
  25.        'В левую часть каждого элемента добавляем 10 байт со вставленным числом (из правой части)
  26.        s = Space$(10): For i = 0 To max: RSet s = val(Mid$(v(i), InStr(1, v(i), z) + 1)): v(i) = s & v(i): Next
  27.         ReturnToList v, lb, 11 ' Вернуть всё в список
  28.        
  29.        
  30.        
  31.        
  32.     Case 4
  33.         v = ListToArr(lb)
  34.         qSort v, 0, max
  35.         lb.Clear: For i = 0 To max: lb.AddItem v(i): Next ' Вставка в список ListBox массив v
  36.    End Select
  37.     EnCtrl lb.ListCount > 0, "cb2", "cb3", "cb4"
  38. End Sub
  39.  
  40. Function ListToArr(List) As String(): Dim i&, a$()
  41.     ReDim a(List.ListCount - 1): For i = 0 To UBound(a): a(i) = List.List(i): Next: ListToArr = a
  42. End Function
  43.  
  44. Sub ReturnToList(Arr, List, ByVal Start&): Dim i&
  45.     qSort v, 0, UBound(Arr) 'Сортировка
  46.    For i = 0 To UBound(Arr): Arr(i) = Mid$(Arr(i), Start): Next 'Убираем 10 байт из левой части каждого элемента
  47.    List.Clear: For i = 0 To UBound(Arr): List.AddItem Arr(i): Next ' Вставка в список ListBox массив Arr
  48. End Sub
  49.  
  50. Private Sub Form_Load()
  51.     With Controls.Add("vb.ListBox", "lb")
  52.         a l, r, t, r, w, .Width * 5, h, .Height * 4: .Move l, t, w, h
  53.             .Visible = 1
  54.     End With
  55.     a l, r, t, t + h, i, 1
  56.     For Each v In Array("Создать список", "Сортировать по левым числам", "Сортировать по правым числам", "Текстовая сортировка")
  57.         With Controls.Add("vb.CommandButton", "cb" & i)
  58.             a w, .Width * 1.2, h, .Height: .Move l, t, w, h: a l, l + w + r, i, i + 1
  59.             .Caption = v: .Visible = 1
  60.         End With
  61.     Next
  62.     EnCtrl 0, "cb2", "cb3", "cb4"
  63.     ApplyFinalProp "Сортировка"
  64.     Randomize Timer
  65. End Sub
  66.  
  67. Private Sub ApplyFinalProp(Optional ByVal Caption$): Dim w&, h&
  68.     For Each v In Me.Controls
  69.         If v.Left + v.Width > w Then w = v.Left + v.Width
  70.         If v.Top + v.Height > h Then h = v.Top + v.Height
  71.     Next
  72.     With Me: .Width = w + (.Width - .ScaleWidth) + r: .Height = h + (.Height - .ScaleHeight) + r: .Caption = Caption: End With
  73. End Sub
  74.  
  75. Sub qSort(Arr, ByVal mn As Long, ByVal mx As Long)
  76.     Dim i As Long, l As Long, j As String, s As String
  77.     i = mn: l = mx: j = Arr((i + l) \ 2)
  78.     While i <= l: While Arr(i) < j: i = i + 1: Wend: While Arr(l) > j: l = l - 1: Wend
  79.         If (i <= l) Then s = Arr(i): Arr(i) = Arr(l): Arr(l) = s: i = i + 1: l = l - 1
  80.     Wend
  81.     If mn < l Then qSort Arr, mn, l
  82.     If i < mx Then qSort Arr, i, mx
  83. End Sub
  84.  
  85. Private Sub cb_LostFocus(): LostFocus: End Sub
  86. Private Sub lb_LostFocus(): LostFocus: End Sub
  87. Private Sub EnCtrl(ByVal val&, ParamArray e()): For Each v In e: Controls(v).Enabled = val: Next: End Sub
  88. Private Sub a(ParamArray e()): Dim i&: For i = 1 To UBound(e) Step 2: e(i - 1) = e(i): Next: End Sub
  89. Private Sub Form_Activate(): Set lb = Controls("lb"): lb.SetFocus: End Sub
  90. Private Sub LostFocus(): On Error Resume Next: Set lb = ActiveControl: Set cb = ActiveControl: End Sub

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


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

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

9   голосов , оценка 4.111 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы