Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЛР10-С++-26-апреля-2012.doc
Скачиваний:
24
Добавлен:
15.09.2019
Размер:
2.35 Mб
Скачать

1.3. Динамические массивы

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

int n=20;

int *a = new int[n];

Здесь описан указатель a на целую величину, которому присваивается адрес начала непрерывной области динамической памяти, выделенной с помощью оператора new. Выделяется столько памяти, сколько необходимо для хранения n величин типа int. Величина n может быть переменной.

Примечание: Обнуление памяти при ее выделении не происходит. Инициализировать динамический массив нельзя.

Обращение к элементу динамического массива осуществляется так же, как и к элементам обычного массива. Например: a[0], a[1], …, a[9].

Можно обратиться к элементу массива другим способом: *(a+1), …,*(a+9), *(a+i), т.к. в переменной – указателе a хранится адрес начала массива. Для получения адреса, например, 9 – го его элемента к этому адресу прибавляется 9·sizeof(int) (9 умножить на·длину элемента типа int), т.е. к начальному адресу a прибавляется смещение 9. Затем с помощью операции *(разадресации) выполняется выборка значения из указанной области памяти.

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

delete [ ] имя массива.

Так например, для одномерного массива a:

delete [ ] a; .

Время "жизни" динамического массива определяется с момента выделения динамической памяти до момента ее освобождения.

1.4. Программирование вычислительных процессов, содержащих одномерные массивы (Алгоритмы обработки одномерных массивов)

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

Вы­числения же реализуются обычно с использованием оператора цикла и в первую очередь оператора цикла со спецификацией типа арифметической прогрессии for (см. лаб. раб. 7).

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

1.4.1. Инициализация массива

Инициализация массива – это присваивание элементам массива начальных значений. Инициализацию массива можно выполнить на этапе описания массива, как это показано в п.1.3. Но в том случае, когда начальные значения получают лишь некоторые элементы массива, а остальные вычисляются в процессе выполнения программы, в программе записывают операторы присваивания. Например:

a[0]= –1; a[1]=1.1;

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

Пример 10.1

for(i=0;i<n;i++)

a[i]=0;

// или с помощью цикла while

i=0;

while (i<n)

{

a[i]=0;

i=i+1;

}

Рис. 10.1. Алгоритм и фрагмент программы инициализации массива

В представленном алгоритме все элементы массива в цикле последовательно инициализируются значением – 0.