Если типы Vector и Matrix ранее определены, то их можно использовать при определении соответствующих структур:
...
// структура вещественного вектора
struct SVector
{
int n;
Vector V;
};
// структура вещественной матрицы
struct SMatrix
{
int m,n;
Matrix A;
};
...
После служебного слова struct (структура) задается идентификатор структуры, а затем идет описание ее элементов также, как обычно описываются переменные в С++. В структуре SMatrix содержится три элемента: переменные целого типа m и n, представляющие собой число строк и столбцов матрицы, и двумерный массив A, содержащий элементы матрицы. Таким образом, эта структура содержит полную информацию о матрице. Определение структур SVector и SMatrix имеется в модуле define.h.
Далее можно использовать типы SVector и SMatrix для описания конкретных объектов программы – векторов и матриц, например:
SVector X,Y;
SMatrix A,B,C;
Для обращения к конкретному элементу объекта типа структуры используется составное имя, состоящее из идентификатора объекта и идентификатора элемента структуры, разделенных точкой. Правила описания структур и работы с ними иллюстрируется ниже на простом примере программы, которая задает значения элементов вещественной матрицы и передает ее в виде структуры в подпрограмму-функцию OutMatS( ), которая выводит ее на экран.
Листинг 2
#include <iostream.h>
#include <conio.h>
#include “define.h”
void OutMatS(SMatrix, int, int); // прототип функции OutMatS
void main()
{
// описание матрицы как структуры
SMatrix B;
// задание матрицы
B.m=3;
B.n=4;
B.A[1][1]=1.1; B.A[1][2]=1.2; B.A[1][3]=1.3; B.A[1][4]=1.4;
B.A[2][1]=2.1; B.A[2][2]=2.2; B.A[2][3]=2.3; B.A[2][4]=2.4;
B.A[3][1]=3.1; B.A[3][2]=3.2; B.A[3][3]=3.3; B.A[3][4]=3.4;
// вывод матрицы на дисплей с помощью OutMatS
clrscr();
OutMatS(B,5,2);
getch();
}
// модуль, содержащий OutMatS;
// функция вывода матрицы на дисплей
void OutMatS(SMatrix A, int w, int p)
{
int i,j;
for (i=1; i<=A.m; i++)
{
for (j=1; j<=A.n; j++)
{
cout.width(w);
cout.precision(p);
cout<<A.A[i][j]<<" ";
}
cout<<endl;
}
}
В главной программе переменная В определяется как объект типа SMatrix. Затем в ней присваиваются значения элементам объекта B, сначала B.m и B.n, а затем и самим элементам матрицы. Далее следует обращение к функции OutMatS(), куда объект B передается через список фактических параметров. Процедура осуществляет вывод элементов матрицы на дисплей.
Обратите внимание на идентификацию элементов структур: сначала записывается имя самого объекта, а через точку - имя элемента. В процедуре показано, что эти имена могут и совпадать (A.A), но путать их не следует.
На первый взгляд может показаться, что использование структур неудобно из-за сложной идентификации их элементов. Однако во многих программах их применение позволяет достигнуть существенного упрощения. Кроме сокращения списка параметров функций, как в вышеприведенном примере, можно
- непосредственно выполнять операции присваивания с объектами типа структур: B=A;
- делать структуру возвращаемым значением функции: С=AddMat(A,B);
что нельзя делать при работе с обычными массивами.
Программа для перемножения матрицы на вектор, аналогичная приведенной на листинге 1, будет выглядеть следующим образом:
Листинг 3
// программа для умножения матрицы на вектор
#include <iostream.h>
#include <conio.h>
#include “define.h”
SVector MultMatVecS(SMatrix, SVector);
void main()
{
// описание данных
int m,n;
SMatrix A;
SVector X,Y;
…
// ввод матрицы A
…
// ввод вектора X
…
// перемножение
Y=MultMatVecS(A,X);
// вывод результата
…
}
Помимо прочего, освоение работы со структурами является важным шагом к объектно-ориентированному программированию.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.