Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.12.2012, 17:59   #1
Sv.
Пользователь
 
Регистрация: 01.11.2012
Сообщений: 48
По умолчанию не сортирует массив VBA

необходимо выполнить сортировку массива по возрастанию, но почему-то ничего не делается...

Код:
Dim A(30), i, Z, k As Integer
Private Sub CommandButton1_Click()
'Заполнение массива случайными числами
Randomize
N = InputBox("Введите размер массива")
    For i = 0 To N - 1
    A(i) = Int(Rnd() * 20) + 1
    Next i
'Сортировка массива
    For k = 0 To N - 1
    For i = 0 To N - 1
If A(i) > A(i + 1) Then
Z = A(i)
A(i) = A(i + 1)
A(i) = Z
End If
Next i
Next k
'Вывод массива
For i = 0 To N - 1
    TextBox1.Text = TextBox1.Text + " " + Str(A(i))
    Next i
    

 End Sub
Sv. вне форума Ответить с цитированием
Старый 28.12.2012, 18:56   #2
Скрипт
Форумчанин
 
Регистрация: 24.12.2012
Сообщений: 776
По умолчанию

Код:
'Если размер массива задаётся в ходе выполнения кода,
'то размер массива не задаётся при создании массива.
Dim A() As Integer
'В VBA нужно указывать тип данных для каждой переменной,
'иначе у переменной будет тип данных "Variant".
Dim Z As Integer, N As Integer
'В циклах распространено использовать переменные "i" и "j".
Dim i As Integer, j As Integer

Private Sub CommandButton1_Click()

    'Заполнение массива случайными числами
    Randomize
    N = InputBox("Введите размер массива")
    'Разбиваем массив на элементы, чтобы в элементы поместить числа.
    ReDim A(N - 1)
    For i = 0 To N - 1
        A(i) = Int(Rnd() * 20) + 1
    Next i
    
    'Сортировка массива
    'Нужно сделать "-2". Например, если предположить, что массив
    'состоит из двух элементов, то цикл должен быть из одного витка,
    'а не из двух.
    For i = 0 To N - 2
        'После витка цикла с "i" один элемент
        'в массиве будет отсортирован, поэтому нет
        'смысла каждый раз все элементы просматривать.
        For j = 0 To N - 2 - i
            If A(j) > A(j + 1) Then
                Z = A(j)
                A(j) = A(j + 1)
                A(j + 1) = Z
            End If
        Next j
    Next i
    
    'Вывод массива
    For i = 0 To N - 1
        TextBox1.Text = TextBox1.Text + " " + Str(A(i))
    Next i
    
 End Sub

Последний раз редактировалось Скрипт; 29.12.2012 в 16:22.
Скрипт вне форума Ответить с цитированием
Старый 28.12.2012, 18:57   #3
doober
Старожил
 
Аватар для doober
 
Регистрация: 02.05.2009
Сообщений: 3,907
По умолчанию

Так должно работать
Код:
    For k = 0 To n - 1
        For i = 0 To n - 2
            If A(i) > A(i + 1) Then
                Z = A(i)
                A(i) = A(i + 1)
                A(i + 1) = Z
            End If
        Next i
    Next k
Анализ,обработка данных Недорого
doober вне форума Ответить с цитированием
Старый 28.12.2012, 19:08   #4
Sv.
Пользователь
 
Регистрация: 01.11.2012
Сообщений: 48
По умолчанию

спасибо
все работает, как надо)
Sv. вне форума Ответить с цитированием
Старый 28.12.2012, 21:52   #5
Djeki
Форумчанин
 
Регистрация: 24.01.2011
Сообщений: 136
По умолчанию Можно и так

Можно записать элементы в массив без сортировки, а затем массив отсортировать
Код:
Array.Sort(A)
Djeki вне форума Ответить с цитированием
Старый 28.12.2012, 22:19   #6
kuklp
Участник клуба
 
Регистрация: 02.05.2010
Сообщений: 1,390
По умолчанию

Цитата:
Сообщение от Djeki Посмотреть сообщение
Можно записать элементы в массив без сортировки, а затем массив отсортировать
Код:
Array.Sort(A)
И можете показать работающий пример?
mailto: kuklp60@gmail.com, ящики для благодарностей:
WM Z206653985942, R334086032478, U238399322728
kuklp вне форума Ответить с цитированием
Старый 28.12.2012, 23:16   #7
Djeki
Форумчанин
 
Регистрация: 24.01.2011
Сообщений: 136
Плохо

Цитата:
Сообщение от kuklp Посмотреть сообщение
И можете показать работающий пример?
Да, действительно не работает.. Пардон.
Djeki вне форума Ответить с цитированием
Старый 29.12.2012, 02:06   #8
nerv
Форумчанин
 
Аватар для nerv
 
Регистрация: 26.04.2010
Сообщений: 450
По умолчанию

Цитата:
Сообщение от Djeki Посмотреть сообщение
Можно записать элементы в массив без сортировки, а затем массив отсортировать
Код:
Array.Sort(A)
это Вы, батенька, яваскрипта насмотрелись
Тишина – самый громкий звук
nerv вне форума Ответить с цитированием
Старый 29.12.2012, 15:53   #9
ikki_pf
Форумчанин
 
Регистрация: 25.02.2012
Сообщений: 166
По умолчанию

ну почему же?
обыкновенный VB.NET
можно и A.Sort()
ikki_pf вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не сортирует по числам! Марина2108 Общие вопросы C/C++ 3 13.05.2012 17:41
Паскаль (Процедура-сортировка одномерного массива)Не сортирует . Виктор Cadet Помощь студентам 12 19.04.2012 00:03
Cкрипт, который сортирует и выводит в таблицу введенные в форму числа thesddd HTML и CSS 0 13.03.2012 21:57
не сортирует сразу 2 массива ashtone9130 Visual C++ 3 30.05.2011 11:03
сортирует фразу по алфавиту СИ, СИ++ Anapa Помощь студентам 1 18.02.2011 23:34