Вопрос задан 03.08.2026 в 15:27. Предмет Информатика. Спрашивает Фесенко Макс.

Сформировать массив N целых чисел. Подсчитать количество нулевых элементов и исключить их из массива. VBA

Перейти к ответам

Ответы на вопрос

Отвечает Kurus Valeria.

В VBA размер обычного массива нельзя уменьшить с удалением элементов «внутри» массива. Поэтому создаётся второй массив, в который переписываются только ненулевые элементы.

VB
Option Explicit

Sub 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 хранит количество нулей. Размер нового массива определяется выражением:

VB
nonZeroCount = N - zeroCount

Затем цикл проверяет каждый элемент исходного массива. Когда элемент не равен нулю, он записывается в массив B:

VB
If A(i) <> 0 Then
    B(j) = A(i)
    j = j + 1
End If

Если все элементы исходного массива равны нулю, новый массив не создаётся, поскольку в VBA нельзя объявить массив с нулевым количеством элементов.

Похожие вопросы

Топ вопросов за вчера в категории Информатика

Последние заданные вопросы в категории Информатика

Задать вопрос