Программа, реализующая тип данных вещественная матрица
СОДЕРЖАНИЕ: Этапы реализации класса вещественная матрица, позволяющего осуществлять основные операции с вещественными прямоугольными и транспонированными матрицами. Листинг программы, которая реализует тип данных вещественная матрица и принципы работы с ними.Федеральное агентство Российской Федерации по образованию
ГОУ ВПО «Тульский государственный университет»
Кафедра электронных вычислительных машин
Лабораторная работа № 1
Языки программирования. «Классы»
Выполнил: студент
группы 230701
Гребецкая Е.В.
Проверил: Савин Н.И.
Тула 2010
Введение
Задание
Реализовать класс «вещественная матрица», который позволяет осуществлять основные операции с вещественными прямоугольными матрицами.
Техническое задание
Написать программу, реализующую тип данных «вещественная матрица» и работу с ними. Класс должен реализовывать следующие операции над матрицами:
• сложение, вычитание, умножение, деление (+, -, *, /)
• операции сравнения на равенство/неравенство;
• операции вычисления транспонированной матрицы
Требования к разработке
Microsoft Visual Studio 2008 илиновее.
Наличиеверсийоперационнойсистемы Microsoft Windows 98, Windows (Me), Windows 2000, Windows ХР, Windows Vista, Windows 7.
Требования кэксплуатации
Microsoft Windows 98/Me/2000/ХР/Vista/7.
Технические характеристики
Время и эффективность работы программы зависит от эксплуатационных характеристик пользователя.
Эксплуатационные характеристики
Для того чтобы программа работала быстро и эффективно не требуется мощных компьютеров и современных операционных систем. Ниже приведены минимальные параметры компьютера, которые нужны для работы:
· Центральный процессор: Intel Pentium 166 MHz (рекомендуется P2 400 MHz)
· Оперативная память: 128 Mb (рекомендуемая 256 Mb)
· Памяти на жестком диске: 1 Мб.
· Монитор с разрешением VGA и выше
Входные параметры:
элементы матрицы вводятся с клавиатуры
Выходные параметры:
Вывод в консоль результата выполнения программы.
Теоретические положения
транспонированная вещественная матрица
Справка по программным методам
Класс-это производный структурированный тип, введенный программистом на основе уже существующих типов. Механизм классов позволяет создавать типы в полном соответствии с принципами абстракции данных, т. е класс задает некоторую структурированную совокупность типизированных данных и позволяет определить набор операций над этими данными. Простейшим образом класс можно определить с помощью инструкции:
Ключ_класса имя_класса {список_компонентов};
где ключ_класса – одно из служебных слов class, struct, union, имя_класса – произвольно выбираемый разработчиком идентификатор, список_компонентов – определения и описания типизированных данных и принадлежащих классу функций.
Конструктор – специальная функция класса, которая вызывается автоматически при создании объекта типа класса. Имя конструктора совпадает с именем класса, не возвращает никакого результата, даже void. Компилятор гарантирует единственный вызов конструктора для одного объекта.
Деструктор – специальная функция класса, которая вызывается автоматически при уничтожении объекта. Имя деструктора совпадает с именем класса, перед которым ставится символ “~”. Компилятор гарантирует единственный вызов деструктора для одного объекта. Деструктор не может иметь параметров и поэтому не может быть перегружен.
При создании автоматической переменной деструктор вызывается автоматически при выходе из области видимости, то есть за рамки блока, в котором определена переменная. Для динамических переменных дела обстоят совсем по-другому, для освобождения занятой памяти используется оператор delete, который и вызывает деструктор.
Справка по математическим методам:
Прямоугольная матрица – математический элемент, в котором в виде таблицы записываются числа, называемые элементами матрицы, которые образую т прямоугольную область. Элементы, расположенные в ряд по горизонтали, называются строками матрицы, по вертикали - столбцами матрицы.
Действия с матрицами:
· Сложение: сложение матриц происходит поэлементно, например, элемент a11 складывается с элементом b11, a21 с b21 и т.д.
· Вычитание происходит поэлементно, аналогично сложению.
· Умножение матриц:
Произведением матрицы размером на матрицу размером называется матрица размером у которой:
· Транспонирование матрицы:
· Сравнение матриц: если элементы одной матрици равны элементам другой матрицы, то матрицы равны.
Алгоритмические положения
В данной программе имеется файл matrix.cpp в котором в секции private представлены типы размеров матрицы и указателей, а в секции public констуктор класса, а также представлены функции, которые будут осуществляться при работе с этим классом.
Сначала срабатывает конструктор, выделяющий память под указатели и элементы.
Matrix::Matrix(int n, int m)
{int i,j;
Matrix::n=n;
Matrix::m=m;
a=new double*[n]; // выделение памяти под указатели
for(i=0;in;i++)
a[i]=new double[m]; // выделениепамятиподэлемент
c=new double*[n];
for(int i=0; in; i++)
c[i]=new double[m];
-числа, однако число строк и число столбцов должно совпадать с прописанными в закрытой секции m и n.
{puts(\nВведите элементы матрицы:);
for(i=0;in;i++)
for(j=0;jm;j++)
{couta[i][j]=;
cina[i][j];}
coutendl;}};
Программная реализация
Тестирование
При тестировании программы выполнение программы прошло успешно.
Приложение
Код программы
#include stdafx.h
#include iostream
using namespace std;
class Matrix{
private:
int n,m;
//размеры матрицы
double **a, **c;
// указатели
public:
Matrix::Matrix(int n, int m)
{int i,j;
Matrix::n=n;
Matrix::m=m;
a=new double*[n]; // выделение памяти под указатели
for(i=0;in;i++)
a[i]=new double[m]; // выделениепамятиподэлемент
c=new double*[n];
for(int i=0; in; i++)
c[i]=new double[m];
// Заполнение массива элементами с клавиатуры
{puts(\nВведите элементы матрицы:);
for(i=0;in;i++)
for(j=0;jm;j++)
{couta[i][j]=;
cina[i][j];}
coutendl;}};
Matrix::~Matrix()
{for(int i=0;in;i++)
delete []a[i];// освобождениепамяти
delete []a;};
//Операцияприсваивания
Matrix Matrix::operator =(const Matrix A)
{for(int i=0; in; i++)
for(int j=0; jm; j++)
a[i][j]=A.c[i][j];
return *this;}
//Сложениематриц
Matrix Matrix::operator +(Matrix A)
{for(int i=0; in; i++)
for(int j=0; jm; j++)
c[i][j]=a[i][j]+A.a[i][j];
return *this;}
//Вычитаниематриц
Matrix Matrix::operator -(Matrix A)
{for(int i=0; in; i++)
for(int j=0; jm; j++)
c[i][j]=a[i][j]-A.a[i][j];
return *this;}
// Умножениематриц
Matrix Matrix::operator *(Matrix A)
{
double s=0;
for(int i=0;in;i++)
{
int z=0;
while(zA.m)
{
c[i][z]=0;
for(int j=0;jm;j++)
{
s=GetI(i,j)*A.GetI(j,z);
c[i][z]+=s;
}
z++;
}
}
return *this;
}
//Сравнениематриц
Matrix Matrix::operator ==(Matrix A)
{int f=0;
for(int i=0; in; i++)
{for(int j=0; jm; j++)
if(a[i][j]!=A.a[i][j]){ cout\nМатрицынеравны\n;f=1; break;}
if(f==1) break;}
if(f==0) cout\nМатрицыравны\n;
return *this;}
//Транспонированиематрицы
void Matrix::Transp()
{c=new double*[m];
for(int i=0;im;i++)
c[i]=new double[n]; // захватпамятиподэлемент
for(int i=0; in; i++)
for(int j=0; jm; j++)
c[j][i]=a[i][j];
for(int i=0;in;i++)
delete []a[i];// освобождениепамяти
delete []a;
a=new double*[m];
for(int i=0;im;i++)
a[i]=new double[n]; // захватпамятиподэлемент
for(int i=0; im; i++)
for(int j=0; jn; j++)
a[i][j]=c[i][j];
Matrix::n=m;
Matrix::m=n;
};
void main()
{}