Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - VBA

Страница: 1 |

 

  Вопрос: помогите пожалуйста у меня не сортируются массивы Добавлено: 24.05.10 21:51  

Автор вопроса:  Лу | ICQ: 385564260 
Здравствуйте!у меня курсовая по VB. тема сортировка массива двумя методами:метод простые вставки и метод бинарные деревья,и данные задаются из текстового файла и притом еще надо график зависимости времени и количества элеметов построить,вот.у меня коды есть на эти 2 методы,и на данные из текстового файла,но почему то он не сортируется только вместо отсортированных цифр выходит о(нули).я отправлю код программы посмотрите пожалуйста и помогите отсортировать,заранее благодарна)))
Dim N As Long
Dim Arr(50) As Double
Dim I As Long
Dim J As Long
Dim K As Long
Dim Tmp As Double
Dim T As Long
Private Sub Command1_Click()
Picture1.Cls
N = 10
Open File1.Path + "\" + File1.FileName For Input As #1
Do While Not (EOF(1)) ' Пока не определил метку конца файла
Input #1, StrTemp ' Чтение данных из файла
Picture1.Print StrTemp
Arr(N) = Val(StrTemp)
N = N + 1
Loop
Close #1 ' Закрывает файл
End Sub
Private Sub Command2_Click()
Picture2.Cls
Arr(N) = Val(Tmp)
For I = 0 To N - 1
N = N - 1
    I = 1
    Do
        J = 0
        Do
            If Arr(I) >= Arr(J) Then ' сортируем по убыванию
                K = I
                Tmp = Arr(I)
                Do
                    Arr(K) = Arr(K - 1)
                    K = K - 1
                Loop Until Not K > J
                Arr(J) = Tmp
                J = I
            Else
                J = J + 1
            End If
        Loop Until Not J < I
        I = I + 1
    Loop Until Not I <= N
    Next
    For I = 0 To N - 1
Picture2.Print Arr(I);
Next
Label11.Caption = Arr(0)
Label12.Caption = Arr(1)
Label13.Caption = Arr(2)
Label14.Caption = Arr(3)
Label15.Caption = Arr(4)
Label16.Caption = Arr(5)
Label17.Caption = Arr(6)
Label18.Caption = Arr(7)
Label19.Caption = Arr(8)
Label20.Caption = Arr(9)
End Sub
Private Sub Command3_Click()
Picture2.Cls
  I = 2
    Do
        T = I
        Do While T <> 1
            K = T \ 2
            If Arr(K - 1) > Arr(T - 1) Then
                T = 1
            Else
                Tmp = Arr(K - 1)
                Arr(K - 1) = Arr(T - 1)
                Arr(T - 1) = Tmp
                T = K
            End If
        Loop
        I = I + 1
    Loop Until Not I <= N
    I = N - 1
    Do
        Tmp = Arr(I)
        Arr(I) = Arr(0)
        Arr(0) = Tmp
        T = 1
        Do While T <> 0
            K = 2 * T
            If K > I Then
                T = 0
            Else
                If K < I Then
                    If Arr(K) > Arr(K - 1) Then
                        K = K + 1
                    End If
                End If
                If Arr(T - 1) >= Arr(K - 1) Then
                    T = 0
                Else
                    Tmp = Arr(K - 1)
                    Arr(K - 1) = Arr(T - 1)
                    Arr(T - 1) = Tmp
                    T = K
                End If
            End If
        Loop
        I = I - 1
    Loop Until Not I >= 1
    For I = 2 To N - 1
    Picture2.Print Arr(I);
    Next I
End Sub

Private Sub Command4_Click()
Picture3.Line (50, 30)-(5500, 1500), RGB(0, 150, 0), B
Picture3.Line (50, 750)-(5500, 750), RGB(0, 150, 0)
Picture3.Line (550, 30)-(550, 1500), RGB(0, 150, 0)
Picture3.Line (1100, 30)-(1100, 1500), RGB(0, 150, 0)
Picture3.Line (1650, 30)-(1650, 1500), RGB(0, 150, 0)
Picture3.Line (2200, 30)-(2200, 1500), RGB(0, 150, 0)
Picture3.Line (2750, 30)-(2750, 1500), RGB(0, 150, 0)
Picture3.Line (3300, 30)-(3300, 1500), RGB(0, 150, 0)
Picture3.Line (3850, 30)-(3850, 1500), RGB(0, 150, 0)
Picture3.Line (4400, 30)-(4400, 1500), RGB(0, 150, 0)
Picture3.Line (4950, 30)-(4950, 1500), RGB(0, 150, 0)
Picture3.Line (5500, 30)-(5500, 1500), RGB(0, 150, 0)
End Sub

