Advertisement
Anton0093

Untitled

Apr 14th, 2020
318
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. //Создание матрицы
  2. function create_matr(size){
  3. var matrix = new Matr(size);
  4. for(var i =0; i < size; ++i){
  5. matrix[i] = new Matr(size);
  6. }
  7. for(var i =0; i < size; ++i){
  8. for(var j =0; j < size; ++j){
  9. if(i==j){
  10. matrix[i][j] = 1;
  11. }
  12. else
  13. if (i > j){
  14. matrix[i][j] = 8;
  15. } else {
  16. matrix[i][j] = 3;
  17. }
  18. }
  19. }
  20. return matrix;
  21. }
  22.  
  23. //Вычисление количества элементов кратных 3
  24. function mod3_function(matrix){
  25. var score = 0;
  26. for(var i = 0; i < matrix.length; ++i){
  27. for(var j = 0; j < matrix.length; ++j){
  28. if(matr[i][j] % 3 == 0)
  29. ++score;
  30. }
  31. }
  32. return score;
  33. }
  34.  
  35. //Вычисление суммы элементов матрицы в каждой четной строке
  36. function mod2_string_function(matrix){
  37. var score = new Array(Math.floor((matr.length+1)/2));
  38. for(var i = 1; i < matr.length; i+=2){
  39. score[i+1] = sum(matr[i]);
  40. return score;
  41. }
  42.  
  43. function sum(line){
  44. var score = 0;
  45. for(var i = 0; i < line.length; ++i){
  46. score += line[i];
  47. }
  48. return score;
  49. }
  50.  
  51. function Determinant(matr) //нахождение определителя, алгоритм Барейса
  52. {
  53. var N = matr.length, B = [], denom = 1, exchanges = 0;
  54. for (var i = 0; i < N; ++i)
  55. { B[ i ] = [];
  56. for (var j = 0; j < N; ++j) B[ i ][j] = matr[ i ][j];
  57. }
  58. for (var i = 0; i < N-1; ++i)
  59. { var maxN = i, maxValue = Math.abs(B[ i ][ i ]);
  60. for (var j = i+1; j < N; ++j)
  61. { var value = Math.abs(B[j][ i ]);
  62. if (value > maxValue){ maxN = j; maxValue = value; }
  63. }
  64. if (maxN > i)
  65. { var temp = B[ i ]; B[ i ] = B[maxN]; B[maxN] = temp;
  66. ++exchanges;
  67. }
  68. else { if (maxValue == 0) return maxValue; }
  69. var value1 = B[ i ][ i ];
  70. for (var j = i+1; j < N; ++j)
  71. { var value2 = B[j][ i ];
  72. B[j][ i ] = 0;
  73. for (var k = i+1; k < N; ++k) B[j][k] = (B[j][k]*value1-B[ i ][k]*value2)/denom;
  74. }
  75. denom = value1;
  76. }
  77. if (exchanges%2) return -B[N-1][N-1];
  78. else return B[N-1][N-1];
  79. }
  80.  
  81. function AdjugateMatrix(matr) //союзная матрица
  82. {
  83. var N = matr.length, adjA = [];
  84. for (var i = 0; i < N; i++)
  85. { adjA[ i ] = [];
  86. for (var j = 0; j < N; j++)
  87. { var B = [], sign = ((i+j)%2==0) ? 1 : -1;
  88. for (var m = 0; m < j; m++)
  89. { B[m] = [];
  90. for (var n = 0; n < i; n++) B[m][n] = matr[m][n];
  91. for (var n = i+1; n < N; n++) B[m][n-1] = matr[m][n];
  92. }
  93. for (var m = j+1; m < N; m++)
  94. { B[m-1] = [];
  95. for (var n = 0; n < i; n++) B[m-1][n] = matr[m][n];
  96. for (var n = i+1; n < N; n++) B[m-1][n-1] = matr[m][n];
  97. }
  98. adjA[ i ][j] = sign*Determinant(B); // Функцию Determinant см. выше
  99. }
  100. }
  101. return adjA;
  102. }
  103.  
  104. //Транспонирование матрицы
  105. function TransMatrix(matr){
  106. var m = matr.length, n = matr[0].length, matrT = [];
  107. for(var i = 0; i<n; i++){
  108. matrT[i]=[];
  109. for(var j = 0; j<m; j++) matrT[i][j] = matr[i][j];
  110. }
  111. return matrT;
  112. }
  113.  
  114. //Вычисление произведения четных элементов в каждом нечетном столбце
  115. function step4(matr) {
  116. matrT = TransMatrix(matr);
  117.  
  118. var res = new Array(Math.floor((matr.length+1)/2));
  119. for(var i = 0; i < res.length; ++i) {
  120. res[i] = 1;
  121. }
  122.  
  123. for(var j = 0; j < matrT.length; j+=2) {
  124. if ((j%2) == 0){
  125. for(var i = 0; i < matrT.length; ++i) {
  126. if((i%2)!=0 ){
  127. // WScript.Echo("ij: " + matrT[i][j]);
  128. res[j/2] *= matrT[i][j];
  129. }
  130.  
  131. }
  132. }
  133.  
  134. }
  135. return res;
  136.  
  137. }
  138.  
  139. //Вычисление суммы элементов выше побочнгой диагонали
  140. function step5(matr) {
  141. var res = 0;
  142. for(var i = 0; i < matr.length; ++i) {
  143. for(var j = 0; j < matr.length-i-1; ++j) {
  144. res += matr[i][j];
  145. }
  146. }
  147. return res;
  148. }
  149.  
  150. function selSort(arr, comparator) {
  151. var maxI = 0;
  152. for(var i = 0; i < arr.length; ++i) {
  153. maxI = i;
  154. for(var j = i+1; j < arr.length; ++j) {
  155. if(comparator(arr[j],arr[maxI]) == 1) {
  156. maxI = j;
  157. }
  158. }
  159. var temp = arr[i];
  160. arr[i] = arr[maxI];
  161. arr[maxI] = temp;
  162. }
  163. }
  164.  
  165. //Сортрировка каждой четной строки матрицы по возрастанию, каждой нечетной по убыванию
  166. function step6(matr){
  167. for(var i = 0; i < matr.length; i+=2) {
  168. selSort(matr[i], function(a,b) {
  169. if(a > b) return 1;
  170. else if(a < b) return -1;
  171. else return 0;
  172. });
  173. }
  174. for(var i = 1; i < matr.length; i+=2) {
  175. selSort(matr[i], function(a,b) {
  176. if(a > b) return -1;
  177. else if(a < b) return 1;
  178. else return 0;
  179. }
  180. )}
  181. }
  182.  
  183. function getM(matr,i,j) {
  184. var res = new Array(matr.length-1);
  185. for(var ii = 0; ii < res.length;
  186.  
  187. ++ii) {
  188. res[ii] = new Array(matr.length-1);
  189. }
  190. for(var ii = 0; ii < matr.length; ++ii) {
  191. for(var jj = 0; jj < matr.length; ++jj) {
  192. if(ii != i && jj != j) {
  193. res[ii > i ? ii-1 : ii][jj > j ? jj-1 : jj] = matr[ii][jj];
  194. }
  195. }
  196. }
  197. return res;
  198. }
  199.  
  200. function det(matr) {
  201. if(matr.length == 1) {
  202. return matr[0];
  203. }
  204. var res = 0;
  205. for(var i = 0; i < matr.length; ++i) {
  206. res += (i % 2 == 0 ? 1 : -1)*matr[0][i]*det(getM(matr,0,i));
  207. }
  208. return res;
  209. }
  210. //Вычисление обратной матрицы для исходной
  211. function step7(matr) // A - двумерный квадратный массив
  212. {
  213. var det = Determinant(matr); // Функцию Determinant см. выше
  214. if (det == 0) return false;
  215. var N = matr.length, matr = AdjugateMatrix(matr); // Функцию AdjugateMatrix см. выше
  216. for (var i = 0; i < N; i++){
  217. for (var j = 0; j < N; j++) matr[ i ][j] /= det;
  218. }
  219. return matr;
  220. }
  221.  
  222. function objToString (obj) {
  223. var str = '';
  224. for (var element in obj) {
  225. if (obj.hasOwnProperty(element)) {
  226. str += element + '-ая строка ' + obj[element] + '\n';
  227. }
  228. }
  229. return str;
  230. }
  231.  
  232. //Умножение исходной матрицы на сортированную
  233. function step8(matr1,matr2) {
  234. var rowsA = matr1.length, colsA = matr1[0].length,
  235. rowsB = matr2.length, colsB = matr2[0].length,
  236. matr3 = [];
  237. if (colsA != rowsB) return false;
  238. for (var i = 0; i < rowsA; i++) matr3[ i ] = [];
  239. for (var k = 0; k < colsB; k++)
  240. { for (var i = 0; i < rowsA; i++)
  241. { var t = 0;
  242. for (var j = 0; j < rowsB; j++) t += matr1[ i ][j]*matr2[j][k];
  243. matr3[ i ][k] = t;
  244. }
  245. }
  246. return matr3;
  247. }
  248. //Преобразование в строку
  249. function step9(matr) {
  250. var res = "";
  251. for(var i = 0; i < matr.length; ++i) {
  252. for(var j = 0; j < matr.length; ++j){
  253. res+=matr[i][j];
  254. if(j != matr.length-1) res+=',';
  255. }
  256. res+='\n';
  257. }
  258. return res;
  259. }
  260.  
  261. WScript.Echo("Введите размерность матрицы: ");
  262. var n = parseInt(WScript.StdIn.ReadLine());
  263. var matr1 = create_matr(n);
  264. var matr2 = create_matr(n);
  265.  
  266. WScript.Echo("Полученная матрица: ");
  267. WScript.Echo(step9(matr1));
  268.  
  269. WScript.Echo("Количество элементов кратных 3: " );
  270. WScript.Echo(mod3_function(matr1));
  271.  
  272. WScript.Echo("Cумма элементов матрицы в каждой четной строке: ");
  273. WScript.Echo(objToString(mod2_string_function(matr1)));
  274. WScript.Echo("");
  275.  
  276. WScript.Echo("Произведение четных элементов в каждом нечетном столбце:");
  277. WScript.Echo(objToString(step4(matr1)));
  278. WScript.Echo("");
  279.  
  280. WScript.Echo("Сумма элементов выше побочной диагонали: ");
  281. WScript.Echo(step5(matr1));
  282. WScript.Echo("");
  283.  
  284. step6(matr2);
  285. WScript.Echo("Сортрировка каждой четной строки матрицы по возрастанию, каждой нечетной по убыванию: ");
  286. WScript.Echo(step9(matr2));
  287.  
  288. WScript.Echo("Обратная матрица для исходной: ");
  289. WScript.Echo(step9(step7(matr1)));
  290.  
  291. WScript.Echo("Умножение исходной матрицы на сортированную: ");
  292. WScript.Echo(step9(step8(matr1,matr2)));
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement