- •Одномерные массивы. Указатели методические указания
- •Содержание
- •Цель работы
- •1. Общие положения
- •1.1 Описание массива
- •1.2 Указатели
- •1.3 Типовые алгоритмы обработки массивов данных.
- •1.3.1 Нахождение суммы элементов массива
- •1.3.2 Поиск данных в массивах
- •1.3.3 Сортировка массивов данных
- •1.4 Динамические массивы
- •2. Содержание работы
- •3. Требования к отчету
- •4. Контрольные вопросы
- •Приложение а Варианты заданий по теме «Одномерные массивы»
- •Приложение б
1.4 Динамические массивы
Динамическим считается массив, который способен в любой момент изменять свой размер. Эта возможность обеспечивается за счет динамического выделения памяти под массив.
Идеология языка C++ предполагает, что каждый объект создаётся (объявляется) именно в том месте, где он нужен, и является работоспособным сразу после создания. Для этого каждый класс имеет определённый набор конструкторов — функций, которые должны автоматически запускаться при создании объекта (экземпляра данного класса) и инициализировать его члены.
При создании динамического массива необходимо указать его имя (указатель) и размерность, например
int n=101;
double* x = new double[n];
Будет выделен фрагмент динамической памяти 8х101=808 байт и адрес начала этого фрагмента помещен в x.
Освобождение памяти выполняется следующей операцией (квадратные скобки обязательны)
delete[] x;
Пример. Дан массив целых чисел, состоящий из N элементов. Заполнить его с клавиатуры. Вывести индексы тех элементов, значения которых больше значения предыдущего элемента (начиная со второго).
Начнем решение задачи с составления алгоритма.
Словесный алгоритм решения задачи следующий:
1. Запрос количества элементов N в массиве.
2. Ввод массива a[i], состоящего из N целых чисел.
3 . Просматриваются в цикле все элементы массива с целью найти так пары элементов в массиве, для которых выполняется соотношение: a[i-1]<a[i]. В случае, если в массиве найдено выполнение указанного соотношения, на экран выдается номер элемента массива i, для которого выполняется рассматриваемое соотношение.
На рисунке 2 дана детальная блок-схема алгоритма.
Программа, реализующая данный алгоритм, представлена ниже:
#include<iostream.h>
#include <conio.h>
main () {
int N, temp;
int i, k;
cout << "\n Введите N ";
cin >> N;
cout << "\n Введите " << N << "чисел ";
double *m = new double[N];
for (i=0; i<N; i++) cin >> m[i];
for (i=1; i<N; i++)
if (m[i-1]<m[i]) {
cout<<i<<”\n”;
}
Рис. 2 Блок-схема
getch();
}
2. Содержание работы
1 Составьте и отладьте программу решения следующей задачи: Задан массив из 6 целых чисел. Найдите сумму его элементов.
2 Дополните созданную программу. Добавьте фрагмент, позволяющий найти количество неотрицательных элементов в описанном выше массиве.
Возможный вид решения:
k=0;
for (i=0; i< 6; i++)
if (a[i] >= 0)k++;
cout << k;
3 Дополните программу. Найдите наименьший элемент в заданном массиве.
4 Дополните созданную программу. Поменяйте местами первый и последний элемент исходного массива.
Указание: Используйте алгоритм следующего вида:
c=a[1];
a[1]=a[6];
a[6]=c;
5 Отсортируйте заданный массив по приведенному алгоритму.
6 Выполните задание в соответствии с указанным преподавателем вариантом из приложения А.
7 Выполните задание из указанного преподавателем варианта приложения Б с использованием динамического выделения памяти. При задании массива использовать датчик случайных чисел (не забудьте подключить библиотеку <time.h>):
randomize(),
cout << "\n Введите N ";
cin >> N;
cout << "\n Введите " << N << "чисел \n";
int *a = new int[N];
for (i=0; i<N; i++) {
a[i]=rand();
cout<<a[i]<<” “;
}