Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Ход работы. Основные сведения о массивах в языке C++.В случае использования простых переменных каждой области памяти для хранения одной вели­чины соответствует свое имя






Основные сведения о массивах в языке C++. В случае использования простых переменных каждой области памяти для хранения одной вели­чины соответствует свое имя. Если требуется работать с группой величин одного типа, их располагают в памяти последовательно и дают им общее имя, а различают по порядковому номеру. Такая последовательность однотипных величин называ­ется массивом. Массивы, как и любые другие объекты, можно размещать либо с помощью опера­торов описания в сегментах данных или стека, либо в динамической области памя­ти с помощью операций выделения памяти.

При описании массива после имени в квадратных скобках задается количество его элементов (размерность), например int a[10]. Массив располагается в зависимо­сти от места его описания либо в сегменте данных, либо в сегменте стека, и все инструкции по выделению памяти формирует компилятор до выполнения про­граммы. Вследствие этого размерность массива может быть задана только констан­той или константным выражением. Если при описании массива не указана раз­мерность, должен присутствовать инициализатор, в этом случае компилятор вы­делит намять по количеству инициализирующих значений. В дальнейшем мы увидим, что размерность может быть опущена также в списке формальных пара­метров.

Элементы массива нумеруются с нуля. При описании массива используются те же модификаторы (класс памяти, const и инициализатор), что и для простых пе­ременных. При описании массив можно инициализировать, то есть присвоить его элементам начальные значения, например:

int а[10] = {1, 1, 2, 2, 5, 100};

Для данного массива элементы имеют номера от 0 до 9. Номер элемента указыва­ется после его имени в квадратных скобках, например, а[0], а[3]. Инициализирующие значения для массивов записываются в фигур­ных скобках. Значения элементам присваиваются по порядку. Если элементов в массиве больше, чем инициализаторов, элементы, для которых значения не ука­заны, обнуляются:

 

int b[5] = {3. 2, 1}; //b[0]=3, b[l]=2, b[2]=l, b[3]=0, b[4]=0

 

Для доступа к элементу массива после его имени указывается номер элемента (индекс) в квадратных скобках. В следующем примере подсчитывается сумма элементов массива.

 

#include < iostream.h>

int main()

{

const int n = 10; int i, sum;

int marks[n] = {3. 4, 5, 4, 4};

setlocale(LC_ALL, " Russian");

for (i =0. sum = 0; i< n; i++) sum += marks[i];

cout < < " Сумма элементов: " < < sum;

return 0;

}

 

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

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

Идентификатор массива является константным указателем на его нулевой эле­мент. Например, для массива из предыдущего листинга имя mark - это то же самое, что & mark[0], а к i-му элементу массива можно обратиться, используя выражение *(mark+i). Можно описать указатель, присвоить ему адрес начала массива и работать с массивом через указатель. Следующий фрагмент программы копирует все эле­менты массива а в массив b:

 

int а[100], b[100];

int *ра = а; // или int *p = & а[0];

int *pb = b;

for(int i = 0; i< 100; 1++)

*pb++ = *pa++; // или pb[i] = pa[i];

Пример 4.1. Написать программу, которая для целочисленного массива из 100 элементов опре­деляет, сколько положительных элементов располагается между его максималь­ным и минимальным элементами.

Запишем алгоритм в самом общем виде.

1. Определить, где в массиве расположены его максимальный и минимальный эле­менты, то есть найти их индексы.

2. Просмотреть все элементы, расположенные между ними. Если элемент масси­ва больше нуля, увеличить счетчик элементов на единицу.

Ясно, что порядок расположения элементов в массиве заранее не известен, и сна­чала может следовать как максимальный, так и минимальный элемент, кроме того, они могут и совпадать. Поэтому прежде чем просматривать массив в поисках ко­личества положительных элементов, требуется определить, какой из этих индек­сов больше. Запишем уточненный алгоритм:

1. Определить, где в массиве расположены его максимальный и минимальный элементы:

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

- просмотреть массив, поочередно сравнивая каждый его элемент с ранее най­ денными максимумом и минимумом. Если очередной элемент больше ранее
найденного максимума, принять этот элемент за новый максимум (т.е. за­помнить его индекс). Если очередной элемент меньше ранее найденного
минимума, принять этот элемент за новый минимум.

2. Определить границы просмотра массива для поиска положительных элемен­тов, находящихся между его максимальным и минимальным элементами:

- если максимум расположен в массиве раньше, чем минимум, принять левую границу просмотра равной индексу максимума, иначе - индексу минимума.

- если максимум расположен в массиве раньше, чем минимум, принять правую границу просмотра равной индексу минимума, иначе - индексу максимума.

3. Обнулить счетчик положительных элементов. Просмотреть массив в указан­ном диапазоне. Если очередной элемент больше нуля, увеличить счетчик на единицу.

Для экономии времени при отладке значения элементов массива задаются путем инициализации.

 






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.