Вопрос задан 03.08.2026 в 15:27.
Предмет Информатика.
Спрашивает Фесенко Макс.
Сформировать массив N целых чисел. Подсчитать количество нулевых элементов и исключить их из массива. VBA
Ответы на вопрос
Отвечает Kurus Valeria.
В VBA размер обычного массива нельзя уменьшить с удалением элементов «внутри» массива. Поэтому создаётся второй массив, в который переписываются только ненулевые элементы.
VBOption ExplicitSub DeleteZeroElements()Dim A() As Long 'Исходный массив Dim B() As Long 'Массив без нулей Dim N As Long Dim i As Long Dim j As Long Dim zeroCount As Long Dim nonZeroCount As Long Dim originalText As String Dim resultText As String
'Ввод количества элементов N = Val(InputBox("Введите количество элементов массива:", _ "Размер массива"))
If N <= 0 Then MsgBox "Количество элементов должно быть больше нуля.", vbExclamation Exit Sub End If
'Создание исходного массива ReDim A(1 To N)
'Заполнение массива For i = 1 To N A(i) = Val(InputBox("Введите элемент A(" & i & "):", _ "Заполнение массива")) Next i
'Подсчёт нулевых элементов zeroCount = 0
For i = 1 To N If A(i) = 0 Then zeroCount = zeroCount + 1 End If Next i
'Количество ненулевых элементов nonZeroCount = N - zeroCount
'Формирование строки с исходным массивом For i = 1 To N originalText = originalText & A(i) & " " Next i
'Создание нового массива без нулей If nonZeroCount > 0 Then
ReDim B(1 To nonZeroCount)
j = 1
For i = 1 To N If A(i) <> 0 Then B(j) = A(i) j = j + 1 End If Next i
'Формирование строки с результатом For i = 1 To nonZeroCount resultText = resultText & B(i) & " " Next i
Else resultText = "Массив пуст: все элементы были равны нулю." End If
'Вывод результата MsgBox "Исходный массив:" & vbCrLf & _ originalText & vbCrLf & vbCrLf & _ "Количество нулевых элементов: " & zeroCount & vbCrLf & vbCrLf & _ "Массив после удаления нулей:" & vbCrLf & _ resultText, _ vbInformation, "Результат"End Sub
Например, для исходного массива:
5 0 -3 0 8 0 4
количество нулевых элементов будет равно 3, а новый массив примет вид:
5 -3 8 4
Переменная zeroCount хранит количество нулей. Размер нового массива определяется выражением:
VBnonZeroCount = N - zeroCount
Затем цикл проверяет каждый элемент исходного массива. Когда элемент не равен нулю, он записывается в массив B:
VBIf A(i) <> 0 Then B(j) = A(i) j = j + 1 End If
Если все элементы исходного массива равны нулю, новый массив не создаётся, поскольку в VBA нельзя объявить массив с нулевым количеством элементов.
Похожие вопросы
Топ вопросов за вчера в категории Информатика
Последние заданные вопросы в категории Информатика
Предметы
-
Математика
-
Литература
-
Алгебра
-
Русский язык
-
Геометрия
-
Английский язык
-
Химия
-
Физика
-
Биология
-
Другие предметы
-
История
-
Обществознание
-
Окружающий мир
-
География
-
Українська мова
-
Информатика
-
Українська література
-
Қазақ тiлi
-
Экономика
-
Музыка
-
Право
-
Беларуская мова
-
Французский язык
-
Немецкий язык
-
МХК
-
ОБЖ
-
Психология
-
Физкультура и спорт
-
Астрономия
-
Кыргыз тили
-
Оʻzbek tili

