Перебор массива по одному элементу
Обработка одномерных массивов
При работе с массивами очень часто требуется одинаково обработать все элементы или часть элементов массива. Для этого организуется перебор массива.
Перебор элементов массива характеризуется:
- направлением перебора;
- количеством одновременно обрабатываемых элементов;
- характером изменения индексов.
По направлению перебора массивы обрабатывают:
- слева направо (от начала массива к его концу);
- справа налево (от конца массива к началу);
- от обоих концов к середине.
Индексы могут меняться
- линейно (с постоянным шагом);
- нелинейно (с переменным шагом).
Элементы можно перебирать:
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) при определении массива выделяется достаточно большое количество памяти:
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 |
Т. о. используется только часть массива.
6.2.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>
void main()
{
int a[100];
int n;
cout<<”\nEnter the size of array:”;cin>>n;
for(int I=0;I<n;I++)
{a[I]=rand()%100-50;
cout<<a[I]<<” “;
}
}
В этой программе используется перебор массива по одному элементу слева направо с шагом 1.
Задача 1
Найти максимальный элемент массива.
#include<iostream.h>
#include<stdlib.h>
void main()
{
int a[100];
int n;
cout<<”\nEnter the size of array:”;cin>>n;
for(int I=0;I<n;I++)
{a[I]=rand()%100-50;
cout<<a[I]<<” “;
}
int max=a[0];
for(I=1;I<n;I++)
if (a[I]>max)max=a[I];
cout<<”\nMax=”<<max”;
}
В этой программе также используется перебор массива по одному элементу слева направо с шагом 1.
Задача 2
Найти сумму элементов массива с четными индексами.
#include<iostream.h> #include<stdlib.h> void main() { int a[100]; int n; cout<<”\nEnter the size of array:”;cin>>n; for(int I=0;I<n;I++) {a[I]=rand()%100-50; cout<<a[I]<<” “; } int Sum=0; for(I=0;I<n;I+=2) Sum+=a[I];//элементы с индексами 0, 2, 4… cout<<”\nSum=”<<Sum”; } |
Ввод массива | |||
//Второй способ for(I=0;I<n;I++) if(I%2==0)Sum+=a[I]; ];//элементы с индексами 0, 2, 4… cout<<”\nSum=”<<Sum”; |