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


Автор: Jenny 24.4.2007, 04:31
Народ, помогите пожалуйста с заданием: дан массив а1, а2, ..., аN. Расположить ненулевые элементы массива по убыванию; остальные элементы оставить на своих местах. Размерность массива вводите с помощью оператора InputBox. Значение элементов массива определить датчиком случайных чисел. Вывод массива выполнить в файл и на экран с помощью оператора вывода MsgBox. Я код составила, но как сделать чтобы нули не сортировались, а оставались на своих местах?

Код

Private Sub CommandButton1_Click()
Dim N As Integer
Dim a() As String
Dim i As Integer
N = InputBox("Введите размерность массива")
Open "D:\Mas.txt" For Output As #1
Randomize (i)
ReDim a(4)
a(1) = 5
a(2) = 3
a(3) = 0
a(4) = 4
Dim m As Integer
Dim swap As String
m = 4
Do
    For i = 1 To m - 1
        If a(i) > a(i + 1) Then
            swap = a(i)
            a(i) = a(i + 1)
            a(i + 1) = swap
        End If
    Next i
    m = m - 1
Loop While m > 0
For i = 1 To 4
MsgBox a(i)
Next i
Close #1
End Sub

 smile 


M
Alexeis
Модератор: не забывайте про подсветку http://forum.vingrad.ru/index.php?showtopic=126445

Автор: Genyaa 24.4.2007, 09:01
Я вижу решение через создание второго массива, равного по размерности исходному. В этом втором массиве в тех позициях, где в первом массиве нули, нужно поставить какой-нибудь признак, отличный от остальных (можно сделать просто копию исходного массива). Тогда отсортировав исходный массив уже реализованным Вами способом, нужно последовательно переставить элементы отсортированного массива так, чтобы позиции нулевых значений второго массива стали нулевыми в отсортированном.

Автор: Jenny 27.4.2007, 11:34
Я немного не поняла. К этому коду мне надо составить еще один массив, только вместо a(3) = 0 написать а(3) = ? А дальше я ничего не поняла. Я недавно с VB работаю, поэтому мне многое еще не понятно.    smile 

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