Переменную не видно
Помогите разобраться и подскажите, как корректно записать, пожалуйста.
Не могу понять, почему в функции TrUnMatrix(A) функция TrMatrixMinor(i,j,A) не видит переменную А. <script type="text/javascript"> function TransMatrix(A) //Транспонирование матрицы { var i, j, AT = []; for (i=0; i<A[0].length; i++) { AT[i] = []; for (j=0; j<A.length; j++) { AT[i][j] = A[j][i] } } return (AT); } function TrMatrixMinor(i,j,A) //Минор Tr.un. матрицы { A.splice(i,1); A = TransMatrix(A); A.splice(j,1); return (A[0][1]+A[1][0]); } function TrUnMatrix(A) //Проблема с этой функцией { var i,j, adjA = []; for (i=0; i<A.length; i++) { adjA[i] = []; for (j=0; j<A.length; j++) { adjA[i][j] = TrMatrixMinor(i,j,A) } //Функция TrMatrixMinor не видит } //переменную A(2d массив). return adjA.join('\n'); //Должен возвращаться 2d массив такого же размера как и A } </script> <button onclick="alert( TrUnMatrix([[3,-4,6,23],[-11,71,0,31],[-4,-7,19,1],[-41,17,-19,-35]]) )">Вычислить</button> |
<script type="text/javascript"> function TransMatrix(A) //Транспонирование матрицы { var i, j, AT = []; for (i=0; i<A[0].length; i++) { AT[i] = []; for (j=0; j<A.length; j++) { AT[i][j] = A[j][i] } } return (AT); } function TrMatrixMinor(i,j,A) //Минор Tr.un. матрицы { A.splice(i,1); A = TransMatrix(A); A.splice(j,1); alert('function TrMatrixMinor(i,j,A)\n\nA[0][1]='+A[0][1]+'\nA[1][0]='+A[1][0]) return (A[0][1]+A[1][0]); } function TrUnMatrix(A) //Проблема с этой функцией { var i,j, adjA = []; for (i=0; i<A.length; i++) { adjA[i] = []; for (j=0; j<A.length; j++) { adjA[i][j] = TrMatrixMinor(i,j,A) } //Функция TrMatrixMinor не видит } //переменную A(2d массив). return adjA.join('\n'); //Должен возвращаться 2d массив такого же размера как и A } </script> <button onclick="alert('Ответ:\n\n'+ TrUnMatrix([[3,-4,6,23],[-11,71,0,31],[-4,-7,19,1],[-41,17,-19,-35]]) )">Вычислить</button> |
Deff, я не понимаю, что с этим делать, я извиняюсь.
Сейчас непосредственно записал массив во вложенную функцию в цикле - все верно находит, но никак не хочет передаваться через переменную A :( <script type="text/javascript"> function TransMatrix(A) //Транспонирование (стандартное) матрицы { var i, j, AT = []; for (i=0; i<A[0].length; i++) { AT[i] = []; for (j=0; j<A.length; j++) { AT[i][j] = A[j][i] } } return (AT); } function TrMatrixMinor(i,j,A) //Минор Tr.un. матрицы { A.splice(i,1); A = TransMatrix(A); A.splice(j,1); return (A[0][1]+A[1][0]); } function TrUnMatrix(A) //Проблема с этой функцией { var i,j, adjA = []; for (i=0; i<A.length; i++) { adjA[i] = []; for (j=0; j<A.length; j++) { var C = [[3,-4,6,23],[-11,71,0,31],[-4,-7,19,1],[-41,17,-19,-35]]; adjA[i][j] = TrMatrixMinor(i,j,C) } //Функция TrMatrixMinor не видит } //переменную A(2d массив) return adjA.join('\n'); //Должен возвращаться 2d массив такого же размера как и A } </script> <button onclick="alert( TrUnMatrix([[3,-4,6,23],[-11,71,0,31],[-4,-7,19,1],[-41,17,-19,-35]]) )">Вычислить</button> |
Demath,
A.splice(i,1); Походу ты удаляешь её |
Deff, а как можно удалить в двумерном квадратном массиве заданные строку и столбец?
Например, в [[3,-4,6],[-11,71,0],[-4,-7,19]] нужно удалить 2-ю строку и 3-й столбец, т.е. чтобы на выходе получилось [[3,-4],[-4,-7]]. |
Demath,
var arr = [[3,-4,6],[-11,71,0],[-4,-7,19]], t = 1 , e = 2 , l = arr.length; while (l--) { arr[l].splice(e,1); if(l==t) arr.splice(t,1) } alert(arr.join('\n')); |
1. не нужен условный оператор в цикле, если заранее известно какую строку надо удалить.
2. нет надобности удалять элемент из той строки, которая все равно будет удалена var arr = [[3,-4,6],[-11,71,0],[-4,-7,19]], t = 1 , e = 2 , l = arr.length; arr.splice(t,1); --l; // можно было сразу l = arr.length-1 while (l--) arr[l].splice(e,1); alert(arr.join('\n')); |
rgl,
Молодец :dance: но лучше еслиб ваши замечания написал Demath, |
Спасибо!
Подскажите ещё, пожалуйста, как получить массив из сумм элементов первых и последних строк (arr[0].sum()+arr[arr.length-1].sum()) преобразованного массива (исходный массив без заданных строки и столбца). Например, в [[3,-4,6],[-11,71,0],[-4,-7,19]] удаляем 2-ю строку (t=1) и 3-й столбец (e=2), т.е. на выходе [[3,-4],[-4,-7]], и окончательно возвращаем сумму (3+(-4))+((-4)+(-7)). С этим нет проблем (см.ниже). Не могу догадаться, как "пробежаться" по всем t и e и получить массив результатов. <script type="text/javascript"> function SpecialMinor(t,e,arr) { var l = arr.length; arr.splice(t,1); --l; while (l--) { arr[l].splice(e,1) } return ( arr[0].sum()+arr[arr.length-1].sum() ); } Array.prototype.sum = function() { for (var i=0, sum=0; i < this.length; sum += this[i++]); return sum; } </script> <button onclick="alert( SpecialMinor(1,2,[[3,-4,6],[-11,71,0],[-4,-7,19]]) )">Вычислить</button> |
Часовой пояс GMT +3, время: 01:38. |