где Command4 тут рисует таблицу,так как у меня визуализация в виде таблицы
Private Sub Command5_Click()
Form3.Show
Form2.Hide
End Sub

Private Sub Drive1_Change()
Dir1.Path = Drive1.Drive ' Выбираем диск f
End Sub
Private Sub Dir1_Change()
File1.Path = Dir1.Path ' Выбираем папку Курсовая работа
End Sub

Помогите пожалуйста,на этой неделе сдавать надо,хорошо что нашла ваш сайт,надеюсь будет помощь,надеюсь...

Ответить

  Ответы Всего ответов: 4  

Номер ответа: 1
Автор ответа:
 VβÐUηìt



Вопросов: 246
Ответов: 3333
 Web-сайт: смекаешь.рф
 Профиль | | #1
Добавлено: 24.05.10 22:48
Код не в сурсе!!! Код не в сурсе!!! Как же я не навижу этот гребаный код, когда он не в сурсе!!! Наглядно:
  1. Dim N As Long
  2. Dim Arr(50) As Double
  3. Dim I As Long
  4. Dim J As Long
  5. Dim K As Long
  6. Dim Tmp As Double
  7. Dim T As Long
  8. Private Sub Command1_Click()
  9. Picture1.Cls
  10. N = 10
  11. Open File1.Path + "\" + File1.FileName For Input As #1
  12. Do While Not (EOF(1)) ' Пока не определил метку конца файла
  13. Input #1, StrTemp ' Чтение данных из файла
  14. Picture1.Print StrTemp
  15. Arr(N) = Val(StrTemp)
  16. N = N + 1
  17. Loop
  18. Close #1 ' Закрывает файл
  19. End Sub
  20. Private Sub Command2_Click()
  21. Picture2.Cls
  22. Arr(N) = Val(Tmp)
  23. For I = 0 To N - 1
  24. N = N - 1
  25.     I = 1
  26.     Do
  27.         J = 0
  28.         Do
  29.             If Arr(I) >= Arr(J) Then ' сортируем по убыванию
  30.                 K = I
  31.                 Tmp = Arr(I)
  32.                 Do
  33.                     Arr(K) = Arr(K - 1)
  34.                     K = K - 1
  35.                 Loop Until Not K > J
  36.                 Arr(J) = Tmp
  37.                 J = I
  38.             Else
  39.                 J = J + 1
  40.             End If
  41.         Loop Until Not J < I
  42.         I = I + 1
  43.     Loop Until Not I <= N
  44.     Next
  45.     For I = 0 To N - 1
  46. Picture2.Print Arr(I);
  47. Next
  48. Label11.Caption = Arr(0)
  49. Label12.Caption = Arr(1)
  50. Label13.Caption = Arr(2)
  51. Label14.Caption = Arr(3)
  52. Label15.Caption = Arr(4)
  53. Label16.Caption = Arr(5)
  54. Label17.Caption = Arr(6)
  55. Label18.Caption = Arr(7)
  56. Label19.Caption = Arr(8)
  57. Label20.Caption = Arr(9)
  58. End Sub
  59. Private Sub Command3_Click()
  60. Picture2.Cls
  61.   I = 2
  62.     Do
  63.         T = I
  64.         Do While T <> 1
  65.             K = T \ 2
  66.             If Arr(K - 1) > Arr(T - 1) Then
  67.                 T = 1
  68.             Else
  69.                 Tmp = Arr(K - 1)
  70.                 Arr(K - 1) = Arr(T - 1)
  71.                 Arr(T - 1) = Tmp
  72.                 T = K
  73.             End If
  74.         Loop
  75.         I = I + 1
  76.     Loop Until Not I <= N
  77.     I = N - 1
  78.     Do
  79.         Tmp = Arr(I)
  80.         Arr(I) = Arr(0)
  81.         Arr(0) = Tmp
  82.         T = 1
  83.         Do While T <> 0
  84.             K = 2 * T
  85.             If K > I Then
  86.                 T = 0
  87.             Else
  88.                 If K < I Then
  89.                     If Arr(K) > Arr(K - 1) Then
  90.                         K = K + 1
  91.                     End If
  92.                 End If
  93.                 If Arr(T - 1) >= Arr(K - 1) Then
  94.                     T = 0
  95.                 Else
  96.                     Tmp = Arr(K - 1)
  97.                     Arr(K - 1) = Arr(T - 1)
  98.                     Arr(T - 1) = Tmp
  99.                     T = K
  100.                 End If
  101.             End If
  102.         Loop
  103.         I = I - 1
  104.     Loop Until Not I >= 1
  105.     For I = 2 To N - 1
  106.     Picture2.Print Arr(I);
  107.     Next I
  108. End Sub
  109.  
  110. Private Sub Command4_Click()
  111. Picture3.Line (50, 30)-(5500, 1500), RGB(0, 150, 0), B
  112. Picture3.Line (50, 750)-(5500, 750), RGB(0, 150, 0)
  113. Picture3.Line (550, 30)-(550, 1500), RGB(0, 150, 0)
  114. Picture3.Line (1100, 30)-(1100, 1500), RGB(0, 150, 0)
  115. Picture3.Line (1650, 30)-(1650, 1500), RGB(0, 150, 0)
  116. Picture3.Line (2200, 30)-(2200, 1500), RGB(0, 150, 0)
  117. Picture3.Line (2750, 30)-(2750, 1500), RGB(0, 150, 0)
  118. Picture3.Line (3300, 30)-(3300, 1500), RGB(0, 150, 0)
  119. Picture3.Line (3850, 30)-(3850, 1500), RGB(0, 150, 0)
  120. Picture3.Line (4400, 30)-(4400, 1500), RGB(0, 150, 0)
  121. Picture3.Line (4950, 30)-(4950, 1500), RGB(0, 150, 0)
  122. Picture3.Line (5500, 30)-(5500, 1500), RGB(0, 150, 0)
  123. End Sub
  124.  
  125. где Command4 тут рисует таблицу,так как у меня визуализация в виде таблицы
  126. Private Sub Command5_Click()
  127. Form3.Show
  128. Form2.Hide
  129. End Sub
  130.  
  131. Private Sub Drive1_Change()
  132. Dir1.Path = Drive1.Drive ' Выбираем диск f
  133. End Sub
  134. Private Sub Dir1_Change()
  135. File1.Path = Dir1.Path ' Выбираем папку Курсовая работа
  136. End Sub

Смекаешь? И всегда суйте его в [sourcе][/sоurce]. Все. Ибо нечитабильно. Вот.

Ответить

Номер ответа: 2
Автор ответа:
 s12



Вопросов: 24
Ответов: 363
 Профиль | | #2 Добавлено: 24.05.10 23:59
Логика программы сильно нарушена. Во первых ошибка может скрываться при загрузке чисел из файла. Во вторых все переменные уровня модуля - отследить где что пресекается сложно.

Ответить

Номер ответа: 3
Автор ответа:
 Лу



ICQ: 385564260 

Вопросов: 1
Ответов: 1
 Профиль | | #3 Добавлено: 25.05.10 08:50
((( не получается :

Ответить

Номер ответа: 4
Автор ответа:
 Серёга



ICQ: 262809473 

Вопросов: 17
Ответов: 561
 Web-сайт: houselab.narod.ru
 Профиль | | #4
Добавлено: 25.05.10 18:24
почему то он не сортируется только вместо отсортированных цифр выходит о(нули).

а вот у меня почему то сортируется, но если в файле все значения сделать меньше еденицы, то после сортировки реально будут нули. Это потому что переменная StrTemp не объявлена как строковая.

Короче:
после Private Sub Command1_Click() надо вписать Dim StrTemp As String.

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам