Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Переменную не видно (https://javascript.ru/forum/misc/36017-peremennuyu-ne-vidno.html)

Demath 01.03.2013 04:59

Переменную не видно
 
Помогите разобраться и подскажите, как корректно записать, пожалуйста.

Не могу понять, почему в функции 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>

Deff 01.03.2013 05:36

<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>

Demath 01.03.2013 06:19

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>

Deff 01.03.2013 06:54

Demath,
A.splice(i,1); Походу ты удаляешь её

Demath 01.03.2013 07:19

Deff, а как можно удалить в двумерном квадратном массиве заданные строку и столбец?

Например, в [[3,-4,6],[-11,71,0],[-4,-7,19]] нужно удалить 2-ю строку и 3-й столбец,
т.е. чтобы на выходе получилось [[3,-4],[-4,-7]].

рони 01.03.2013 11:27

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'));

rgl 01.03.2013 11:42

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'));

рони 01.03.2013 11:49

rgl,
Молодец :dance: но лучше еслиб ваши замечания написал Demath,

Demath 01.03.2013 17:17

Спасибо!

Подскажите ещё, пожалуйста, как получить массив из сумм элементов первых
и последних строк (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.