Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > VB6 > [VB6]Сортировка массивов


Автор: MelissaHell 22.5.2011, 12:28
Код

Public Sub BinaryInsertionSort(Arr() As Long, ByVal n As Long)
Dim Arr(-100 To 100) As Integer

Option Explicit
Dim F As Long
Private Sub Command1_Click()
Dim mass As String
CommonDialog1.Filter = "Текстовый документ (*.txt) Базы данных (*.dat)|*.txt;*.dat"
CommonDialog1.Flags = cdlOFNFileMustExist
CommonDialog1.DialogTitle = "Загрузить текстовый файл"
CommonDialog1.ShowOpen
Picture3.Cls
Picture1.Cls
i = 0
F = FreeFile
Dim Arr(-100 To 100) As Integer
Open CommonDialog1.FileName For Input As #F
Do While Not EOF(F)
    Line Input #F, mass
    i = i + 1
    Arr(i) = Val(mass)
    Picture1.Print Arr(i)
   
Loop
 n = i
For o = 1 To n 'Код создания гистограммы
  Picture3.Line (0, 0 + 20 * o)-(Arr(o), 20 + 20 * o), RGB(205, 0, 0), BF
  Picture3.Line (0, 0 + 20 * o)-(Arr(o), 20 + 20 * o), RGB(28, 28, 28), B
Next
Close #F

End Sub

Private Sub Command2_Click()
n = Val(Text2)
Picture1.Cls
Picture3.Cls
Dim Arr(-100 To 100) As Integer
Rendomize:
For i = 1 To n
Arr(i) = Int(Rnd * (201)) - 1
 Picture1.Print Arr(i)
For o = 1 To n 'код создания гистограммы
  Picture3.Line (0, 0 + 20 * o)-(Arr(o), 20 + 20 * o), RGB(205, 0, 0), BF
  Picture3.Line (0, 0 + 20 * o)-(Arr(o), 20 + 20 * o), RGB(28, 28, 28), B
Next
Next i
End Sub
Private Sub Command3_Click(Index As Integer)
Dim Arr(-100 To 100) As Integer
n = Val(Text3)
Picture1.Cls
Picture3.Cls
    For i = 1 To n
    Arr(i) = InputBox("Введите число", "Заполнение массива")
     Picture1.Print Arr(i)
    Next i
    MsgBox ("Ввод массива окончен")
    For o = 1 To n 'код создания гистограммы
  Picture3.Line (0, 0 + 20 * o)-(Arr(o), 20 + 20 * o), RGB(205, 0, 0), BF
  Picture3.Line (0, 0 + 20 * o)-(Arr(o), 20 + 20 * o), RGB(28, 28, 28), B
Next
End Sub

Private Sub Command4_Click(Index As Integer)' Сортировка бинарной вставкой
Dim Arr(-100 To 100) As Integer
Picture2.Cls
Dim B As Long
Dim C As Long
Dim E As Long
Dim i As Long
Dim j As Long
Dim k As Long
Dim R As Long
On Error GoTo HandlerError
i = 2
Do
 B = 1
 E = i - 1
 C = (B + E) \ 2
 Do While B <> C
  If Arr(C) > Arr(i) Then
   E = C
  Else
   B = C
  End If
  C = (B + E) \ 2
 Loop
 If Arr(B) < Arr(i) Then
  If Arr(i) > Arr(E) Then
   B = E + 1
  Else
   B = E
  End If
 End If
 k = i
 R = Arr(i)
 Do While k > B
  Arr(k) = Arr(k - 1)
  k = k - 1
 Loop
 Arr(B) = R
i = i + 1
Loop Until Not i <= n
Picture2.Print R

HandlerError:
If Err <> 0 Then
 Err.Clear
End If
End Sub

Private Sub Command8_Click() 'Сортировка простой вставкой
Public Sub InsertionSort(mas() As Long, ByVal n As Long)
Picture2.Cls
Dim Arr(-100 To 100) As Integer
Dim i As Long
Dim j As Long
Dim k As Long
Dim R As Long
On Error GoTo HandlerError
i = 2
Do
 j = 1
 Do
  If mas(i) < mas(j) Then
   k = i
   R = mas(i)
   Do
    mas(k) = mas(k - 1)
    k = k - 1
   Loop Until Not k > j
   mas(j) = R
   j = i
  Else
   j = j + 1
   End If
 Loop Until Not j < i
 i = i + 1
Loop Until Not i <= n
HandlerError:
If Err <> 0 Then
 Err.Clear
End If

End Sub


Вот часть кода моей программы, Кнопка1,2,3- ввод массива(тремя способами)
Кнопка4,8- сортировка массива
помогите пожалуйста поставить Picrure2.Print Arr(i) на свое место (сортировка массивов),
И сделать так чтоб программа сортировала массив.

Мне кажется, что программа не видит массив Arr(i), так как на Picture2 он выводил 0.

Оч нужна ваша помощь, сама я додуматься не могу, уже двое суток мучаю и себя и ноут!(((

Автор: Akina 22.5.2011, 20:01
Локальный массив уровня процедуры не даёт работать с одноимённым глобальным массивом уровня модуля.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)