Обработка одномерных массивов (1)

Обработка одномерных массивов

  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;

  • число используемых элементов может быть меньше, чем число элементов в описании массива.

  1. Ввод массива

Процедура:

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

for i=1 to n do

x (i)= InputBox (“Введите элемент " & i , "Ввод")

Next i

  1. Вывод массива


Фрагмент процедуры (после ввода):

  • Вывод в окно сообщений

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

  1. Типовые алгоритмы обработки одномерных массивов

    1. Вычисление суммы и произведения элементов, находящихся на разных местах в массиве

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

    1. В

      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. -1 0 -2 -2 0 4 на нечетных местах нет положительных

элементов

  1. 2 2 4 -6 3 0 на нечетных местах все элементы положит.

среднее арифм. = (2+4+3)/3= 3

  1. 1 2 -1 3 7 5 -5 на нечетных местах часть элементов

положительная

среднее арифм. = (1+7)/2=4

Для второй части интервал [a, b):

  1. [-4, 5) нет элементов вне интервала

  2. [5, 10) все элементы вне интервала произв = 2*2*4*-6*3*0=0

  3. [-4,5) часть элементов вне интервала произв = 7*5-5= -175

    1. Перестановка местами и замена элементов массива

Для перестановки местами двух элементов массива необходимо объявить дополнительную переменную того же типа, который имеют элементы массива.

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)

    1. Нахождение минимальных и максимальных элементов массива и определение их номеров

Графическая схема алгоритма:


:

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


Тесты:

  1. минимальный элемент находится на первом месте в массиве;

  2. минимальный элемент находится на последнем месте в массиве;

  3. минимальный элемент находится в середине массива;

  4. зависит от конкретных условий задачи.

Пример. Найти минимальный из элементов массива с номерами, кратными трем, и поменять его местами со следующим элементом массива.

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. Формирование новых массивов

Постановка задачи: из исходного массива перенести в новый массив элементы, удовлетворяющие некоторому условию, не меняя их взаимного расположения.



1


2



k=0

3




i=iнач

4


нет


5



да

да


нет

6


7



8




9






10


11


12




13



Тесты:

  1. новый массив не сформирован, т.к. в исходном массиве нет элементов, удовлетворяющих заданному условию;

  2. новый массив сформирован из всех элементов исходного массива, т.к. они все удовлетворяют условию;

  3. новый массив сформирован из части элементов исходного массива, удовлетворяющих заданному условию;

Пример. Даны два массива 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