Създаване на матричен клас

Създаване на матричен клас (практика).

Работата с матрици е изключително често срещана задача, пред която са изправени студентите по програмиране. Тук се опитах да подредя това, като цяло, не е трудно, но изискващо разбиране задача. И така: напишете класа на матрицата.

Например, нека вземем следния проблем: има матрица NxN, в която трябва да намерите разликата между максималния и минималния елемент във всеки ред.

Нека създадем заглавния файл matrix.h. Той ще съдържа описанието на матричния клас (обичайната практика за разделяне на описанието и тялото на класа, използвано за допълнително включване на заглавния файл в други програми на проекта) и matrix.cpp, тялото на класа ще бъде добавен към него.

Веднага трябва да разберете, че тук се създава обектът "матрица". Този обект има някои свойства и някои методи, чрез които можете да работите с обекта.

Първо, нека напишем файла matrix.h. В него ще опишем всичко, което е необходимо, за да работи класът.

#pragma веднъж // необходимо за компилатора
// обработва файла само веднъж

class CMatrixStr // нека наречем нашата матрица така

Какво характеризира матрицата? Брой колони и брой редове. Това са вътрешни данни, така че ще ги дефинираме в областта за вътрешна употреба.

частно:
int Редове; // редове
int Cols; // колони

За съхранение на данни ви е необходима памет. в C ++ динамичната памет се разпределя в блокове, след което използваме масив от указатели към блокове памет, за да емулираме достъпа, т.е. указател към указател. Ще съхраняваме плаващи данни

Защото за нашата задача е необходимо да намерим минималните и максималните стойности и да работим по-нататък с тези стойности (получаване на разликата), тогава за тях ще оставим от показалеца.

float * DataMin;
float * DataMax;

Тук вътрешните данни свършват и ние продължаваме да работим с методите.

публично:
CMatrixStr (int Row = 1, int Col = 1); // конструктор

За да зададете и прочетете един елемент:

float GetAt (int Row, int Col); // получавам
void SetAt (int Row, int Col, float Data); // пиша

По-лесно е обаче да попълните всички елементи наведнъж:

И накрая, трябва да намерите минималните и максималните стойности:

void MinMax (int Row);

Намерете още половината от битката, все още трябва да покажем, че сме намерили.

Файлът matrix.h сега изглежда така.

#pragma веднъж
клас CMatrixStr
частно:
int Редове;
int Cols;
float ** FloatData;
float * DataMin;
float * DataMax;

публично:
CMatrixStr (int Row = 1, int Col = 1);

CMatrixStr (void);
float GetAt (int Row, int Col);
void SetAt (int Row, int Col, float Data);
дисплей void ();
void MinMax (int Row);
void Fill ();
>;

Нека да преминем към действителното тяло на матрицата (matrix.cpp)
Първо, нека включим необходимите файлове в него.

#include "iostream.h" // за да работи cin
#include "stdlib.h" // за функции за работа с числа
#include "stdio.h" // за printf
#include "matrix.h" // заглавка за класа

CMatrixStr: CMatrixStr (int Row, int Col)
Редове = Ред; // присвояване на предадените параметри на вътрешни променливи
Cols = Col;

Разпределете динамично памет, за да съхранявате минималните и максималните стойности на всеки ред от получената матрица.

DataMin = нов плаващ [Редове];
DataMax = нов плаващ [Редове];

За да съхраним действителните данни на матрицата, първо разпределяме памет за масив указатели към всеки ред от матрицата
FloatData = нов плаващ * [Редове];

Сега за всеки ред отделяме памет за съхраняване на елементи в колони и по пътя попълваме нови стойности с нули и присвояваме нулеви стойности за минималния и максималния елемент.
за (int j = 0; j редове)
Ред = 0;
ако (Col Cols)
Col = 0;
връщане FloatData [Ред] [Col];
>;

void CMatrixStr: SetAt (int Row, int Col, float Data)
ако (Редове между редове)
Ред = 0;
ако (Col Cols)
Col = 0;
FloatData [Ред] [Col] = Данни;
>

С една функция получаваме минималните и максималните стойности за поредица от матрици. Съответно параметърът е серия

void CMatrixStr: MinMax (int Row)
Първо, присвояваме минималната и максималната стойност на нулевата колона. Тази стойност ще бъде нашият стандарт.

Сега сравняваме всяка стойност в колоната

за (int i = 1; i FloatData [Ред] [i])
DataMin [Ред] = FloatData [Ред] [i];
и ако е по-голяма от стойността, записана в DataMax, тогава присвояваме нова стойност

if (DataMax [Ред] ", j); // номерирайте всеки ред
за (int i = 0; i> Ред;
cout> Col;


Матрица CMatrixStr (Ред, Col); // създаваме нашата матрица
Matrix.Fill (); // попълвам със стойности
Matrix.Display (); // и показваме резултатите
>

При стартиране трябва да изглежда нещо подобно

Матрица
Ред: 0> 41 18467 6334 26500 Макс: 26500 Мин: 41 Мин-Макс = 26459
Ред: 1> 19169 15724 11478 29358 Макс: 29358 Мин: 11478 Мин-Макс = 17880
Ред: 2> 26962 24464 5705 28145 Макс: 28145 Мин: 5705 Мин-Макс = 22440

Това е всичко. Сега можете да трансформирате матрицата както искате, например да добавите метод за транспониране на матрица или сортиране на колони и редове.