Advertisement
Guest User

Untitled

a guest
Jun 14th, 2018
72
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 9.29 KB | None | 0 0
  1. #include <iostream>
  2. #include <fstream>
  3. #include <windows.h>
  4. #include <cstdlib>
  5.  
  6. using namespace std;
  7.  
  8. char inp[50], inp_1[50], inp_2[50]; //Пути к матрицам
  9. char action; //Действие между матрицами
  10. int n1, m1, n2, m2, mul, D; //Размерность матриц, переменная
  11.  
  12. int **mas_1 = new int*[n1]; //Динамический массив первой матрицы
  13. int **mas_2 = new int*[n2]; //Динамический массив второй матрицы
  14. char out [50] = {'D',':','\\','m','a','t','r','i','x','_','0','.','t','x','t'}; //Путь к матрицам
  15. int x = 0; //Счетчик действий
  16.  
  17. void Sum(){ //Функция поиска суммы матриц
  18. out [10] = x + '0'; //Присваиваем индивидуальный символ в путь
  19. ofstream output(out); //Открываем файл для записи
  20. if (n1 == n2 and m1 == m2){ //Если размер матриц совпадает...
  21. output << n1 << " " << m1 << endl; //Записываем в файл размерность массива
  22. for(int i = 0; i < n1; i++){
  23. output << endl; //Переходим на следующую строку записи
  24. for(int j = 0; j < m1; j++){
  25. mas_1[i][j] = mas_1[i][j] + mas_2[i][j]; //Находим сумму элемента
  26. output << mas_1[i][j] << " "; //Записываем ответ в файл
  27. }
  28. }
  29. }
  30. else{ //Если размеры матриц разные...
  31. output << "Найти сумму невозможно, так как матрицы разных размеров!"; //Записываем сообщение в файл
  32. }
  33. output.close(); //Закрываем файл
  34. x = x++;
  35. }
  36.  
  37. void Difference(){ //Функция поиска разницы матриц
  38. out [10] = x + '0'; //Присваиваем индивидуальный символ в путь
  39. ofstream output(out); //Открываем файл для записи
  40. if (n1 == n2 and m1 == m2){ //Если размер матриц совпадает...
  41. output << n1 << " " << m1 << endl; //Записываем в файл размерность массива
  42. for(int i = 0; i < n1; i++){
  43. output << endl; //Переходим на следующую строку записи
  44. for(int j = 0; j < m1; j++){
  45. mas_1[i][j] = mas_1[i][j] - mas_2[i][j]; //Находим разницу элемента
  46. output << mas_1[i][j] << " "; //Записываем ответ в файл
  47. }
  48. }
  49. }
  50. else{ //Если размеры матриц разные...
  51. output << "Найти разницу невозможно, так как матрицы разных размеров!"; //Записываем сообщение в файл
  52. }
  53. output.close(); //Закрываем файл
  54. x = x++;
  55. }
  56.  
  57. void Multiplication(){ //Функция поиска произведения матриц
  58. out [10] = x + '0'; //Присваиваем индивидуальный символ в путь
  59. ofstream output(out); //Открываем файл для записи
  60. if (m1 == n2){
  61. output << n1 << " " << m2 << endl; //Записываем в файл размерность массива
  62. for(int i = 0; i < n1; i++){
  63. output << endl; //Переходим на следующую строку записи
  64. for(int j = 0; j < m2; j++){
  65. mul = 0; //Обнуляем переменную
  66. for(int k = 0; k < m1; k++){
  67. mul = mul + mas_1[i][k]*mas_2[k][j]; //Находим произведение элемента
  68. }
  69. output << mul << " "; //Записываем ответ в файл
  70. }
  71. }
  72. }
  73. else{
  74. output << "Найти произведение невозможно, так как матрицы разных размеров!"; //Записываем сообщение в файл
  75. }
  76. output.close(); //Закрываем файл
  77. x = x++;
  78. }
  79.  
  80. void Determinant(){ //Функция поиска детерминанта матрицы
  81. if (n1 == 1 and m1 ==1){ //Детерминант для матрицы 1х1
  82. D = mas_1[0][0];
  83. }
  84. if (n1 == 2 and m1 ==2){ //Детерминант для матрицы 2х2
  85. D = mas_1[0][0] * mas_1[1][1] - mas_1[0][1] * mas_1[1][0];
  86. }
  87. if (n1 == 3 and m1 ==3){ //Детерминант для матрицы 3х3
  88. D = mas_1[0][0] * mas_1[1][1] * mas_1[2][2] + mas_1[0][1] * mas_1[1][2] * mas_1[2][0]
  89. + mas_1[0][2] * mas_1[1][0] * mas_1[2][1] - mas_1[0][2] * mas_1[1][1] * mas_1[2][0]
  90. - mas_1[0][1] * mas_1[1][0] * mas_1[2][2] - mas_1[0][0] * mas_1[1][2] * mas_1[2][1];
  91. }
  92. }
  93.  
  94. void Input_Output(){ //Функция ввода/вывода
  95. cout << "Введите путь к входному файлу:" << endl;
  96. cin >> inp; //Ввод пути к файлу
  97. ifstream file(inp); //Открываем файл для чтения
  98. if (!file.is_open()){ //Если файл не открыт
  99. cout << "Файл не найден!" << endl;
  100. }
  101. else{
  102. ofstream otvet("D:\\Mat_otvet.txt"); //Открываем выходной файл для записи
  103. while (!file.eof()) { //Пока не закончился файл...
  104. file>>inp_1; //Считываем путь к первой матрице
  105. ifstream mat_1(inp_1); //Открываем файл
  106. if (!mat_1.is_open()){ //Если файл не открыт...
  107. cout << "Файл <" << inp_1 << "> не найден!" << endl;
  108. }
  109. else{
  110. mat_1>>n1; //Считываем размеры матрицы
  111. mat_1>>m1; //Считываем размеры матрицы
  112. for(int i = 0; i < n1; i++){
  113. mas_1[i] = new int[m1]; //Строим двумерный массив
  114. for(int j = 0; j < m1; j++){
  115. mat_1>>mas_1[i][j]; //Заполняем массив с файла
  116. }
  117. }
  118. }
  119. mat_1.close(); //Закрываем файл
  120. file>>action; //Считываем действие
  121. if (action == '+' or action == '-' or action == '*'){
  122. file>>inp_2; //Считываем путь ко второй матрице
  123. ifstream mat_2(inp_2); //И открываем ее
  124. if (!mat_2.is_open()){ //Если файл не открыт...
  125. cout << "Файл <" << inp_2 << "> не найден!" << endl;
  126. }
  127. else{
  128. mat_2>>n2; //Считываем размеры матрицы
  129. mat_2>>m2; //Считываем размеры матрицы
  130. for(int i = 0; i < n2; i++){
  131. mas_2[i] = new int[m2]; //Строим двумерный массив
  132. for(int j = 0; j < m2; j++){
  133. mat_2>>mas_2[i][j]; //Заполняем массив с файла
  134. }
  135. }
  136. }
  137. mat_2.close(); //Закрываем файл
  138. }
  139. if (action == '+'){ //Если действие +
  140. otvet << inp_1 << " + " << inp_2 << " = "; //Записываем ответ в файл
  141. Sum(); //Используем функцию
  142. otvet << out << endl; //Записываем ответ в файл
  143. }
  144. if (action == '-'){ //Если действие -
  145. otvet << inp_1 << " - " << inp_2 << " = "; //Записываем ответ в файл
  146. Difference(); //Используем функцию
  147. otvet << out << endl; //Записываем ответ в файл
  148. }
  149. if (action == '*'){ //Если действие *
  150. otvet << inp_1 << " * " << inp_2 << " = "; //Записываем ответ в файл
  151. Multiplication(); //Используем функцию
  152. otvet << out << endl; //Записываем ответ в файл
  153. }
  154. if (action == 'D'){
  155. otvet << inp_1 << " D = "; //Записываем ответ в файл
  156. Determinant();
  157. if (n1 != m1){
  158. otvet << "Детерминант невозможно найти, так как матрицы разного размера!" << endl;
  159. }
  160. else{
  161. otvet << D << endl;
  162. }
  163. }
  164. }
  165. otvet.close(); //Закрываем выходной файл
  166. }
  167. file.close(); //Закрываем входной файл
  168. }
  169.  
  170. int main()
  171. {
  172. setlocale(LC_ALL, "Russian"); //Подключаем Русский язык
  173.  
  174. Input_Output(); //Используем функцию
  175. cout << "Работа завершена...";
  176. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement