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