Проектирование и этапы разработки



 

2.1 Постановка задачи

 

Задача заключается в создании динамического класса для работы с матрицами.

Чтение матриц происходит из файлов в котором они находятся, и после решений все полученные результаты выводятся в другой файл.

Интерфейс.

Интерфейс представлен примитивным меню в котором пользователь выбирает действие. При не открытии одного из файлов выводится ошибка, при успешное выполнение выводится сообщение об успехе.

 

2.2 Средства разработки

 

В качестве средства разработки выбран MS Visual Studio 2008 Express.

 

2.3 Описание процесса компиляции и запуска программы

 

Для компиляции программы используется IDE MS Visual Studio. В папке с проектом должны присутствовать файлы: file1.txt, file2.txt, file3.txt

Скомпиллированная программа состоит из следующих файлов:

1) папка cnf (конфигурационные файлы);

2) matrix.exe (исполняемый файл);

 


3. Реализация

 

3.1 Структура программы

 

Программа содержит компоненты, отвечающие за:

1) интерфейс,

2) математическую логику,

3) взаимодействие объектов класса,

4) перегрузку операторов.

 

3.2 Структура класса

 

 

 

Заключение

 

В ходе выполнения курсовой работы была получена работоспособная программа, удовлетворяющая начальному заданию.

В ходе разработке были проанализированы и использованы следующие технологии:

1) Stl;

2) потоков данных;

3) перегрузка операторов;

В качестве дальнейшего совершенствования программы представляется возможным увеличение функциональности класса и интерфейса (с целью увеличения информативности).

 


Литература

 

1. Свободная энциклопедия http://ru.wikipedia.org/

2. Книга У. Форд, У. Топп «Структура данных в С++» ООО «Бином-Пресс»2006г.

3. Беллман Р. Введение в теорию матриц. - М.: Мир, 1969.

4. Курош А.Г.Курс высшей алгебры: Учебник для вузов 15-е изд., стереотип. - М.: Лань, 2006. - 432 с.

5. Дж. Голуб, Ч. Ван Лоун Матричные вычисления. - М.: Мир, 1999.

6. Сайт «Знакомимся с вектором». http://www.cyberguru.ru/

7. Б. Страуструп. «Язык программирования C++. Специальное издание.», 2004 г.

 


Приложение. Исходный код программы. Заголовочные файлы.

1. matrix.h

#pragma once

#include <list>

#include <vector>

#include <iostream>

 

using std::vector;

using std::cout;

using std::istream;

using std::ostream;

 

class _matrix

{

private:

vector< vector<float> > vvf;

int stroka;

int stolbec;

public:

_matrix() {};

 

_matrix(int str, int stolb)

{

stroka = str;

stolbec = stolb;

vvf.resize(stroka, vector<float>(stolbec));

}

 

_matrix (const _matrix &obj)

{

stroka = obj.stroka;

stolbec = obj.stolbec;

vvf = obj.vvf;

}

 

~_matrix()

{

vvf.clear();

}

 

_matrix& operator+(_matrix &obj2)

{

_matrix* obj = new _matrix(*this);

for(int y = 0; y < obj2.stroka; y++)

for(int x = 0; x < obj2.stolbec; x++)

(*obj)(y, x) = (*this)(y, x) + obj2(y, x);

return *obj;

}

 

_matrix& operator-(_matrix &obj2)

{

_matrix* obj = new _matrix(*this);

for(int y = 0; y < obj2.stroka; y++)

for(int x = 0; x < obj2.stolbec; x++)

(*obj)(y, x) = (*this)(y, x) - obj2(y, x);

return *obj;

}

 

_matrix &operator*(_matrix &obj2)

{

_matrix* obj = new _matrix(*this);

for(int y = 0; y < obj->stroka; y++)

for(int x = 0; x < obj->stolbec; x++)

{

(*obj)(y, x) = 0;

for(int k = 0; k < obj->stroka; k++)

(*obj)(y, x) += obj2(k,x) * (*this)(y, k);

}

return *obj;

}

 

_matrix &operator=(const _matrix &obj)

{

stroka = obj.stroka;

stolbec = obj.stolbec;

vvf = obj.vvf;

return *this;

}

 

float &operator()(int& i, int& j)

{

return vvf[i][j];

}

 

_matrix &transpon()

{

_matrix transobj(*this);

for(int y = 0; y < stroka; y++)

for(int x = 0; x < stolbec; x++)

(*this)(y, x) = transobj(x, y);

return *this;

}

 

vector <float> multvec(int str, float value)

{

vector<float> temp(stroka);

 

for(int x = 0; x < stroka; x++)

{

temp[x] = value * vvf[str][x];

}

return temp;

}

 

void norm(int str, float value)

{

for(int x = 0; x < stroka; x++)

{

vvf[str][x] = vvf[str][x]/value;

}

}

 

void subvec(int str,vector<float> temp)

{

for(int x = 0; x < stroka; x++)

{

vvf[str][x] = vvf[str][x] - temp[x];

}

}

 

_matrix Inversion()

{

_matrix obj(*this);

_matrix invobj(stroka, stolbec);

float f;

 

for(int y = 0; y < stroka; y++)

invobj(y,y) = 1;

 

for(int x = 0; x < stolbec; x++)

{

for(int y = 1; y < stroka; y++)

{

if(x < y)

{

f =obj(y, x)/obj(x,x);

obj.subvec(y, obj.multvec(x, f));

invobj.subvec(y, invobj.multvec(x, f));

}

}

}

 

for(int x = stolbec-1; x > -1; x--)

{

for(int y = stroka-1; y > -1; y--)

{

f = obj(x,x);

obj.norm(x, f);//cout << obj;

invobj.norm(x, f);

if(x > y)

{

f =obj(y, x)/obj(x,x);

obj.subvec(y, obj.multvec(x, f));

invobj.subvec(y, invobj.multvec(x, f));

}

}

 

}

cout << obj;

cout << invobj;

return invobj;

}

 

friend ostream &operator<<(ostream &stream, _matrix &obj);

friend istream &operator>>(istream &stream, _matrix &obj);

};

 

