Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лаб9_VisualBasic.doc
Скачиваний:
2
Добавлен:
01.07.2025
Размер:
217 Кб
Скачать
☆

2.2. Подсчет суммы значений элементов массива и среднего значения для элементов массива

3. Дан целочисленный массив. Подсчитать число элементов, больших среднего значения всех элементов массива.

Решение. Задача делится на две подзадачи: сначала надо найти среднее значение элементов массива (за один проход по массиву), а затем подсчитать количество элементов со значением, превышающим найденное среднее (второй проход по массиву).

4. Магазин обслуживает за день 200 покупателей, каждый из которых потратил на покупку не более 1000 рублей. Подсчитать дневную прибыль магазина и сумму среднего потребительского чека.

Решение. Ниже представлен фрагмент кода для решения этой задачи. Отметим, что данную задачу можно решить без использования массива, обрабатывая каждый элемент последовательно. Если же в условии задачи необходимо будет найти всех покупателей, которые потратили на покупку сумму, превосходящую средний чек за день, то использование массива будет необходимостью.

Const n As Integer = 200, m As Integer = 1000

Dim mas(1 To n) As Integer

Dim i As Integer, sum As Long

Randomize

For i = 1 To n

mas(i) = Int(m * Rnd)

Next

sum = 0

For i = 1 To n

sum = sum + mas(i)

Next

MsgBox "Прибыль магазина: " + str(sum)

MsgBox "Средний чек: " + Format(sum / n,”0.00”)

2.3. Перестановка элементов массива в обратном порядке

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

Решение. Для всех индексов необходимо каждый i-й элемент поменять местами с -м элементом. Обратите внимание, что для обмена местами левой и правой половин массива цикл должен отработать только раз при любом n (как четном, так и нечетном). Ниже приведен фрагмент кода.

For i = 1 To n \ 2

t = X(i)

X(i) = X(n – i + 1)

X(n – i + 1) = t

Next

2.4. Циклический сдвиг элементов массива

6. Значения массива сдвинуть циклически вправо на одну позицию так, чтобы последний элемент стал первым.

Решение

Const n As Integer = 10

Dim X(1 To n) As Integer

Dim i As Integer, t As Integer

... 'заполнение массива данными

t = X(n)

For i = n To 2 Step -1

X(i) = X(i - 1)

Next

X(1) = t

7. Значения массива сдвинуть циклически вправо на k позиций.

Решение. Эту задачу можно решить следующим способом: выполнить k раз код из предыдущей задачи.

2.5. «Сжатие» массива

«Сжатие» (уплотнение) массива – это удаление из него элементов, отвечающих тем или иным условиям.

8. Дан целочисленный массив размерности n. «Сожмите» массив, выбросив из него каждый второй элемент. «Освободившиеся места» в правой части массива заполните нулями. Дополнительный массив не использовать.

Решение

Const n As Integer = 10

Dim A(1 to n) As Integer

Dim i As Integer, j As Integer, k As Integer

... ' заполнение массива данными

k = 0

i = 1

Do while i <= n

A(i – i \ 2) = A(i) ' перемещаем элемент с нечетным индексом

' на «свое» (новое) место

i = i + 2

Loop

For i = n – n \ 2 + 1 to n

A(i) = 0 ' последние (n – n \ 2 + 1) элементы обнуляем

Next

... ' вывод элементов массива

9. Дан массив целых чисел из n элементов, заполненный случайным образом числами из промежутка [0,10]. Удалить из него все нулевые элементы. Дополнительный массив не использовать.

Решение

1-й способ:

Dim n As Integer

Dim A() As Integer ' описание динамического массива целых чисел

Dim i As Integer, j As Integer

n = InputBox("Введите количество элементов массива")

ReDim A(1 To n) ' задать массиву А длину n

Randomize

For i = 1 To n

A(i) = Int(Rnd * 11) ' присвоить элементу массива случайное

' целое число из отрезка [0, 10]

Next i

i = 1

Do While i <= n ' цикл последовательного перебора имеющихся в

' массиве элементов; изначально их n штук

If A(i) <> 0 Then

i = i + 1 ' увеличение параметра цикла, если элемент не равен 0

Else

For j = i to n – 1 ' цикл для удаления из массива нулевого

A(j) = A(j + 1) ' элемента, т.е. на его место записывается

' значение элемента с индексом i+1, на его

Next ' место следующий элемент и т.д.

n = n - 1 ' уменьшение на единицу количества элементов массива

End If

Loop

ReDim Preserve A(1 To n)' изменить размер массива, сохранив данные

... ' вывод элементов массива

2-й способ:

Dim n As Integer

Dim A() As Integer

Dim i As Integer, k As Integer

n = InputBox("Введите количество элементов массива")

ReDim A(1 To n)

... ' заполнение массива случайными числами

k = 0

For i = 1 To n

If A(i) = 0 Then ' подсчитываем количество нулей

k =k + 1

Else

A(i – k) = A(i) ' перемещаем ненулевой элемент на первое

End If ' свободное место

Next

n = n – k ' количество элементов массива

ReDim Preserve A(1 To n)

... ' вывод элементов массива

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]