Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //Создание матрицы
- function create_matr(size){
- var matrix = new Matr(size);
- for(var i =0; i < size; ++i){
- matrix[i] = new Matr(size);
- }
- for(var i =0; i < size; ++i){
- for(var j =0; j < size; ++j){
- if(i==j){
- matrix[i][j] = 1;
- }
- else
- if (i > j){
- matrix[i][j] = 8;
- } else {
- matrix[i][j] = 3;
- }
- }
- }
- return matrix;
- }
- //Вычисление количества элементов кратных 3
- function mod3_function(matrix){
- var score = 0;
- for(var i = 0; i < matrix.length; ++i){
- for(var j = 0; j < matrix.length; ++j){
- if(matr[i][j] % 3 == 0)
- ++score;
- }
- }
- return score;
- }
- //Вычисление суммы элементов матрицы в каждой четной строке
- function mod2_string_function(matrix){
- var score = new Array(Math.floor((matr.length+1)/2));
- for(var i = 1; i < matr.length; i+=2){
- score[i+1] = sum(matr[i]);
- return score;
- }
- function sum(line){
- var score = 0;
- for(var i = 0; i < line.length; ++i){
- score += line[i];
- }
- return score;
- }
- function Determinant(matr) //нахождение определителя, алгоритм Барейса
- {
- var N = matr.length, B = [], denom = 1, exchanges = 0;
- for (var i = 0; i < N; ++i)
- { B[ i ] = [];
- for (var j = 0; j < N; ++j) B[ i ][j] = matr[ i ][j];
- }
- for (var i = 0; i < N-1; ++i)
- { var maxN = i, maxValue = Math.abs(B[ i ][ i ]);
- for (var j = i+1; j < N; ++j)
- { var value = Math.abs(B[j][ i ]);
- if (value > maxValue){ maxN = j; maxValue = value; }
- }
- if (maxN > i)
- { var temp = B[ i ]; B[ i ] = B[maxN]; B[maxN] = temp;
- ++exchanges;
- }
- else { if (maxValue == 0) return maxValue; }
- var value1 = B[ i ][ i ];
- for (var j = i+1; j < N; ++j)
- { var value2 = B[j][ i ];
- B[j][ i ] = 0;
- for (var k = i+1; k < N; ++k) B[j][k] = (B[j][k]*value1-B[ i ][k]*value2)/denom;
- }
- denom = value1;
- }
- if (exchanges%2) return -B[N-1][N-1];
- else return B[N-1][N-1];
- }
- function AdjugateMatrix(matr) //союзная матрица
- {
- var N = matr.length, adjA = [];
- for (var i = 0; i < N; i++)
- { adjA[ i ] = [];
- for (var j = 0; j < N; j++)
- { var B = [], sign = ((i+j)%2==0) ? 1 : -1;
- for (var m = 0; m < j; m++)
- { B[m] = [];
- for (var n = 0; n < i; n++) B[m][n] = matr[m][n];
- for (var n = i+1; n < N; n++) B[m][n-1] = matr[m][n];
- }
- for (var m = j+1; m < N; m++)
- { B[m-1] = [];
- for (var n = 0; n < i; n++) B[m-1][n] = matr[m][n];
- for (var n = i+1; n < N; n++) B[m-1][n-1] = matr[m][n];
- }
- adjA[ i ][j] = sign*Determinant(B); // Функцию Determinant см. выше
- }
- }
- return adjA;
- }
- //Транспонирование матрицы
- function TransMatrix(matr){
- var m = matr.length, n = matr[0].length, matrT = [];
- for(var i = 0; i<n; i++){
- matrT[i]=[];
- for(var j = 0; j<m; j++) matrT[i][j] = matr[i][j];
- }
- return matrT;
- }
- //Вычисление произведения четных элементов в каждом нечетном столбце
- function step4(matr) {
- matrT = TransMatrix(matr);
- var res = new Array(Math.floor((matr.length+1)/2));
- for(var i = 0; i < res.length; ++i) {
- res[i] = 1;
- }
- for(var j = 0; j < matrT.length; j+=2) {
- if ((j%2) == 0){
- for(var i = 0; i < matrT.length; ++i) {
- if((i%2)!=0 ){
- // WScript.Echo("ij: " + matrT[i][j]);
- res[j/2] *= matrT[i][j];
- }
- }
- }
- }
- return res;
- }
- //Вычисление суммы элементов выше побочнгой диагонали
- function step5(matr) {
- var res = 0;
- for(var i = 0; i < matr.length; ++i) {
- for(var j = 0; j < matr.length-i-1; ++j) {
- res += matr[i][j];
- }
- }
- return res;
- }
- function selSort(arr, comparator) {
- var maxI = 0;
- for(var i = 0; i < arr.length; ++i) {
- maxI = i;
- for(var j = i+1; j < arr.length; ++j) {
- if(comparator(arr[j],arr[maxI]) == 1) {
- maxI = j;
- }
- }
- var temp = arr[i];
- arr[i] = arr[maxI];
- arr[maxI] = temp;
- }
- }
- //Сортрировка каждой четной строки матрицы по возрастанию, каждой нечетной по убыванию
- function step6(matr){
- for(var i = 0; i < matr.length; i+=2) {
- selSort(matr[i], function(a,b) {
- if(a > b) return 1;
- else if(a < b) return -1;
- else return 0;
- });
- }
- for(var i = 1; i < matr.length; i+=2) {
- selSort(matr[i], function(a,b) {
- if(a > b) return -1;
- else if(a < b) return 1;
- else return 0;
- }
- )}
- }
- function getM(matr,i,j) {
- var res = new Array(matr.length-1);
- for(var ii = 0; ii < res.length;
- ++ii) {
- res[ii] = new Array(matr.length-1);
- }
- for(var ii = 0; ii < matr.length; ++ii) {
- for(var jj = 0; jj < matr.length; ++jj) {
- if(ii != i && jj != j) {
- res[ii > i ? ii-1 : ii][jj > j ? jj-1 : jj] = matr[ii][jj];
- }
- }
- }
- return res;
- }
- function det(matr) {
- if(matr.length == 1) {
- return matr[0];
- }
- var res = 0;
- for(var i = 0; i < matr.length; ++i) {
- res += (i % 2 == 0 ? 1 : -1)*matr[0][i]*det(getM(matr,0,i));
- }
- return res;
- }
- //Вычисление обратной матрицы для исходной
- function step7(matr) // A - двумерный квадратный массив
- {
- var det = Determinant(matr); // Функцию Determinant см. выше
- if (det == 0) return false;
- var N = matr.length, matr = AdjugateMatrix(matr); // Функцию AdjugateMatrix см. выше
- for (var i = 0; i < N; i++){
- for (var j = 0; j < N; j++) matr[ i ][j] /= det;
- }
- return matr;
- }
- function objToString (obj) {
- var str = '';
- for (var element in obj) {
- if (obj.hasOwnProperty(element)) {
- str += element + '-ая строка ' + obj[element] + '\n';
- }
- }
- return str;
- }
- //Умножение исходной матрицы на сортированную
- function step8(matr1,matr2) {
- var rowsA = matr1.length, colsA = matr1[0].length,
- rowsB = matr2.length, colsB = matr2[0].length,
- matr3 = [];
- if (colsA != rowsB) return false;
- for (var i = 0; i < rowsA; i++) matr3[ i ] = [];
- for (var k = 0; k < colsB; k++)
- { for (var i = 0; i < rowsA; i++)
- { var t = 0;
- for (var j = 0; j < rowsB; j++) t += matr1[ i ][j]*matr2[j][k];
- matr3[ i ][k] = t;
- }
- }
- return matr3;
- }
- //Преобразование в строку
- function step9(matr) {
- var res = "";
- for(var i = 0; i < matr.length; ++i) {
- for(var j = 0; j < matr.length; ++j){
- res+=matr[i][j];
- if(j != matr.length-1) res+=',';
- }
- res+='\n';
- }
- return res;
- }
- WScript.Echo("Введите размерность матрицы: ");
- var n = parseInt(WScript.StdIn.ReadLine());
- var matr1 = create_matr(n);
- var matr2 = create_matr(n);
- WScript.Echo("Полученная матрица: ");
- WScript.Echo(step9(matr1));
- WScript.Echo("Количество элементов кратных 3: " );
- WScript.Echo(mod3_function(matr1));
- WScript.Echo("Cумма элементов матрицы в каждой четной строке: ");
- WScript.Echo(objToString(mod2_string_function(matr1)));
- WScript.Echo("");
- WScript.Echo("Произведение четных элементов в каждом нечетном столбце:");
- WScript.Echo(objToString(step4(matr1)));
- WScript.Echo("");
- WScript.Echo("Сумма элементов выше побочной диагонали: ");
- WScript.Echo(step5(matr1));
- WScript.Echo("");
- step6(matr2);
- WScript.Echo("Сортрировка каждой четной строки матрицы по возрастанию, каждой нечетной по убыванию: ");
- WScript.Echo(step9(matr2));
- WScript.Echo("Обратная матрица для исходной: ");
- WScript.Echo(step9(step7(matr1)));
- WScript.Echo("Умножение исходной матрицы на сортированную: ");
- WScript.Echo(step9(step8(matr1,matr2)));
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement