Добавил:
ФКН Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Семестр 2 / Алгоритмизация Практика 2 язык С

.pdf
Скачиваний:
89
Добавлен:
12.04.2020
Размер:
267.28 Кб
Скачать

Алгоритмизация и программирование – семестр 2

Практическое занятие №2 «Динамические массивы»

Требования к заданию:

1.Выполнение заданий организовать в формате интерфейс-меню с указанными функционалами.

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

Задания (2 балла):

1.(1 балл). Работа с одномерным динамическим массивом.

Функционалы:

1.- создание массива с длиной, заданной пользователем;

2.- заполнение массива случайными числами в интервале 0-9;

3.- довыделение 1 ячейки;

4.- удаление 1 ячейки;

5.- удаление М значений из массива (диапазон ячеек для удаления задает пользователь);

6.- добавление М значений в массив (диапазон ячеек задает пользователь);

7.- вывод массива на экран;

8.- выход.

2.(1 балл). Работа с прямоугольным двумерным динамическим массивом.

Функционалы:

1.- создание массива с размерами, заданными пользователем;

2.- заполнение массива случайными числами в интервале 0-9;

3.- добавление 1 строки в указанное пользователем место массива;

4.- добавление 1 столбца в указанное пользователем место массива;

5.- удаление указанной пользователем строки;

6.- вывод массива на экран;

7.- выход.

Бонус (1 балл):

Задание 2 сделать с помощью «гибридных» массивов, в которых «старший» массив указателей

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

«Гибридные» многомерныединамические массивы

Динамический массив — это массив, расположенный в динамической памяти и доступный

только через указатель.

В языке Си бывают массивы указателей:

int* arr[5];

// массив из 5 указателей на int

Каждый из этих 5-ти указателей можно использовать по своему усмотрению. Например — выделить под каждый из них по блоку динамической памяти на 10 int’ов:

for(int i=0; i<5; i++){

arr[i] = (int*)malloc(10*sizeof(int));

}

Графически это выглядит следующим образом:

Практическоезанятие№2

Страница1

Алгоритмизация и программирование – семестр 2

arr

arr[0] arr[0][0] arr[0][1] … arr[0][9] arr[1] arr[1][0] arr[1][1] … arr[1][9] arr[2] arr[2][0] arr[2][1] … arr[2][9] arr[3] arr[3][0] arr[3][1] … arr[3][9] arr[4] arr[4][0] arr[4][1] … arr[4][9]

Работа с таким массивом осуществляется по общим правилам обращения с массивами и указателями.

Когда такой массив больше не нужен — его аналогичным образом нужно удалить (вернуть память системе):

for(int i=0; i<5; i++){ free(arr[i]);

}

Настоящие многомерныединамические массивы

На практике описанный выше «гибридный» вариант используется редко. Гораздо чаще «главный» массив (массив указателей на массивы) тоже создается как динамический. Ну а поскольку в нем хранятся указатели (элементы типа int*), то указатель на этот массив должен иметь на одну звездочку больше (int** — указатель на указатель на int).

Его создание (и удаление) требуют на одну операцию выделения (и освобождения) памяти больше.

Практическоезанятие№2

Страница2