Программа,исходник класса реализующего работу с матрицами и вычисление третьей нормы матрицы на Си(C++)


Добавил:DMT
Дата создания:28 апреля 2008, 22:24
Дата обновления:28 апреля 2008, 22:24
Просмотров:13030 последний сегодня, 3:19
Комментариев: 4
Программа,исходник класса реализующего работу с матрицами и вычисление третьей нормы матрицы

Рассмотрим программу с использованием некоторых рассмотренных классов ввода/вывода в сочетании с собственным классом Matrix, в котором собраны матрица и порядок этой матрицы. Элементы-члены в свою очередь являются закрытыми данными класса. В этой программе мы рассмотрим ввод/вывод объектов собственного класса с использованием классов istream и ostream, функции которых будут определены дружественными для нашего класса. Это достигается перегрузкой операторов функций >> (для объекта cin класса istream) и << (для объекта cout класса ostream), чтобы они поддерживали работу с нашим созданным классом. Помимо этого в программе будут рассмотрены перегрузки таких операторов, как присваивание (=), сложение (+), вычитание (-) и умножение (*). Причем сложение, вычитание и умножение перегружаются дружественными функциями для класса Matrix, а присваивание - функцией-членом нашего класса Matrix, т.к. для этой операции компилятор С++ предусматривает скрытую функцию по умолчанию, если она не определена в явном виде. Еще в нашем классе рассмотрена функция-элемент norma(), которая возвращает норму матрицы типа float, т.е. третью норму матрицы

Кроме того, в программе предусмотрены два вида конструкторов: конструктор копирования и, следовательно, конструктор по умолчанию; и соответственно для удаления объекта из памяти без завершения программы предусмотрен деструктор.
Для ввода и вывода объектов класса Matrix использованы только объекты классов istream и ostream: cin и cout. Функции printf() и scanf() в программе не используются

Текст программы :

