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

Решение задач на динамические массивы

< Лекция 27 || Лекция 28: 123 || Лекция 29 >

Лабораторная работа 27. Решение задач на динамические массивы

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

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

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

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

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

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

  1. Двумерная целочисленная квадратная матрица размера n задает преобразование базиса Е в базис Е', а одномерный массив из n вещественных чисел – координаты вектора в базисе Е. Найдите координаты этого вектора в базисе Е'.
  2. Переставьте столбцы вещественной квадратной матрицы так, чтобы элементы ее побочной диагонали образовали невозрастающую последовательность.
  3. Латинским квадратом размера n называется таблица n x n, заполненная n различными символами таким образом, чтобы в каждой строке и в каждом столбце встречались все n символов (каждый по одному разу). Латинские квадраты существуют для любого n. Заполните латинский квадрат размера n натуральными числами от 1 до n.
  4. Для данной вещественной квадратной матрицы составьте соответствующую матрицу миноров каждого ее элемента.

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

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

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

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

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

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

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

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

  1. Всегда ли эффективно использование динамической памяти в программах?
  2. Почему ошибки при работе с динамической памятью относят к опасным?
  3. Опишите последствия использования в программах неинициализированных указателей.
  4. Почему в программах не следует оставлять "висячие" указатели?
  5. Почему выделенную ранее динамическую память следует освобождать после использования?
  6. К каким последствиям в работе программы приводит попытка освободить динамическую память, не выделенную ранее?
  7. Почему к нулевому указателю нельзя применить операцию разыменования?
  8. Какие используются способы представления двумерных динамических массивов?
  9. Назовите порядок выделения и освобождения памяти под двумерный динамический массив. Укажите различия для разных способов представления двумерных динамических массивов.
< Лекция 27 || Лекция 28: 123 || Лекция 29 >
Денис Курбатов
Денис Курбатов
Выполнение каких функций не изменяет позицию указателя в файле?
Владислав Нагорный
Владислав Нагорный
Высшее образование
Сергей Злобин
Сергей Злобин
Россия, Подольск
Олег Корсак
Олег Корсак
Латвия, Рига