Калькулятор матриц JS
Всем привет! Пишу калькулятор матриц, столкнулся с проблемой, что в массив arrResult записывается значение NaN. Что я упустил, подскажите пожалуйста?
//узнаем размер матрицы
while (a==null){
var a =+prompt("Размер матрицы A");
if(a<2 || a>6)
{
alert("Ошибка, введите размер матрицы A снова");
a = null;
};
};
while (b==null){
var b =+prompt("Размер матрицы B");
if(b<2 || b>6)
{
alert("Ошибка, введите размер матрицы B снова");
b = null;
};
};
//заполняем массив матрицы данными
var sizeA = a*a;
var sizeB = b*b;
var sizeResul= a*b;
var n = 0;
var arrA = [];
var arrB = [];
var arrResult = [];
var br=0;
for(i=0;i<a; i++){
arrA[i] = new Array();
for(j=0; j<a; j++){
arrA[i][j] =+prompt("Введите "+ i +" "+ j +" элемент матрицы A");
}
}
for(i=0;i<b; i++){
arrB[i] = new Array();
for(j=0; j<b; j++){
arrB[i][j] =+prompt("Введите "+ i +" "+ j +" элемент матрицы B");
}
}
//считаем произведение матриц
for(i=0;i<a;i++){
arrResult[i] = new Array();
for(k=0;k<arrA.length;k++){
for(j=0;j<b; j++){
arrResult[i][j] =+ arrA[i][k]*arrB[k][i];
}
}
}
//выводим результат на экран
var tableA = document.createElement('table');
var str ="";
document.body.innerHTML += "Матрица А: <br>";
for( i=0; i<a; i++){
for( j=0; j<b; j++){
if(br==a){
str+="<tr><td>" + arrA[i][j] ;
br=1;
}
else{
str+="<td>" + arrA[i][j] +"</td>";
br++;
}
tableA.innerHTML=str;
}
}
document.body.appendChild(tableA);
var tableB = document.createElement('table');
str ="";
br=0;
document.body.innerHTML += "Матрица B: <br>";
for( i=0; i<b; i++){
for( j=0; j<b; j++){
if(br==b){
str+="<tr><td>" + arrB[i][j] ;
br=1;
}
else{
str+="<td>" + arrB[i][j] +"</td>";
br++;
}
tableB.innerHTML=str;
}
}
document.body.appendChild(tableB);
var table = document.createElement('table');
document.body.innerHTML += "<br>Итоговая матрица: <br>";
str ="";
br=0;
for( i=0; i<arrResult.length; i++){
for( j=0; j<arrResult.length; j++){
if(br==arrResult.length){
str+="<tr><td>" + arrResult[i][j] ;
br=1;
}
else{
str+="<td>" + arrResult[i][j] +"</td>";
br++;
}
table.innerHTML=str;
}
}
document.body.appendChild(table);
|
http://javascript.ru/number.nan
Вероятно произвели математическую операцию числа и строки. |
Dani_Traxo,
может при разном размере матриц вы умножаите несуществующие элементы? |
рони,
Не думаю, размер матриц задаю одинаковый В этой строчке arrResult[i][j] =+ arrA[i][k]*arrB[k][i]; значение считается, но оно одинаковое во всей строке а если вместо "=+" ставить "+=" то записывает в массив значение "NaN". Но мне же нужен именно "+=", ведь элемент массива - это сумма произведений нескольких элементов матриц. |
Dani_Traxo, https://jsfiddle.net/vf3sx8ur/1/
Если размеры массивов одинаковые, то, вроде, все нормально работает. А если размеры разные, то в циклах происходит обращение к несуществующим ключам. |
Nexus,
Он то считает, но считает не правильно. Потому что если ставить оператор =+, то в массив записывается последнее значение из цикла, а мне нужна сумма всех значений - в этом поможет оператор "+=", но он почему-то записывает в массив значение NaN, вот в чем мой вопрос. |
Цитата:
Это неудивительно, ведь изначально у вас Код:
arrResult[i][j]===undefined |
| Часовой пояс GMT +3, время: 19:24. |