Анализ элементов массива

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

К задачам подобного рода можно отнести: вычисления суммы и среднеарифметического значений элементов, нахождение количества определённых элементов, вычисление статистических характеристик (отклонений, медиан, дисперсий) и т.п.

Некоторые из этих задач решаются с помощью нескольких последовательных переборов всех элементов массива.

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

Алгоритм решения задачи представлен на рисунке 17.

На рисунке 17 блоки 2, 3, 4 используются для ввода исходных данных. Блок 3 организует цикл с параметром i, который, изменяясь от 1 n (n – количество элементов в массиве), перебирает все индексы элементов массива. Блок 4 в каждом новом проходе цикла заполняет последовательно каждый из элементов массива.

Блок 5 инициализирует служебные переменные: chNO используется для подсчёта количества ненулевых элементов, chP используется для подсчёта количества положительных элементов.

Далее блок 6 организует перебор всех элементов массива, аналогично блоку 3. В этом цикле каждый элемент проверяется на положительность и отличность от 0. Если элемент положительный (блок 7), то увеличивается на 1 значение переменной chP (блок 8). Затем снова выполняется проверка: если элемент не равен нулю (блок 9), то увеличивается на 1 значение переменной chNO (блок 10).

Рисунок 17 – Блок-схема алгоритма вычисления процента положительных значений среди ненулевых элементов массива

После окончания цикла вычисляем требуемый процент (блок 11) и выводим полученное значение (блок 12).

В таблице 8 приведена трассировка части алгоритма (рис. 17). Каждая строка трассировочной таблицы соответствует выполнению определённого алгоритмического блока. В колонках представлены значения определённых переменных, или выражений, необходимых для пояснения алгоритма. Для удобства восприятия жирным в таблице выделены значения, которые изменились во время выполнения соответствующего блока.

Таблица 8 – Трассировка алгоритма подсчёта количества
положительных и ненулевых элементов

№ блока i chNO chP A[i] A
         
...
        -2 -2       -1
        -2 -2       -1
        -2 -2       -1
        -2 -2       -1
          -2       -1
          -2       -1
          -2       -1
          -2       -1
          -2       -1
          -2       -1
          -2       -1
          -2       -1
          -2       -1
          -2       -1
          -2       -1
          -2       -1
          -2       -1
          -2       -1
        -1 -2       -1
        -1 -2       -1
        -1 -2       -1
        -1 -2       -1
        -1 -2       -1
        -1 -2       -1
...

Реализация алгоритма в программу выглядит следующим образом:

program Proz;

Var

A: array [1..10] of real;

chNO,chP,n,i:integer;

Begin

writeln('введите размер массива');

readln(n);

for i:=1 to n do

readln(A[i]);

chNO:= 0;

chP:= 0;

for i:=1 to n do

Begin

if A[i]>0 then

chP:= chP + 1;

if A[i]<>0 then

chNO:= chNO + 1;

end;

writeln('процент положительных значений -', chP/chNO*100);

End.

Рассмотрим ещё один пример: необходимо найти все чётные элементы в массиве А и поместить их в массив В.

Алгоритм решения задачи представлен на рисунке 18.

В целом рассматриваемый алгоритм (рис. 18) схож с алгоритмом поиска определённых элементов. Разница состоит в том, что значения найденных элементов не накапливаются для последующей обработки, а перемещаются в новый массив.

Для индексов найденных элементов используется независимый счётчик j. В начале перебора ему присваивается значение 1 (блок 5). При нахождении в исходном массиве первого чётного элемента выполняется его запись в массив В под номером j (j = 1), и значение счётчика j увеличивается на единицу и становится равным 2 (блоки 7, 8). Соответственно, следующий найденный элемент будет помещён в массив В под номером 2.

Рисунок 18 – Блок-схема алгоритма поиска
чётных элементов

В таблице 9 приведена трассировка части алгоритма (рис. 18). Каждая строка трассировочной таблицы соответствует состоянию переменных после выполнения определённого алгоритмического блока. В колонках представлены значения определённых переменных, или выражений, необходимых для пояснения алгоритма. Для удобства восприятия жирным в таблице выделены значения, которые изменились во время выполнения соответствующего блока.

Таблица 9 – Трассировка алгоритма копирования чётных
элементов из массива А в массив В

№ блока A[i] i A j B
                   
...
  - -                      
                           
                           
                           
                           
                           
                           
                           
                           
                           
                           
                           
                           
                           
                           
...

Реализация алгоритма в программу выглядит следующим образом:

program A_Bmas;

Var

B,A:array[1..100] of integer;

n,i,j:integer;

Begin

write('n>');

read(n);

for i:=1 to n do

Begin

write('A[',i,']→');

read(A[i]);

end;

j:=1;

for i:=1 to n do

Begin

if A[i] mod 2 = 0 then

Begin

B[j]:=A[i];

j:=j+1;

end;

end;

for i:=1 to j-1 do

writeln(B[i]);

End.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: