Обработка одномерных массивов (1)
Обработка одномерных массивов
Понятие и описание массива
Одномерным массивом называется упорядоченная последовательность величин одного типа, имеющих одно имя, но различающихся индексами.
Индекс – это выражение целого типа, определяющее положение отдельной величины в последовательности. Каждая отдельная величина называется элементом массива.
Объявление массива:
Dim <идентификатор> (Nнач To Nкон) As < тип элементов>
Nнач, Nкон – это минимальное и максимальное значение индекса, обязательно константы. Обычно Nнач=1, тогда Nкон это максимально возможное число элементов в массиве.
Пример:
Dim x (1 To 20) As Byte
Обращение к элементу массива:
<идентификатор массива> (<индекс>)
x (3) – третий элемент массива x,
x (i+2) – элемент массива x с индексом i+2
(i при этом должно иметь значение).
Свойства элементов массива:
все элементы массива имеют один тип;
номера элементов – это последовательные целые числа от Nнач до Nкон с шагом 1;
число используемых элементов может быть меньше, чем число элементов в описании массива.
Ввод массива


Процедура:
n = InputBox ("Введите число элементов" , "Ввод")
for i=1 to n do
x (i)= InputBox (“Введите элемент " & i , "Ввод")
Next i
Вывод массива

Фрагмент процедуры (после ввода):
Вывод в окно сообщений
Dim Str As String
Str="Исходный массив" & vbCr
For i=1 to n
Str=Str & x(i) & " "
Next i
MsgBox Str , , "Вывод массива"
Вывод в ячейки рабочего листа
Cells (1,1)="Исходный массив"
for i=1 to n
Cells (2 , i) = x(i)
Next i
Типовые алгоритмы обработки одномерных массивов
Вычисление суммы и произведения элементов, находящихся на разных местах в массиве
S=0 для i=1..n S=S+x(i)
P=1 для i=1..n P=P*x(i)
Общая схема алгоритма:

Пример 1: Вычислить сумму квадратов
элементов, находящихся в массиве на
местах с номерами, кратными трем.
S=0
i=3
While i<=n
S=S+x(i)^2
i=i+3
Wend
<Вывод S>

8
Пример 2: Вычислить произведение элементов, находящихся в массиве на местах с третьего по седьмое
включительно.
if n <7 then
<вывод сообщения >
else
P= 1
For i = 3 to 7
P=P*x(i)
Next i
<вывод Р>
End if
В
9`E
ычисление суммы, произведения и количества элементов, удовлетворяющих заданному условию и находящихся на разных местах в массиве
Общая схема алгоритма:

Пример3: Вычислить количество элементов, больших заданного числа a и находящихся в массиве на местах с четными номерами.
Схема алгоритма:
:

Фрагмент процедуры:
с помощью оператора цикла While
k=0
i=2
While i<=n
if x(i)> a then k=k+1
i=i+2;
Wend
с помощью оператора цикла For
k=0
For i=2 To n Step 2
if x(i)> a then k=k+1
Next i
Пример 4. Вычислить среднее арифметическое положительных элементов массива, находящихся в массиве на нечетных местах, и произведение элементов вне интервала [a,b).
Таблица используемых переменных
|
Имя переменной в задаче |
Имя переменной в программе |
Тип переменной |
Примечание |
|
|
- |
n |
Byte |
число элементов массива |
Исходные данные |
|
- |
x |
(1To10) As Single |
исходный массив |
|
|
a |
a |
Single |
границы интервала |
|
|
b |
b |
Single |
||
|
- |
Sr |
Single |
среднее арифметическое положительных элементов на нечетных местах |
Результат |
|
- |
P |
Single |
произведение элементов вне интервала |
|
|
- |
i |
Byte |
номер элемента в массиве |
Вспомогательные переменные (промежуточный результат) |
|
- |
S |
Single |
сумма положительных элементов на нечетных местах |
|
|
- |
K |
Byte |
количество положительных элементов на нечетных местах |
|
|
- |
m |
Byte |
переключатель для определения наличия элементов вне интервала |
|
Текст процедуры:
Sub prim4 ()
Dim x (1 To10) As Single
Dim n As Byte, K As Byte, i As Byte, mAs Byte
Dim Sr As Single, P As Single, S As Single, a As Single, b As Single
<ввод n,x>
<ввод a,b>
<вывод x>
<вывод a,b>
S=0
K=0
For i=1 to n Step 2
If x(i)>0 Then
S=S+x(i)
K=K+1
End If
Next i
If K= 0 Then
Cells (4,1)="нет положительных эл-в на нечетных местах"
Else
Sr=S/K;
Cells(4,1)="Среднее арифметич. положит. эл-в на
нечетных местах=" & Sr
End If
// вторая часть
P=1
m=0
For i=1 to n
If (x(i)< a) or (x(i)>=b) Then
P=P*x(i)
m=1
End If
Next i
If m = 0 Then
Cells(5,1)="нет элементов вне интервала"
Else
Cells(5,1)= "Произведение элементов вне интервала =" & P
End Sub
Тесты:
Для первой части
-1 0 -2 -2 0 4 на нечетных местах нет положительных
элементов
2 2 4 -6 3 0 на нечетных местах все элементы положит.
среднее арифм. = (2+4+3)/3= 3
1 2 -1 3 7 5 -5 на нечетных местах часть элементов
положительная
среднее арифм. = (1+7)/2=4
Для второй части интервал [a, b):
[-4, 5) нет элементов вне интервала
[5, 10) все элементы вне интервала произв = 2*2*4*-6*3*0=0
[-4,5) часть элементов вне интервала произв = 7*5-5= -175
Перестановка местами и замена элементов массива
Для перестановки местами двух элементов массива необходимо объявить дополнительную переменную того же типа, который имеют элементы массива.
Dim x (1 To10) As Single
Dim p As Single
Пример 1. Поменять местами второй и четвертый элементы массива:
p = x (2)
x (2) = x(4)
x (4)=p
Пример 2. Поменять местами первый и последний элементы массива:
p=x(1)
x (1)=x(n)
x (n) =p
Пример 3. Поменять местами предпоследний элемент массива с элементом с заданным номером k:
If k = n -1 then
MsgBox “Обмен не нужен, т.к. …..”
else
p = x (n-1)
x (n-1) = x (k)
x (k) = p
End If
Пример 4. Заменить положительные элементы массива на последний элемент массива.
For i:=1 to n-1 do
If x(i)>0 Then x(i) =x(n)
Нахождение минимальных и максимальных элементов массива и определение их номеров
Графическая схема алгоритма:

:
При поиске минимального элемента блок 7 должен иметь вид:

Тесты:
минимальный элемент находится на первом месте в массиве;
минимальный элемент находится на последнем месте в массиве;
минимальный элемент находится в середине массива;
зависит от конкретных условий задачи.
Пример. Найти минимальный из элементов массива с номерами, кратными трем, и поменять его местами со следующим элементом массива.
min=x(3)
n_min=3
For i=6 to n Step 3
If x(i) < min then
min=x(i);
n_min=i
End If
Next i
<вывод min, n_min>
If n_min = n then
ShowMessage (“минимальный элемент – последний”)
Else
p=x(n_min) x(n_min)=x(n_min+1)
x(n_min)=x(n_min+1) x(n_min+1)= min
x(n_min+1)=p
<вывод массива х>
End If
Формирование новых массивов
Постановка задачи: из исходного массива перенести в новый массив элементы, удовлетворяющие некоторому условию, не меняя их взаимного расположения.


1

2

k=0
3


i=iнач
4


нет
5


да
да

нет
6



7


8




9





10
11

12




13

Тесты:
новый массив не сформирован, т.к. в исходном массиве нет элементов, удовлетворяющих заданному условию;
новый массив сформирован из всех элементов исходного массива, т.к. они все удовлетворяют условию;
новый массив сформирован из части элементов исходного массива, удовлетворяющих заданному условию;
Пример. Даны два массива a и b. Переписать из них элементы в массив с по следующему правилу: из массива a квадраты элементов, находящихся в массиве на местах с четными номерами, из массива b элементы, которые не больше, чем последний элемент массива a.


k=0
i=2
While i<=n
k=k+1
c(k)= a(i)^2
i=i+2
Wend
For i=1 to m
If b(i)<= a(n) Then
k= k +1
c(k)=b(i)
End If
Next i
If k = 0 then
Cells (5,1)="новый массив не сформирован"
Else
Cells (5,1)="Cформированный массив"
For i =1 to k
Cells( 6,i)=c(i)
End If