01.03.2013, 04:59
|
|
Профессор
|
|
Регистрация: 22.06.2012
Сообщений: 168
|
|
Переменную не видно
Помогите разобраться и подскажите, как корректно записать, пожалуйста.
Не могу понять, почему в функции 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>
|
|
01.03.2013, 05:36
|
без статуса
|
|
Регистрация: 25.05.2012
Сообщений: 8,219
|
|
<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, 01.03.2013 в 05:50.
|
|
01.03.2013, 06:19
|
|
Профессор
|
|
Регистрация: 22.06.2012
Сообщений: 168
|
|
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, 01.03.2013 в 06:21.
|
|
01.03.2013, 06:54
|
без статуса
|
|
Регистрация: 25.05.2012
Сообщений: 8,219
|
|
Demath,
A.splice(i,1); Походу ты удаляешь её
|
|
01.03.2013, 07:19
|
|
Профессор
|
|
Регистрация: 22.06.2012
Сообщений: 168
|
|
Deff, а как можно удалить в двумерном квадратном массиве заданные строку и столбец?
Например, в [[3,-4,6],[-11,71,0],[-4,-7,19]] нужно удалить 2-ю строку и 3-й столбец,
т.е. чтобы на выходе получилось [[3,-4],[-4,-7]].
|
|
01.03.2013, 11:27
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,126
|
|
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'));
|
|
01.03.2013, 11:42
|
|
Профессор
|
|
Регистрация: 28.02.2011
Сообщений: 349
|
|
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
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,126
|
|
rgl,
Молодец но лучше еслиб ваши замечания написал Demath,
|
|
01.03.2013, 17:17
|
|
Профессор
|
|
Регистрация: 22.06.2012
Сообщений: 168
|
|
Спасибо!
Подскажите ещё, пожалуйста, как получить массив из сумм элементов первых
и последних строк ( 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>
|
|
|
|