Калькулятор матриц 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, время: 22:02. |