Создание приложения по перемножение матриц NM и MN
Введение
В настоящее время компьютеры позволяют мгновенно
решать многие задачи, на решение которых раньше требовались большие затраты.
Применение компьютеров решает проблемы быстроты и надежности вычислений.
В этой работе, разработанная программа позволит
вычислить значение матрицы, полученной путем перемножения определенных матриц.
Задача вычислений такой матрицы часто
встречается в вычислительной математике, геометрии и других областях.
Теоретические основы разработки
Описание предметной области и анализ методов
решения.
Решение системы линейных уравнений может быть
реализовано следующими способами:
Ручным - этот способ является трудоёмким и
требует больших затрат времени.
Автоматизированным - исходные данные вводятся
вручную, а результат рассчитывается программой на компьютере.
Автоматическим - исходные данные автоматически
считываются с внешнего устройства (например, файла на диске) и обрабатываются
программой.
Метод решения задачи - умножение матриц по
правилу умножения. Это правило состоит в следующем:
Операция умножения двух матриц выполнима только
в том случае, если число столбцов в первом сомножителе равно числу строк во
втором; в этом случае говорят, что форма матриц согласована. В частности,
умножение всегда выполнимо, если оба сомножителя - квадратные матрицы одного и
того же порядка. Произведение матриц AB состоит из всех возможных комбинаций
скалярных произведений строк матрицы A и столбцов матрицы B. Элемент матрицы AB
с индексами i,j есть скалярное произведение i-ой строки матрицы A и j-го столбца
матрицы B.
второй пункт правила позволяет ввести формулу,
по которой можно вычислять элементы матрицы
Исходные матрицы
Результирующая матрица
Таким образом, если выполняется
условие о размерах матриц, то можно поэлементно вычислить матрицу.
Обзор средств программирования
Существует большое количество языков
программирования, каждый из которых обладает некоторыми особенностями,
делающими этот язык необходимым в своей области.
Из современных языков
программирования, многие подходили под выполняемую задачу:
С/С++
C#
и другие. Самым простым для решения
задачи является С/С++, как один из основных и широко распространенных.
В качестве среды разработки я
использовал Microsoft Visual Studio 2008.
Описание языка С++
Язык C++ один из самым
распространенных языков в мире.
Он является высокоуровневым, т.е.
основными элементами являются переменные и структуры и классы, а не машинные
команды.
Переменные на языке С++ описываются
следующим образом:
sizecolumns=1;//число
столбцов**elements;//содержимое матрицы
Тип данных, имя переменной, и
начальное значение. После двойного слеша идет описание переменной в
комментариях (не обязательная часть). Язык является типизированным.
Функции описываются следующим
образом:
Multiply(Matrix *MultMatrix)
{
Тело функции
}
Тип возвращаемого значения, имя
функции, и в круглых скобках принимаемые параметры функции.
Очень важное значение имеют классы.
Класс - абстрактный тип данных, содержащий набор методов и переменных.
В этой работе создавался класс
Matrix (Матрица), содержащий помимо самой матрицы, ее параметры - размеры,
минимально и максимально допустимые значения.
Практическая часть
Постановка задачи
Перемножение двух заданных матриц.
Исходные данные вводятся пользователем с клавиатуры или загружаются из файла. В
программе должна быть обеспечена возможности вывода конечных результатов на
экран, файл и принтер.
Основания для разработки
Основанием для разработки является
задания преподавателя в соответствии с программой курса “Технология разработки
программных продуктов”.
Назначение программы
Разрабатываемая программа
предназначена для перемножения заданных матриц.
Требования к программе.
Требования к функциональным
характеристикам.
Программный продукт должен
обеспечивать:
Подготовку исходных данных.
Ввод исходных данных с клавиатуры.
Просмотр исходных данных на экране.
перемножение заданных матриц.
Вывод результатов на экран.
Запись результатов в файл.
Требования к надёжности.
Требования к надёжности программы
отсутствуют, так как при отказе программы её можно выполнить повторно.
Требования к условиям эксплуатации
Программа должна эксплуатироваться в
условиях вычислительного центра при температуре от +15 до +35 С и относительной
влажности воздуха от 25 до 85%.
Программа не требует специального
обслуживания, а её сопровождение выполняется самим автором.
Для работы с данной программы
необходимо умение работать с цифровой клавиатурой, так как все значения -
числовые данные.
Требования к техническим средствам
Программа должна работать на IBM PC- совместимых
компьютерах с процессором 80386 и выше, объёмом оперативной памяти 1 Мбайт и
выше, цветным монитором EGA/VGA, наличием жёсткого диска и дисковода для гибких
магнитных дисков 3,5, наличие CD-ROM для лазерных дисков. Принтер необходим в
тех случаях, когда предусмотрен вывод результатов на печать.
Требования к информационной и программной
совместимости
Программа должна работать под управлением
операционной системы MS DOS версии 3.2 и выше или Windows 3.11 и выше.
Текст программы может быть просмотрен с помощью
текстовых редакторов, совместимых с редактором Edit.
Требования к маркировке и упаковке
Программа должна поставляться на диске в виде
исполняемого (exe) файла. На диске должна быть наклейка с надписью, соответствующей
названию работы. Дискета (диск) должна быть упакована в пластиковую коробку.
Требования к транспортировке и хранению
Программа должна поставляться на CD-RW диске
(700 Мбайт). Диск должен быть упакован и храниться вдали от электромагнитных полей
и не подвергаться механической деформации. Место и условия хранения должны
соответствовать санитарным нормам требованиям отрасли. Срок хранения данной
программы 10 лет.
Требования к программной документации
Должны быть разработаны следующие программные
документы:
Текст программы (ГОСТ 19.401-78)
Описание программы (ГОСТ 19.402-78)
Руководство оператора (ГОСТ 19.505-79)
Программа и методика испытаний (ГОСТ 19.301-79)
Описание языка (ГОСТ 19.507-79)
Стадии разработки
Разработка программы должна вестись по
следующему графику:
Технический проектсрок сдачи.
Рабочий проектсрок сдачи.
Виды испытаний
Приемо-сдаточные испытания проводятся
преподавателем.
Описание схем
Описание схемы основного модуля
Основной модуль представляет собой меню выбора
сценария.
Сценарий
1. Загрузка данных из файлов
|
Сценарий
2. Ввод данных с клавиатуры
|
Сценарий
3. Ввод из файла или клавиатуры(с возможностью записи данных в файл)
|
Сценарий
4.Ввод из файла(возможность редактирования), или с клавиатуры.
|
Текст программы
Текст программы в соответствии с ГОСТ 19.101-77
(СТ СЭВ 1626-79) и ГОСТ 19.401-79 (СТ СЭВ 3746-82) представляет собой запись
программы на исходном языке программирования с необходимыми комментариями.
Текст программы представляет собой документ, выполненный машинным способом, и
приведен в приложении 1.
Описание программы
Общие сведения
Программа предназначена для умножения матриц.
Программа написана на языке С++ .
Функциональное назначение
Программа предназначена для нахождения матрицы,
являющейся результатом умножения заданных матриц
Используемые технические и программные средства
Программа может работать на Windows XP и выше.
Наличие принтера необходимо, если пользователь желает выводить на него ответ.
Вызов и загрузка
Программа может храниться на компакт диске.
Исполняемым файлом программы является файл Multiply.exe.
Входные и выходные данные
Входными данными программы являются матрицы
целых чисел, задаваемых вручную, или загружаемых из файла.
Выходными данными является матрица, полученная
путем умножения исходных матриц. Выходные данные выводятся и на экран и в файл.
Руководство оператора
Назначение программы
Программа предназначена для умножения матриц с
помощью правила перемножения матриц.
Условия выполнения
Программа работает на IBM PC совместимых
компьютерах с процессором 80386 и выше, объёмом оперативной памяти 1 Мбайт и
выше, CD-ROM для дисков под управлением операционной системы DOS 3.2 и выше или
Windows 3.11 и выше.
Выполнения программы и сообщения оператору
Для начала работы с программой - запустите ее.
Далее программа запрашивает у пользователя один из сценариев, соответствующих
исходному заданию. Дальше необходимо ввести данные - саму матрицу или имена
файлов, в которых расположены матрицы. После этого оператор выбирает метод
вывода информации.
Программа и методика испытаний
Объект испытаний
Объектом испытаний является программа,
предназначенная для выполнения операции умножения матриц
Цель испытаний
Целью испытаний является проверка соответствия
программы требованиям технического задания.
Требования к программе
В процессе испытаний подлежат проверке следующие
требования к программе:
Требования к функциональным характеристикам
Программа должна:
) Вычислять произведение матриц
)предоставлять пользователю удобный графический
интерфейс;
)выводить результат по желанию пользователя на
экран или в файл.
Требования к информационной и программной
совместимости
Текстовый файл с результатами работы программы
должен иметь формат, позволяющий просматривать его с помощью текстовых
редакторов типа блокнот.
Требования к маркировке и упаковке
Программа должна поставляться на компакт диске.
Средства и порядок испытаний
Для проведения испытаний необходимы следующие
технические средства:
Windows XP или 7
Для проведения испытаний необходимы следующие
программные средства:
Windows XP
Текстовый редактор блокнот
Испытания проводятся в следующем порядке
) проверяется наличие и комплектность
программной документации
) проверяется соответствие требованиям к
маркировке и упаковке
) проверяется соответствие требованиям к
функциональным характеристикам
способность программы обеспечивать ввод исходных
данных
способность выводить результаты по желанию
пользователя на экран, принтер или в файл.
)проверяется соответствие требованиям к
информационной и программной совместимости
Для проверки способности обеспечивать ввод
исходных данных
необходимо:
запустить программу;
запустить первый и второй сценарии работы
Для проверки способности программы правильно
находить матрицу.
открыть программу;
запустить любой из сценариев
ввести исходные данные
вывести результат на экран, в файл;
проверить результат перемножения с помощью
калькулятора
Для проверки способности выводить результат на
экран или в файл необходимо:
запустить программу;
запустить любой из 4 модулей
выбрать вывод результата на экран или файл
Протокол испытаний
Результаты испытаний программы представлены в
таблице 1.
Результаты испытаний программы
программирование язык загрузка испытание
Таблица 1
Проверяемые
требования
|
Сообщения
программы и вводимые значения
|
Результаты
|
Способность
программы обеспечивать ввод исходных данных
|
Вводились
исходные данные - имена файлов. Программа их приняла и вывела введенные
таблицы.
|
Успешное
создание таблиц из файла
|
Способность
программы обеспечивать вывод данных.
|
После
ввода исходных данных программа вывела результат, который по требованию
записался в текстовый файл
|
Успешная
запись в файл
|
Способность
программы правильно рассчитывать данные
|
В
приложении представлена проверка правильности расчета результатов
|
Правильные
результаты
|
Заключение
Разработанная в ходе выполнения курсового
проекта программа удовлетворяет всем требованиям задания, что подтверждается
протоколом испытаний.
Разработанная программа позволяет вычислять
значение матрицы, полученной путем перемножения исходных матриц, что позволяет
упрощать расчеты в некоторых областях науки и производства.
Список литературы
1. Корн
Г., Корн Т. Алгебра матриц и матричное исчисление // Справочник по математике.
- 4-е издание. - М: Наука, 1978. - С. 392-394.
2. ГОСТ
19.105-78 Общие требования к программным документам.
. ГОСТ
19.106-78 Требования к программным документам, выполненным печатным способом.
. ГОСТ
19.201-78 Техническое задание. Требования к содержанию и оформлению.
. ГОСТ
19.301-78 Программа и методика испытаний. Требования к содержанию и оформлению.
. ГОСТ
19.401-78 Текст программы. Требования к содержанию и оформлению.
. ГОСТ
19.402-78 Описание программы. Требования к содержанию и оформлению.
. ГОСТ
19.505-79 Руководство оператора. Требования к содержанию и оформлению.
. ГОСТ
19.701-90 Схемы алгоритмов программ, данных и систем. Условные обозначения и
правила выполнения.
Приложение 1
Структура
класса
Matrix
#include "iostream"namespace
std;
class Matrix
{:
//два конструктора();//создание пустой матрицы,
без каких-либо параметров(int newsizeL,int newsizeC,int newmine,int
newmaxe);//создание матрицы с параметрами
//деструктор~Matrix();//удаление матрицы
//ввод/вывод данныхgenerateMatrix();//генерирование
матрицыmanualInput();//ввод матрицы вручнуюLoadFromFile(char[255]);//загрузка
матрицы из файла
bool SaveToFile(char[255]);//запись
в
файлPrintOnDisplay();//вывод
на
экранModify(int
line,int col,int newcapt);//изменить
элемент
матрицы
//перемножениеCheckMultiply(Matrix
*MultMatrix);//проверить возможность умножения матрицMultiply(Matrix
*MultMatrix);//произвести умножение этой матрицы (A) на другую матрицу(B) - A*B
private:sizelines;//число
строкsizecolumns;//число
столбцов
int **elements;//содержимое
матрицыmine;//минимально допустимый по значению элемент
матрицыmaxe;//максимально допустимый по значению элемент
матрицыi,j,k;//счетчики(для совместимости с VS2006)
};
Основной код
программы
// Multiply.cpp : Defines the entry
point for the console application.
//
#include "stdafx.h"
#include
"Matrix.h"ChooseOutput(Matrix *RES)
{OutN=-1;
//bool Correct=true;*filename=new
char[255];(OutN<1||OutN>3)
{("print result
on:\n");("1. Display\n");("2. File\n");("3.
Printer\n");>>OutN;(OutN)
{1:>PrintOnDisplay();;2:("input
filename:\n");>>filename;>SaveToFile(filename);;3:;
}
}("pause");
}*LoadFromFile(bool needMenuFile,int
MaxSize,int Mine,int Maxe)
{("input
filename:\n");*filename=new char[255];>>filename;*A=new Matrix();
if(needMenuFile)
{ChL=-1;Cl,Cc,Nc;(ChL!=2)
{("Correction\n");("1.correction
matrix\n");("2.save to file and continue\n");>>ChL;(ChL)
{1:("line of
correction:\n");>>Cl;("column of
correction:\n");>>Cc;("new value\n");>>Nc;>Modify(Cl,Cc,Nc);;2:("input
new
filename:\n");(filename,0,255);>>filename;>SaveToFile(filename);;
}
}
}A;
}*LoadFromKeyboard(bool
NeedMenuKeyboard,int MaxSize,int Mine,int Maxe)
{*A=new
Matrix();>manualInput();(NeedMenuKeyboard)
{*filename=new char[255];ChK=-1;("Correction\n");("1.
Save matrix to file\n");("other. continue\n");(ChK)
{1:("input new
filename:\n");(filename,0,255);>>filename;>SaveToFile(filename);;:;
}
}A;
}*ChooseInput(bool
NeedMenuKeyboard,bool needMenuFile,int MaxSize,int Mine,int Maxe)
{*InM;ChM=-1;(ChM!=1
&&ChM!=2)
{("Input
method:\n");("1.Keyboard\n");("2.File\n");>>ChM;
}(ChM)
{1:=LoadFromKeyboard(NeedMenuKeyboard,MaxSize,Mine,Maxe);;2:=LoadFromFile(needMenuFile,MaxSize,Mine,Maxe);
вreak;
}InM;
}scenario1()
{*A=new Matrix();=LoadFromFile(0,100,-9999,9999);>PrintOnDisplay();*B=new
Matrix();=LoadFromFile(0,100,-9999,9999);>PrintOnDisplay();*MM=A->Multiply(B);(MM);
}scenario2()
{*A=new
Matrix();>manualInput();*B=new
Matrix();>manualInput();*MM=A->Multiply(B);(MM);
}scenario3()
{(true,false,1000,-999999,999999);
}scenario4()
{(false,true,1000,-999999,999999);
}main(int argc, char* argv[])
{ScN=-1;//номер
задачи(ScN!=0)
{("cls");("input
task\n");("1. m,n<=100 Mij>=-100 Mij<=100 load from
files\n");("2. m,n<=10 Mij>=0 Mij<=1000 keyboard\n");("3.
m,n<=20 keyboard|file\n");("4. m,n<=20
keyboard|file|modify\n");("0. Exit\n");>>ScN;(ScN)
{1:();;2:();;3:();;4:();;5:(SUCCESS);;
}
}0;
}
Приложение
2
Пример 1.Решение системы
Проверка:
Результаты сошлись