ostream &operator<<(ostream &stream, _matrix &obj)

{

for(int y = 0; y < obj.stroka; y++)

{

for(int x = 0; x < obj.stolbec; x++)

{

stream << obj(y, x) << " ";

}

stream << "\n";

}

return stream;

}

 

istream &operator>>(istream &stream, _matrix &obj)

{

for(int y = 0; y < obj.stroka; y++)

for(int x = 0; x < obj.stolbec; x++)

stream >> obj(y, x);

return stream;

}

 


Приложение 2. Исходный код программы. Файлы cpp.

 

1. main.cpp

 

 

#include <iostream>

#include <conio.h>

#include <fstream>

#include "matrix.h"

 

using std::cout;

using std::ofstream;

using std::ifstream;

using std::cin;

using std::endl;

 

int primer1(_matrix &, _matrix &);

int primer2(_matrix &);

 

 

int primer1(_matrix &_objA, _matrix &_objB)

{

ofstream fout1;

_matrix _objC;

 

fout1.open("file3.txt");

if(!fout1)

{

cout << "Error with open output file" << endl;

exit(1);

}

_objC = _objA + _objB;

fout1 << "Сумма: \n";

fout1 << _objC;

 

_objC = _objA - _objB;

fout1 << "Разность: \n";

fout1 << _objC;

 

_objC = _objA * _objB;

fout1 << "Произведение: \n";

fout1 << _objC;

return 0;

}

 

int primer2(_matrix &_objA)

{

ofstream fout1;

fout1.open("file3.txt");

_matrix _objC;

if(!fout1)

{

cout << "nevozmojno open file3" << endl;

exit(1);

}

_objC = _objA.Inversion();

fout1 << "matrix Inversion \n";

fout1 << _objC;

_objC = _objA * _objC;

fout1 << "matrix * matrix.Inversion = \n";

fout1.precision(3);

fout1 << "%f" <<_objC;

return 0;

}

 

bool freadMatrix(_matrix& mtr, char* fileName)

{

ifstream fin;

fin.open(fileName);

if(!fin) return false;

fin>>mtr;

fin.close();

return true;

}

 

int menu()

{

int primer;

_matrix objA(5, 5);

_matrix objB(5, 5);

//чтение файлов

if(!freadMatrix(objA, "file1.txt") || !freadMatrix(objB, "file2.txt"))

{

cout << "Error with open input file" << endl;

return 1;

}

 

cout << "select action \n 1. + - * matrix \n 2. seatch Inversion matrix" << endl;

cin >> primer;

switch(primer)

{

case(1):

primer1(objA, objB);

break;

case(2):

primer2(objA);

break;

}

cout << "ok";

return 0;

}

 

int main(int argc, char** argv)

{

menu();

_getch();

return 0;

}


Дата добавления: 2019-02-12; просмотров: 176; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!