Опубликован: 02.02.2011 | Уровень: для всех | Доступ: свободно
Лекция 26:

Одномерные динамические массивы

< Лекция 25 || Лекция 26: 123 || Лекция 27 >

Лабораторная работа 25. Одномерные динамические массивы

Цель работы: изучить объявления, выделения и освобождения памяти для одномерных динамических массивов, обращения к элементам, научиться решать задачи с использованием одномерных динамических массивов в языке C++.

При выполнении лабораторной работы для каждого задания требуется написать программу на языке С++, которая получает на входе числовые данные (в зависимости от постановки задачи), выполняет генерацию, вывод одномерного массива указанного типа. Для хранения оговоренных в условии массивов следует использовать ресурсы динамической памяти. Ввод данных осуществляется с клавиатуры с учетом требований к входным данным, содержащихся в постановке задачи. Ограничениями на входные данные является диапазон используемого числового типа данных в языке С++ и максимально допустимый размер динамической памяти.

Теоретические сведения.

Ознакомьтесь с материалом лекции 25.

Задания к лабораторной работе.

Выполните приведенные ниже задания.

  1. Задан массив. Определить сколько раз меняется знак в данной последовательности чисел, запомнить номера позиций, в которых меняется знак.
  2. Задана последовательность из N вещественных чисел. Вычислить сумму чисел, порядковые номера которых являются числами Фибоначчи.
  3. Задана последовательность из N вещественных чисел. Найти частное средних арифметических значений элементов с нечетными и четными индексами.
  4. Напишите программу, оформив её в виде функций генерации, вывода и обработки массивов. Сформируйте динамический одномерный массив, заполните его случайными числами и выведите на печать. Добавьте после каждого отрицательного элемента его модуль и выведите массив на печать. Реализуйте данную программу двумя способами: 1) с помощью операций new и delete ; 2) с помощью библиотечных функций malloc (calloc) и free.

Указания к выполнению работы.

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

Следует реализовать каждое задание в соответствии с приведенными этапами:

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

Требования к отчету.

Отчет по лабораторной работе должен соответствовать следующей структуре.

  • Титульный лист.
  • Словесная постановка задачи. В этом подразделе проводится полное описание задачи. Описывается суть задачи, анализ входящих в нее физических величин, область их допустимых значений, единицы их измерения, возможные ограничения, анализ условий при которых задача имеет решение (не имеет решения), анализ ожидаемых результатов.
  • Математическая модель. В этом подразделе вводятся математические описания физических величин и математическое описание их взаимодействий. Цель подраздела – представить решаемую задачу в математической формулировке.
  • Алгоритм решения задачи. В подразделе описывается разработка структуры алгоритма, обосновывается абстракция данных, задача разбивается на подзадачи. Схема алгоритма выполняется по ЕСПД (ГОСТ 19.003-80 и ГОСТ 19.002-80).
  • Листинг программы. Подраздел должен содержать текст программы на языке программирования С++, реализованный в среде MS Visual Studio 2010.
  • Контрольный тест. Подраздел содержит наборы исходных данных и полученные в ходе выполнения программы результаты.
  • Выводы по лабораторной работе.
  • Ответы на контрольные вопросы.

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

  1. В каких ситуациях в программировании целесообразно использовать динамические массивы?
  2. Что будет возвращено при попытке объявить динамический массив недопустимо большого размера?
  3. Как размещаются в памяти элементы одномерного динамического массива?
  4. С какой целью используется первая пара скобок при объявлении ( Тип* ) malloc(N* sizeof(Тип))?
  5. С какой целью выполняется явное преобразование типов значений функций malloc (сalloc) при объявлении массивов?
  6. Почему указатель на одномерный динамический массив не всегда показывает на его начальный элемент?
  7. Какими способами можно обратиться к элементам одномерного динамического массива?
  8. С какой целью используются квадратные скобки в операции освобождения динамической памяти, выделенной под массив: delete [] mass;?
< Лекция 25 || Лекция 26: 123 || Лекция 27 >
Денис Курбатов
Денис Курбатов
Владислав Нагорный
Владислав Нагорный

Подскажите, пожалуйста, планируете ли вы возобновление программ высшего образования? Если да, есть ли какие-то примерные сроки?

Спасибо!