Создан заказ №3389246
28 ноября 2018
Программное приложение. Анализ справочных данных для гидравлического расчета систем водоснабжения.
Как заказчик описал требования к работе:
Оглавление
Введение2
Описание алгоритма3
Структура приложения5
Руководство пользователя10
Заключение18
Библиографический список19
Введение
Матрицы находят широкое применение в программировании, однако иногда случаются ситуации, когда при ее хранении память в основном занимают нулевые элементы
. Такие матрицы называются разреженными.Разреженная матрица – это матрица, которая содержит преимущественно нулевые элементы. В результате данной ситуации возникает проблема хранения таких матриц, ведь под хранения нулевых элементов отводится огромный объем памяти, что нецелесообразно. У этой проблемы есть решение – различные алгоритмы упаковки, которые позволяют избавиться от хранения нулей, путем хранения в памяти компьютера только ненулевых элементов разреженной матрицы. В данной курсовой работе был рассмотрен один из таких алгоритмов.
Цель курсовой работы заключается в разработке приложения, реализующего алгоритм упаковки матрицы (Тьюарсон 1 схема). Данный алгоритм позволяет уменьшить затраты памяти при хранении разреженных матриц. Алгоритм преобразует матрицу в массив, который хранит номера столбцов, строк и сами ненулевые элементы.
Описание алгоритма
Каждому ненулевому элементу матрицы соответствует запись, занимающая две ячейки памяти. Первая ячейка содержит номер строки, вторая – значение элемента. Нуль в первой ячейке означает конец данного столбца. Вторая ячейка в этом случае содержит номер следующего столбца. Нули в обеих ячейках указывают на конец массива, хранящего матрицу. Таким образом, общее число записей будет равно n+t+1, из них n – для столбцов, t – для ненулевых элементов матрицы A и одна запись – для указания конца матрицы. Так как каждая запись использует две ячейки матрицы. Так как каждая запись использует две ячейки памяти, то для хранения матрицы A потребуется 2(n+t+1) ячеек.
Рассмотрим упаковку матрицы A размерностью 3х3
Количество записей упакованной матрицы должно быть n + t + 1 = 7, где n = 3, t = 3. Матрица начинается с пары 0,1, т.к. начинаем упаковку с первого столбца
(0,1)
из ненулевых элементов в первом столбце только 3 в строке 1, следовательно, следующей записью будет
(0,1;1,3)
Так как в первом столбце ненулевых элементов больше нет, то переходим ко второму столбцу, добавляем соответствующую запись, обозначающую переход ко второму столбцу
(0,1;1,3;0,2)
Во втором столбце единственным ненулевым элементом является 2 в строке 3, добавляем
(0,1;1,3;0,2;3,2)
Так как во втором столбце ненулевых элементов больше нет, то переходим к третьему столбцу, добавляем соответствующую запись, обозначающую переход к третьему столбцу
(0,1;1,3;0,2;3,2;0,3)
В третьем столбце единственным ненулевым элементом является 1 в строке 2, добавляем
(0,1;1,3;0,2;3,2;0,3;2,1)
В третьем столбце ненулевых элементов больше нет. Матрица закончилась, т.к. столбцов всего 3. Необходимо обозначить окончание массива – добавим (0,0).
(0,1;1,3;0,2;3,2;0,3;2,1;0,0)
Структура приложения
Приложение написано на VBA в MSExcel. Состоит из четырех листов:
1. Ввод данных
Лист “Ввод данных” (рис.1) содержит в себе все кнопки для управления приложением.
Рис.1 Лист “Ввод данных”
Кнопка “Очистить листы” (макрос btn_Clear) – очищает все листы, кроме листа “Ввод данных”.
Кнопка “Создать матрицу” (макрос btn_Create) – создает разметку для матрицы на листе “Матрица”, в соответствии с введенным количеством строк и столбцов (обязательно должны быть введены в поля).
Кнопка “Заполнение матрицы” (макрос btn_Manual) – служит для перехода на лист “Матрица” для ввода ненулевых элементов матрицы.
Кнопка “Заполнить оставшееся нулям” (макрос btn_Fill) – служит для заполнения в матрице (лист “Матрица”) пустых клеток нулями.
Кнопка “Упаковать матрицу” (макрос btn_Packing) – служит для упаковки матрицы по алгоритму Тьюарсона (схема 1) . Упакованная матрица выводится на лист “Упакованная матрица”.
Кнопка “Распаковать матрицу” (макрос btn_Unpacking) – служит для распаковки упакованной матрицы с листа “Упакованная матрица”. Распакованная матрица будет отображена на листе “Распакованная матрица”.
Кнопка “Сохранить матрицу” (макрос btn_Save) – служит для сохранения двух листов (“Матрица”, “Упакованная матрица”) в отдельный файл, имя и путь сохранения задает пользователь.
Кнопка “Загрузить матрицу” (макрос btn_Load) – служит для загрузки матрицы из внешнего файла. Однако файл должен соответствовать требованиям (листы должны иметь названия “Матрица”, “Упакованная матрица”).
Кнопка “Добавить ненулевой элемент” (макрос btn_Add) – служит для добавления элемента в упакованную матрицу на листе “Упакованная матрица”.
Кнопка “Удалить ненулевой элемент” (макрос btn_Delete) –служит для удаления элемента из упакованной матрицы на листе “Упакованная матрица”.
Кнопка “Найти элемент” (макрос btn_Find) – служит для поиска элемента по введенным строке и столбцу. Вывод в графу “Элемент” на листе “Ввод данных”.
2. Матрица
На листе «Матрица» (рис.2) хранится матрица, которую необходимо упаковать.
Рис.2 Лист “Матрица”
3. Упакованная матрица
На листе «Упакованная матрица» (рис.3) хранится упакованная матрица.
Рис.3 Лист “Упакованная матрица”
4. Распакованная матрица
На листе «Распакованная матрица» (рис.4) хранится распакованная матрица.
Рис.4 Лист “Распакованная матрица”
Руководство пользователя
Для начала работы с приложением необходимо ввести количество строк и столбцов в соответствующие поля на листе “Ввод данных” (рис. 5). В данные поля можно вводить только целые числа больше 1, в противном случае появится сообщение об ошибке (рис. 6).
Рис.5 Правильно заполненные поля для ввода количества строк и столбцов
Рис.6 Сообщение об ошибке при вводе количества строк и столбцов
Затем необходимо нажать кнопку создать матрицу (рис. 7). Следует учесть, что если количество строк и столбцов не будет указано (либо будет указано неверно), то будет выдана ошибка (рис. 8).
Рис. 7 Кнопка “Создать матрицу”
Рис. 8 Сообщение об ошибке при создании матрицы
После успешного создания матрицы, следует нажать кнопку “Заполнение матрицы” (рис. 9).
Рис. 9 Кнопка “Заполнение матрицы”
Программа перейдет на лист “Матрица”, где указываются все ненулевые элементы матрицы (рис. 10).Элементы могут быть только числовыми.
Рис. 10 Лист “Матрица” с правильно заполненными данными
После того, как данные введены, следует перейти обратно на лист “Ввод данных” и нажать на кнопку “Заполнить оставшееся нулями” (рис. 11). Программа автоматически обнулит свободные ячейки.
Рис. 11 Кнопка “Заполнить оставшееся нулями”
Следующий шаг – нажать на кнопку “Упаковать матрицу” (рис. 12). В случае, если появилось сообщение об ошибке (рис. 13), это значит, что в матрице присутствуют не только числовые элементы.
Рис. 12 Кнопка “Упаковать матрицу”
Рис. 13 Сообщение об ошибке при неправильном заполнении матрицы
После успешного выполнения упаковки, осуществляется автоматический переход на лист “Упакованная матрица”, где отображена упакованная матрица (рис. 14).
Рис. 14 Лист “Упакованная матрица” с результатом упаковки
В случае необходимости, матрицу и ее упакованную форму можно сохранить в отдельный файл. Для этого нужно перейти на лист “Ввод данных”, нажать на кнопку “Сохранить матрицу” (рис. 15) и выбрать имя файла и путь для сохранения (рис. 16).
Рис. 15 Кнопка “Сохранить матрицу”
Рис. 16 Диалоговое окно сохранения файла
В случае необходимости данный файл можно будет загрузить, и на листах “Матрица”, “Упакованная матрица” отобразятся сохраненные матрица и ее упакованная форма. Для демонстрации открытия файла, для начала очистим листы путем нажатия кнопки “Очистить листы” (рис. 17). После очистки листов, все листы, кроме листа “Ввод данных” будут пустыми.
Рис. 17 Кнопка “Очистить листы”
Для открытия файла следует нажать кнопку “Загрузить матрицу” (рис. 18) и в диалоговом окне выбрать файл (рис. 19).
Рис. 18 Кнопка “Загрузить матрицу”
Рис. 19 Диалоговое окно открытия файла
После открытия файла, лист “Упакованная матрица” станет активным – файл открыт.
В приложении также предусмотрена работа с упакованной матрицей. Для того, чтобы добавить новый элемент необходимо в поля (рис. 20) ввести номер строки и столбца (в случае если оставить поля пустыми, то по нажатию на кнопку “Добавить ненулевой элемент” будет выдана ошибка (рис. 21)), а также новый элемент, который должен быть ненулевым, иначе появится сообщение об ошибке (рис. 22) и нажать кнопку “Добавить ненулевой элемент” (рис. 23).
Рис. 20 Правильно заполненные поля для добавления элемента
Рис. 21 Сообщение об ошибке, если не введены строка или столбец
Рис. 22 Сообщение об ошибке, при попытке добавить нулевой элемент
Рис. 23 Кнопка “Добавить ненулевой элемент”
Для удаления ненулевого элемента необходимо заполнить только номер и строку в поле ввода (рис. 24). Если строка или столбец не будут введены, то по нажатию кнопку “Удалить ненулевой элемент” (рис. 25) будет выдана ошибка (рис. 21).
Рис. 24 Правильно заполненные поля для удаления элемента
Рис. 25 Кнопка “Удалить ненулевой элемент”
Для поиска элемента в матрице необходимо заполнить поля (рис. 26). Нажать кнопку “Найти элемент” (рис. 27).
Рис. 26 Правильно заполненные поля для поиска элемента
Рис. 27 Кнопка “Найти элемент”
В случае, если элемент ненулевой, тогда после нажатия на кнопку “Найти элемент” станет активна ячейка, в которой находится искомый элемент (рис. 28), а на листе “Ввод данных” в графе “Элемент” отобразится найденный элемент (рис. 29).
Рис. 28 Результат поиска на листе “Упакованная матрица”
Рис. 29 Результат поиска на листе “Ввод данных”
Если же найденный элемент окажется нулевым, тогда будет выдано сообщение (рис. 30), а на листе “Ввод данных” в графе “Элемент” отобразится 0 (рис. 31).
Рис. 30 Сообщение о нахождении нулевого элемента
Рис. 31 Результат поиска на листе “Ввод данных” (нулевой элемент)
После внесенных изменений, чтобы получить новую матрицу из упакованной необходимо нажать кнопку “Распаковать матрицу” (рис. 32), после нажатия станет активным лист “Распакованная матрица”.
Рис. 32 Кнопка “Распаковать матрицу”
К примеру, после удаления элемента из 1й строки и 1го столбца, а также добавления элемента 4 в строку 1, столбец 2, результат будет выглядеть следующим образом (исходная матрица – рис. 33) (рис. 34).
Рис. 33 Исходная матрица
Рис. 34 Результат изменений
Заключение
В результате выполнения курсовой работы было разработано приложение на языке VBA, реализующее хранение разреженных матриц по алгоритму Тьюарсона (схема 1). Данный алгоритм позволяет избавиться от хранения в памяти компьютера нулевых элементов, тем самым уменьшая, необходимый для хранения матрицы, объем памяти. Приложение позволяет изменять упакованную форму матрицы, а также сохранять результаты текущей работы программы и загружать предыдущие результаты работы программы. Помимо этого приложение позволяет осуществить поиск необходимого элемента в упакованной форме.
Библиографический список
1. Тьюарсон Р. Разреженные матрицы – М.: Мир, 1977. – 191 с.
2. Писсанецки С. Технология разреженных матриц – М.: Мир, 1988. – 410 с.
3. Зиборов В.В. VisualBasic 2010 на примерах – М.: БХВ-Петербург, 2010. – 338 с.
4. Джон Уокенбах. Excel 2013. Профессиональное программирование на VBA – М.: Вильямс, 2017. – 960 с.
5. Садовский Б.С. Технология программирования, 2009. – 98 с.
3
подробнее
Заказчик
заплатил
заплатил
500 ₽
Заказчик не использовал рассрочку
Гарантия сервиса
Автор24
Автор24
20 дней
Заказчик принял работу без использования гарантии
1 декабря 2018
Заказ завершен, заказчик получил финальный файл с работой
5
Программное приложение. Анализ справочных данных для гидравлического расчета систем водоснабжения. .docx
2018-12-04 20:33
Последний отзыв студента о бирже Автор24
Общая оценка
4.1
Положительно
Заказ выполнен в срок. Получили оценку удовлетворительно.
Комментарий преподавателя:
" В работе не нужны были проектные решения - они не имеют отношения к регламенту. "