Код на C++
  1.  
  2. #include <iostream.h>
  3. #include <conio.h>
  4. #include <math.h>
  5.  
  6. int y;
  7.  
  8. // Класс матрица
  9. class Matrix
  10. {
  11. private:
  12. // Собственные элементы:
  13.  
  14. static int size; // Порядок матрицы
  15. int **matrix; // Матрица
  16. public:
  17. // Общедоступные элементы:
  18.  
  19. Matrix() {} // Конструктор по умолчанию
  20. Matrix(const Matrix &Object); // Конструктор копирования
  21. ~Matrix(); // Деструктор
  22.  
  23. float norma(); // Норма матрицы
  24. Matrix &operator=(const Matrix &Object); // Перегрузка =
  25.  
  26. Matrix operator+(Matrix &); // Сложение матриц
  27. Matrix operator-(Matrix &); // Вычитание матриц
  28. Matrix operator*(Matrix &); // Перемножение матриц
  29.  
  30. // Перегрузка оператора << для вывода матрицы
  31. friend ostream &operator<<(ostream &, Matrix &);
  32. // Перегрузка оператора >> для ввода матрицы
  33. friend istream &operator>>(istream &, Matrix &);
  34. };
  35.  
  36. // Конструктор копирования
  37. Matrix::Matrix(const Matrix &Object)
  38. {
  39. int i,j;
  40. size = Object.size;
  41. matrix = new int *[size];
  42. for (i = 0; i < size; i++)
  43. matrix[i] = new int [size];
  44. for (i = 0; i < size; i++)
  45. for (j = 0; j < size; j++)
  46. matrix[i][j] = Object.matrix[i][j];
  47. }
  48.  
  49. // Деструктор
  50. Matrix::~Matrix()
  51. {
  52. for (int i = 0; i < size; i++)
  53. delete matrix[i];
  54. delete matrix;
  55. }
  56.  
  57. // Норма матрицы
  58. float Matrix::norma()
  59. {
  60. int i,j;
  61. float tmp = 0;
  62. for (i = 0; i < size; i++)
  63. for (j = 0; j < size; j++)
  64. tmp += matrix[i][j] * matrix[i][j];
  65. return sqrt(tmp);
  66. }
  67.  
  68. // Перегрузка оператора =
  69. Matrix& Matrix::operator=(const Matrix &Object)
  70. {
  71. int i, j;
  72. size = Object.size;
  73. matrix = new int *[size];
  74. for (i = 0; i < size; i++)
  75. matrix[i] = new int [size];
  76. for (i = 0; i < size; i++)
  77. for (j = 0; j < size; j++)
  78. matrix[i][j] = Object.matrix[i][j];
  79. return *this;
  80. }
  81.  
  82. // Перегрузка оператора +
  83. Matrix Matrix::operator+(Matrix &fp1)
  84. {
  85. int i, j;
  86. if (size == fp1.size)
  87. {
  88. Matrix fp(fp1);
  89. for (i=0;i<fp.size;i++)
  90. for (j=0;j<fp.size;j++)
  91. fp.matrix[i][j]=matrix[i][j]+fp1.matrix[i][j];
  92. return fp;
  93. }
  94. }
  95.  
  96. // Перегрузка оператора -
  97. Matrix Matrix::operator-(Matrix &fp1)
  98. {
  99. int i, j;
  100. if (size == fp1.size)
  101. {
  102. Matrix fp(fp1);
  103. for (i = 0; i < fp.size; i++)
  104. for (j = 0; j < fp.size; j++)
  105. fp.matrix[i][j] = matrix[i][j] - fp1.matrix[i][j];
  106. return fp;
  107. }
  108. }
  109.  
  110. // Перегрузка оператора *
  111. Matrix Matrix::operator*(Matrix &fp1)
  112. {
  113. int i, j, k, sum;
  114. if (size == fp1.size)
  115. {
  116. Matrix fp(fp1);
  117. for(i = 0; i < fp.size; i++)
  118. for(j = 0; j < fp.size; j++)
  119. {
  120. sum = 0;
  121. for (k = 0; k < fp.size; k++)
  122. sum += matrix[i][k] * fp1.matrix[k][j];
  123. fp.matrix[i][j]=sum;
  124. }
  125. return fp;
  126. }
  127. }
  128.  
  129. // Перегрузка оператора >>
  130. istream &operator>>(istream &fi, Matrix &fp)
  131. {
  132. int i, j;
  133. fp.matrix = new int *[fp.size];
  134. for (i = 0; i < fp.size; i++)
  135. fp.matrix[i] = new int [fp.size];
  136.  
  137. for (i = 0; i < fp.size; i++)
  138. for (j = 0; j < fp.size; j++)
  139. {
  140. gotoxy((j + 1) * 4, y + i + 2);
  141. fi >> fp.matrix[i][j];
  142. }
  143. y += i + 2 /*- 1*/;
  144. return fi;
  145. }
  146.  
  147. // Перегрузка оператора <<
  148. ostream &operator<<(ostream &fo, Matrix &fp)
  149. {
  150. int i, j;
  151. for (i = 0; i < fp.size; i++)
  152. for (j = 0; j < fp.size; j++)
  153. {
  154. gotoxy((j + 1) * 4, y + i + 2);
  155. fo << fp.matrix[i][j];
  156. }
  157. y += i + 2 /*- 1*/;
  158. return fo;
  159. }
  160.  
  161. int Matrix::size = 2;
  162.  
  163. void main()
  164. {
  165. clrscr();
  166. Matrix pr1, pr2;
  167. cout << "Введите матрицу A ->\n ";
  168. cin >> pr1;
  169. cout << "\nВведите матрицу B ->\n ";
  170. cin >> pr2;
  171. cout << "\nA+B="<<(pr1+pr2);
  172. cout << "\n\nA-B="<<(pr1-pr2);
  173. cout << "\n\nA*B="<<(pr1*pr2);
  174. pr1 = pr2;
  175. cout << "\nНорма матрицы B = " << pr1.norma();
  176. getch();
  177. }
При использовании обязательна ссылка на http://DMTSoft.ru
up

Комментарии для "Программа,исходник класса реализующего работу с матрицами и вычисление третьей нормы матрицы на Си(C++)"


Пользователь: alucard
Сообщений: 1
Статус: Незримый
Зарегистрирован:
30 октября 2008, 7:05
Был:30 октября 2008, 7:15
alucard
smsup
Дата: 30 октября 2008, 7:15 Сообщение № 1
Эх.... Хотелось бы весь код посмотреть... Но начало хорошее)
Пользователь: iat
Сообщений: 2
Статус: Незримый
Зарегистрирован:
6 декабря 2008, 19:16
Был:7 декабря 2008, 0:10
iat
smsup
Дата: 6 декабря 2008, 19:56 Сообщение № 2
плз пришлите полный алгоритм на мэйл(iat_08@mail.ru)
Пользователь: женька
Сообщений: 1
Статус: Незримый
Зарегистрирован:
22 декабря 2008, 14:29
Был:22 декабря 2008, 14:31
женька
smsup
Дата: 22 декабря 2008, 14:31 Сообщение № 3
выложил свой исходник а меня все равно не пускают просмотреть все . мутность какая то никому не нужная
Пользователь: DMT
Сообщений: 123
Статус: Программист
Зарегистрирован:
18 октября 2007, 2:35
Был:31 мая, 23:33
DMT
smsup
Дата: 22 декабря 2008, 18:52 Сообщение № 4
Извините но никто не говорил что доступ открывается всем кто прислал исходик! Только стоющие исходники!! А заюзаный класс векторов(которы Вы прислали) к сожелению есть на других сайтах - а это уже противоречит правилам нашего сайта!!!