Курсовая с практикой на тему Проектирование приложений обработки матриц в среде MS Visual Studio (Вариант 3)
-
Оформление работы
-
Список литературы по ГОСТу
-
Соответствие методическим рекомендациям
-
И еще 16 требований ГОСТа,которые мы проверили
Введи почту и скачай архив со всеми файлами
Ссылку для скачивания пришлем
на указанный адрес электронной почты
Содержание:
ВВЕДЕНИЕ 3
УСЛОВИЕ ЗАДАЧИ СОГЛАСНО ВАРИАНТУ 6
ОПИСАНИЕ ДАННЫХ 7
БЛОК_СХЕМА АЛГОРИТМА 9
СРАВНЕНИЕ РАЗЛИЧНЫХ ВАРИАНТОВ 11
ПРОГРОГРАММНЫЙ КОД 14
ТЕСТЫ 18
ЗАКЛЮЧЕНИЕ 21
СПИСОК ИСПОЛЬЗУЕМОЙ ЛИТЕРАТУРЫ 22
Введение:
Традиционно в программировании понятие сложности алгоритма связано с использованием ресурсов компьютера: количество процессорного времени, которое требует программа для своего выполнения, расход памяти, насколько сложной является реализация, с точки зрения дальнейшего развития и поддержки программного средства [1]. Как правило, память, которая тратится для записи команд программы, в счет не берется, учитывается только объем данных. Понятно, что для машин с разной тактовой частотой и с незначительными вариациями в архитектуре, время, по возможности, рассчитывается в относительных единицах и подбирается так, что расчетная оценка должна иметь незначительные отклонения.
Прежде всего, такой подход ориентирован на инженерные и научные приложения теории алгоритмов. Естественно так сложилось, что объемы входных данных значительно превышают размеры самой программы, а программа может выполняться несколько часов. При таком подходе, особенно при критической важности ресурсов, может возникнуть проблема целесообразности решаемой задачи или всего проекта, из-за неэффективной работы программы. Например, к таким областям относятся системы реального времени (real-time systems). Это базирующиеся на компьютерах системы, которые управляют процессами в реальном мире или обрабатывают информацию, служащую для принятия оперативных решений.
Что касается данных программы, то их принято разделять на: внешние (файлы БД, потоки от внешних устройств) и внутренние. Внутренние данные (переменные) программ делятся на статические и динамические. Основной структурой для представления внутренних данных является массив.
Объектом исследования курсовой работы являются принципы работы с памятью ЭВМ, теория структур данных и алгоритмов, связанных с этими структурами.
Предметом исследования являются массивы в языке программирования С++ и роль и использование указателей при организации и обработке динамических структур данных.
Если рассматривать тему в разрезе языка С/С++, то можно сказать крылатыми словами «указатели это наше ВСЕ». Дело в том, что язык С построен на основе косвенного обращения к мяты, в некоторых источниках язык С называют «языком указателей». Такое название язык получил потому, что на принципе использования указателей полностью построена передача данных между функциями, вызов функций и методов из библиотек и классов [13]. Язык С оперирует целым рядом механизмов связанных с указателями: простые адреса, «дальние» far — указатели, указатели на указатели и другие конструкции.
Основная идея появления именно динамических структур данных состоит в разнице механизмов работы с памятью в случае статических и динамических данных. Для статической переменной резервируется место в памяти в момент ее описания и сохраняется в течение всего времени работы программы. Такой подход однозначно имеет ряд недостатков:
1) Не эффективное использование памяти, например переменная отработала свою функцию, и больше не будет использоваться, но память все равно занята.
2) Особенно недостатки проявляются в случае использования не отдельных переменных простых стандартных типов, а в случае использования последовательностей данных (в широком смысле массивов) вызывает осложнения случай, когда длина (количество элементов массива) заранее не заданы или могут изменяться в ходе алгоритма. В этом случае полностью корректно обойтись статической памятью вообще не возможно, единственным выходом является выделение памяти с резервом, но это лишь частично решает вопрос, не эффективно с точки зрения ресурсов, в некоторый случаях может приводить к критическим ошибкам (когда выделенного резерва недостаточно)
Рассмотренные выше проблемные ситуации могут быть решены с помощью динамических данных: память выделяется в момент использования, может быть освобождена в нужное время, длина структуры не фиксируется и динамично меняется в зависимости от потребностей программы. Данный краткий анализ показывает актуальность и необходимость владения такими инструментами как динамические структуры и динамическое управление памятью (выделение памяти под программные данные).
С другой стороны стоит заметить, что язык С в определенной мере злоупотребляет данным механизмами, чем существенно осложняется программный код и его понимание. Например, в языке С#, который во многом подражает языку С/С ++, на данный фактор обратили внимание и во многих моментах упростили работу. В первую очередь из-за использования стандартных структур типа List, Set, dynamic Array и других, где работа с указателями скрыта от разработчика инкапсулирующим слоем и набором методов. Благодаря, в том числе, и этому моменту, языки С#, Java потеснили язык С++, который долгое время удерживал лидирующие позиции по популярности и массовости использования в коммерческом программировании.
Заключение:
В работе рассмотрены механизмы работы с памятью на примере массивов. Проанализированы преимущества динамических механизмов работы с памятью.
Полученные навыки работы с памятью проиллюстрированы на примере прикладной задачи обработки массивов согласно индивидуальному варианту.
Исходя из задания варианта в среде программирования VisualStudia на языке программирования С++ разработана и отлажена программа.
По результатам проведенных исследований и практической реализации программного продукта составлен отчет, структура которого полностью отвечает требованиям методических рекомендаций. В отчете представлен анализ задачи, приведены блок-схемы основных алгоритмических решений, представлен комментированный программный код.
Правильность работы программы подтверждается тестированием программы и результатами тестов, также представленными в отчете.
Фрагмент текста работы:
УСЛОВИЕ ЗАДАЧИ СОГЛАСНО ВАРИАНТУ
Данная работа выполняется по индивидуальному варианту №3.
Согласно данного варианта сформулировано следующие условие:
Даны матрицы А(5х5), В(7х7) и С (4х4). Вычислить выражение:
Ра+Рв-Рс, (1)
где Ра (Рв,Рс) – произведение положительных элементов главной диагонали матрицы А (В,С).
По условиям программа реализуется как консольное приложение.
Исходя из условия задачи, можно определить следующий набор составных элементов программы реализующей данное условие:
реализация меню пользователя, для выбора необходимого пункта и удобной работы с программой;
реализация функций ввода элементов матриц;
реализация функции автоматического заполнения матриц случайными элементами;
реализация функции вывода матрицы на экран в виде таблицы;
реализация функции нахождения произведения диагональных элементов матрицы;
вычисление результата по формуле (1).
В качестве инструментов в работе будут использоваться:
VisualStudio 2012 – среда разработки программного обеспечения;
C++ язык программирования;
MS Visio 2010 – средство разработки блок-схем;
MS Word 2010 – текстовый процессор для подготовки отчета по работе.
ОПИСАНИЕ ДАННЫХ
В программной реализации используются следующий набор данных (таблица 1)
Таблица 1
Используемые данные и их описание
Переменная Тип Предназначение
А int** Указатель на матрицу А:
int** A=NULL
A = DinArrRand (n);
В int** Указатель на матрицу В:
int** B=NULL;
B = DinArrRand (n);
С int** Указатель на матрицу С:
int** C=NULL
C = DinArrRand (n);
n int Переменная для определения и передачи в функции размерности матриц. Принимает значения:
5 (матрица А), 7 (матрица В), 4 (матрица С)
pm int Переменная, в которую сохраняется значение выбранного в меню пункта. Может принимать значения в диапазоне [0..6]
Result unsigned long Переменная для хранения результата вычисления результирующего выражения
i, j int Вспомогательные переменные для прохода по массивам (счетчики циклов)
Таблица 2
Функции и их предназначение
Прототип функции Предназначение
int Menu () Функция, реализующая меню на экране. Без параметров, возвращает целое значение – выбранный пункт
unsigned long ProductEl (int** Mas, int len) Функция определяет произведение элементов на диагонали. Параметры: указатель на массив, размерность массива. Ввиду того, что в задании речь идет только о квадратных матрицах размер передается одним числом. Возвращает длинное беззнаковое целое (произведение положительных эл. – положительное число)
int** DinArrInp (int len)
Функция создает массив с запросом элементов с клавиатуры. Параметр – размерность матрицы, возвращает указатель на матрицу.
int** DinArrRand (int len)
Функция создает массив с автоматической генерацией элементов, случайные числа. Параметр – размерность матрицы, возвращает указатель на матрицу
void PrintArr (int** Mas, int len)
Функция предназначена для вывода эл. матрицы на экран в виде таблицы. Параметры: указатель на массив, размерность массива. Функция типа void не возвращает результатов (безрезультатная)
БЛОК_СХЕМА АЛГОРИТМА
С алгоритмической точки зрения задача достаточно проста. Основной алгоритм – поиск произведения элементов можно представить следующей схемой.
Рис. 1 – Блок-схема поиска произведения положительных эл. на диагонали
Вычисление уже результирующего выражения вообще имеет линейную алгоритмическую структуру (рис. 2)
Рис. 2 – Блок-схема вычисление результата