Формирование динамических массивов с использованием операций new и delete

 

Для динамического распределения памяти используются операции new и delete. Операция

 

new имя_типа

или

new имя_типа инициализатор

 

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

Примеры:

1) int *i;

i=new int(10);

2) float *f;

f=new float;

int *mas=new[5];

В примерах 1, 2 показано как выделить память под скалярные переменные, пример 3 показывает выделение памяти под массив переменных.

Операция delete указатель освобождает участок памяти ранее выделенный операцией new.

Пример:

Функция для формирования двумерного динамического массива

int ** make_matr(int n)

{

int **matr;

int i,j;

matr=new int*[n];

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

{

matr[i]=new int[n];

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

matr[i][j]=random(10);

}

return matr;

}

При формировании матрицы сначала выделяется памяти для массива указателей на одномерные массивы, а затем в цикле с параметром выделяется память под n одномерных массивов.

 

**matr

 

*matr[1] *matr[2] *matr[3] . . . . *matr[n]

 

 

Чтобы освободить память необходимо выполнить цикл для освобождения одномерных массивов

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

delete matr[i];

После этого освобождаем память на которую указывает указатель matr

delete [] matr;

Постановка задачи

 

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

Порядок выполнения работы

 

1. Ввести размер массива;

2. Сформировать массив с помощью операции new или библиотечных функций malloc (calloc);

3. Заполнить массив (можно с помощью датчика случайных чисел);

4. Выполнить задание варианта, сформировать новый массив(ы)-результат(ы);

5. Напечатать массив(ы)-результат(ы);

6. Удалить динамические массивы с помощью операции delete или библиотечной функции free.

 

Варианты

 

Вариант 1.

Сформировать одномерный массив Удалить из него элемент с заданным номером, добавить элемент с заданным номером.

 

Вариант 2.

Сформировать одномерный массив. Удалить из него элемент с заданным ключом, добавить элемент с заданным ключом.

 

Вариант 3.

Сформировать одномерный массив. Удалить из него К элементов, начиная с заданного номера, добавить элемент с заданным ключом.

 

Вариант 4.

Сформировать одномерный массив. Удалить из него элемент с заданным номером, добавить К элементов, начиная с заданного номера.

 

Вариант 5.

Сформировать одномерный массив. Удалить из него К элементов, начиная с заданного номера, добавить К элементов, начиная с заданного номера.

 

Вариант 6.

Сформировать двумерный массив. Удалить из него строку с заданным номером.

 

Вариант 7.

Сформировать двумерный массив. Удалить из него столбец с заданным номером.

 

Вариант 8.

Сформировать двумерный массив. Добавить в него строку с заданным номером.

 

Вариант 9.

Сформировать двумерный массив. Добавить в него столбец с заданным номером.

 

Вариант 10.

Сформировать двумерный массив. Удалить из него строку и столбец с заданным номером.

 

Вариант 11.

Сформировать двумерный массив. Добавить в него строку и столбец с заданным номером.

 

Вариант 12.

Сформировать двумерный массив. Удалить из него все строки, в которых встречается заданное число.

 

Вариант 13.

Сформировать двумерный массив. Удалить из него все столбцы, в которых встречается заданное число.

 

Вариант 14.

Сформировать двумерный массив. Удалить из него строку и столбец, на пересечении которых находится минимальный элемент.

 

Вариант 15.

Сформировать двумерный массив. Удалить из него строку и столбец, на пересечении которых находится максимальный элемент.

 

Вариант 16.

Сформировать массив строк. Удалить из него самую короткую строку.

 

Вариант 17.

Сформировать массив строк. Удалить из него самую длинную строку.

 

Вариант 18.

Сформировать массив строк. Удалить из него строку, начинающуюся на букву "а".

 

Вариант 19.

Сформировать массив строк. Удалить из него строку, начинающуюся и заканчивающуюся на букву "а".

 

 

Вариант 20.

Сформировать массив строк. Удалить из него строку, начинающуюся и заканчивающуюся на одну и ту же букву.

 

Вариант 21.

Сформировать массив строк. Удалить из него строку с заданным номером.

 

Вариант 22.

Сформировать массив строк. Удалить из него К строк, начиная со строки с заданным номером.

 

Вариант 23.

Сформировать массив строк. Удалить из него одинаковые строки. Сформировать массив строк. Удалить из него К последних строк.

 

Вариант 24.

Сформировать массив строк. Удалить из него К первых строк.

 

Вариант 24.

Сформировать массив строк. Добавить в него строку с заданным номером.

 

Содержание отчета

1. Постановка задачи.

2. Листинг функций для формирования массива, печати массива, преобразования массива, удаления массива.

3. Результаты выполнения работы.

4. Выводы.

Контрольные вопросы.

1. Понятие динамического и статического массива.

2. Операция sizeof().

3. Библиотечные функции для формирования динамических массивов. Примеры.

4. Формирование динамических массивов при помощи функций new и delete. Примеры.


 

Лабораторная работа № 7

 

«РАБОТА СО СТРОКАМИ»

 

Цель:Изучение символьных и строковых переменных и способов их обработки в языке Си.