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

При работе с массивами очень часто требуется одинаково обработать все элементы или часть элементов массива. Для этого организуется перебор массива.

Перебор элементов массива характеризуется:

· направлением перебора;

· количеством одновременно обрабатываемых элементов;

· характером изменения индексов.

По направлению перебора массивы обрабатывают :

· слева направо (от начала массива к его концу);

· справа налево (от конца массива к началу);

· от обоих концов к середине.

Индексы могут меняться

· линейно (с постоянным шагом);

· нелинейно (с переменным шагом).

1.5.1. Перебор массива по одному элементу

Элементы можно перебирать:

1) Слева направо с шагом 1, используя цикл с параметром

for (int i = 0; i < n; i++) {обработка a[i];}

2) Слева направо с шагом отличным от 1, используя цикл с параметром

for (int i = 0; i < n; i+=step) {обработка a[I];}

3) Справа налево с шагом 1, используя цикл с параметром

for (int i = n-1; i >= 0; i--) {обработка a[I];}

4) Справа налево с шагом отличным от 1, используя цикл с параметром

for (int i = n-1; i >= 0; i -= step) {обработка a[I];}

1.5.2 Формирование псевдодинамических массивов

При описании массива в программе надо обязательно указывать количество элементов массива для того, чтобы компилятор выделил под этот массив нужное количество памяти. Это не всегда бывает удобно, т. к. число элементов в массиве может меняться в зависимости от решаемой задачи. Динамические массивы реализуются с помощью указателей (см. п.1.2).

Псевдодинамические массивы реализуются следующим образом:

1) при определении массива выделяется достаточно большое количество памяти:

const int MAX_SIZE=100; //именованная константа

int mas[MAX_SIZE];

2) пользователь вводит реальное количество элементов массива меньшее N.

int n;

cout<<”\nEnter the size of array”<<MAX_SIZE<<”:”; cin>>n;

3) дальнейшая работа с массивом ограничивается заданной пользователем размерностью n.

                                       
        n                     MAX_SIZE

Таким образом, используется только часть массива.

1.5.3. Использование датчика случайных чисел для формирования массива.

Датчик случайных чисел (ДСЧ) – это программа, которая формирует псевдослучайное число. Простейший ДСЧ работает следующим образом:

1) Берется большое число К и произвольное .

2) Формируются числа х1 = дробная_часть (х0*К); х2 = дробная_часть (х1*К); и т. д.

В результате получается последовательность чисел х0, х1, х2,. . . беспорядочно разбросанных по отрезку от 0 до 1. Их можно считать случайными, а точнее псевдослучайными. Реальные ДСЧ реализуют более сложную функцию f(x).

В Си++ есть функция int rand() – возвращает псевдослучайное число из диапазона 0..RAND_MAX=32767, описание функции находится в файле <stdlib.h>.

Пример формирования и печати массива с помощью ДСЧ:

#include<iostream.h> #include<stdlib.h> using namespace std; void main() { int a[100]; int n; cout<<”Enter the size of array:”;cin>>n; for(int i = 0; i < n; i++) {a[i]=rand()%100-50; cout<<a[i]<<” “; } }

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

1) Элементы массива можно обрабатывать по два элемента, двигаясь с обеих сторон массива к его середине:

int i = 0, j = n-1; while( i < j) {обработка a[i] и a[j]; i++; j--;}

 

2) Элементы массива можно обрабатывать по два элемента, двигаясь от начала к концу с шагом 1 (т. е. обрабатываются пары элементов a[1] и a[2], a[2] и a[3] и т. д.):

for (i = 1; i < N; i ++) {обработка a[i] и a[i+1]}

 

3) Элементы массива можно обрабатывать по два элемента, двигаясь от начала к концу с шагом 2 (т. е. обрабатываются пары элементов a[1] и a[2], a[3] и a[4] и т. д.)