Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лаб_Раб_5С++.doc
Скачиваний:
5
Добавлен:
02.09.2019
Размер:
169.98 Кб
Скачать

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 Блок-схема

delete[] m;

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]<<” “;

}

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]