Двумерные динамические массивы
Лабораторная работа 26. Двумерные динамические массивы
Цель работы: изучить объявление, выделение и освобождение памяти под двумерные динамические массивы, обращение к элементам, научиться решать задачи с использованием двумерных динамических массивов на языке C++.
При выполнении лабораторной работы для каждого задания требуется написать программу на языке С++, которая получает на входе числовые данные (в зависимости от постановки задачи), выполняет генерацию и вывод двумерного массива указанного типа. Хранение оговоренных в каждой задаче двумерных массивов следует осуществить, используя ресурсы динамической памяти. В каждой задаче необходимо выполнить обработку двумерного массива. Для этого необходимо разработать алгоритм (поиска, замены или численной обработки в двумерных массивах) и реализовать его в виде отдельной функции. Ввод данных осуществляется с клавиатуры с учетом требований к входным данным, содержащихся в постановке задачи. Ограничениями на входные данные является диапазон используемого числового типа данных в языке С++ и максимально допустимый размер динамической памяти.
Теоретические сведения.
Ознакомьтесь с материалом лекции 26.
Задания к лабораторной работе.
Выполните приведенные ниже задания.
- В двумерном целочисленном динамическом массиве замените все четные элементы их половинами.
- Добавьте в двумерный динамический массив строку из одних нулей после каждой строки, сумма элементов которой больше заданного числа S.
- В двумерном вещественном динамическом массиве замените все отрицательные элементы их квадратами. Реализуйте данную программу двумя способами: 1) с помощью операций new и delete ; 2) с помощью библиотечных функций malloc (calloc) и free.
- Замените в двумерном целочисленном динамическом массиве размера 3x3 каждый элемент его алгебраическим дополнением.
Указания к выполнению работы.
Каждое задание необходимо решить в соответствии с изученными методами объявления, генерации и вывода двумерных динамических массивов в языке С++. Обработку данных необходимо выполнить, используя алгоритмы поиска, замены или перестановок данных в двумерных массивах. В задаче 4 перед заменой следует выполнить числовую обработку данных массива. Вывод входных данных и результатов их обработки следует осуществить на экран. При разработке программного кода требуется использовать метод процедурной абстракции и комментировать фрагменты кода.
Следует реализовать каждое задание в соответствии с приведенными этапами:
- изучить словесную постановку задачи, выделив при этом все виды данных;
- сформулировать математическую постановку задачи;
- выбрать метод решения задачи, если это необходимо;
- разработать графическую схему алгоритма;
- записать разработанный алгоритм на языке С++;
- разработать контрольный тест к программе;
- отладить программу;
- представить отчет по работе.
Требования к отчету.
Отчет по лабораторной работе должен соответствовать следующей структуре.
- Титульный лист.
- Словесная постановка задачи. В этом подразделе проводится полное описание задачи. Описывается суть задачи, анализ входящих в нее физических величин, область их допустимых значений, единицы их измерения, возможные ограничения, анализ условий при которых задача имеет решение (не имеет решения), анализ ожидаемых результатов.
- Математическая модель. В этом подразделе вводятся математические описания физических величин и математическое описание их взаимодействий. Цель подраздела – представить решаемую задачу в математической формулировке.
- Алгоритм решения задачи. В подразделе описывается разработка структуры алгоритма, обосновывается абстракция данных, задача разбивается на подзадачи. Схема алгоритма выполняется по ЕСПД (ГОСТ 19.003-80 и ГОСТ 19.002-80).
- Листинг программы. Подраздел должен содержать текст программы на языке программирования С++, реализованный в среде MS Visual Studio 2010.
- Контрольный тест. Подраздел содержит наборы исходных данных и полученные в ходе выполнения программы результаты.
- Выводы по лабораторной работе.
- Ответы на контрольные вопросы.
Контрольные вопросы
- В чем сходство и отличие одномерных и двумерных динамических массивов?
- Как размещаются в памяти элементы двумерного динамического массива?
- Что является значением двойного указателя при объявлении двумерных динамических массивов?
- Как выделяется память для двумерных динамических массивов?
- Какими способами можно обратиться к элементам двумерного динамического массива?
- Назовите порядок освобождения памяти, выделенной под двумерный динамический массив.
- Какая область динамической памяти, выделенной под двумерный динамический массив, будет освобождена, если только применить операцию: delete [] mass;?
- Какова цель использования тройных указателей в программах?