Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 22.04.2017, 16:35
Новичок на форуме
Отправить личное сообщение для Dani_Traxo Посмотреть профиль Найти все сообщения от Dani_Traxo
 
Регистрация: 22.04.2017
Сообщений: 3

Калькулятор матриц 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);
Ответить с цитированием
  #2 (permalink)  
Старый 22.04.2017, 17:32
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,796

http://javascript.ru/number.nan
Вероятно произвели математическую операцию числа и строки.
Ответить с цитированием
  #3 (permalink)  
Старый 22.04.2017, 17:33
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,127

Dani_Traxo,
может при разном размере матриц вы умножаите несуществующие элементы?
Ответить с цитированием
  #4 (permalink)  
Старый 22.04.2017, 19:05
Новичок на форуме
Отправить личное сообщение для Dani_Traxo Посмотреть профиль Найти все сообщения от Dani_Traxo
 
Регистрация: 22.04.2017
Сообщений: 3

рони,
Не думаю, размер матриц задаю одинаковый
В этой строчке arrResult[i][j] =+ arrA[i][k]*arrB[k][i];
значение считается, но оно одинаковое во всей строке
а если вместо "=+" ставить "+=" то записывает в массив значение "NaN".
Но мне же нужен именно "+=", ведь элемент массива - это сумма произведений нескольких элементов матриц.
Ответить с цитированием
  #5 (permalink)  
Старый 22.04.2017, 20:10
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,796

Dani_Traxo, https://jsfiddle.net/vf3sx8ur/1/
Если размеры массивов одинаковые, то, вроде, все нормально работает.
А если размеры разные, то в циклах происходит обращение к несуществующим ключам.
Ответить с цитированием
  #6 (permalink)  
Старый 22.04.2017, 20:59
Новичок на форуме
Отправить личное сообщение для Dani_Traxo Посмотреть профиль Найти все сообщения от Dani_Traxo
 
Регистрация: 22.04.2017
Сообщений: 3

Nexus,
Он то считает, но считает не правильно. Потому что если ставить оператор =+, то в массив записывается последнее значение из цикла, а мне нужна сумма всех значений - в этом поможет оператор "+=", но он почему-то записывает в массив значение NaN, вот в чем мой вопрос.
Ответить с цитированием
  #7 (permalink)  
Старый 23.04.2017, 10:15
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,796

Сообщение от Dani_Traxo Посмотреть сообщение
Nexus,
Он то считает, но считает не правильно. Потому что если ставить оператор =+, то в массив записывается последнее значение из цикла, а мне нужна сумма всех значений - в этом поможет оператор "+=", но он почему-то записывает в массив значение NaN, вот в чем мой вопрос.
https://jsfiddle.net/vf3sx8ur/2/
Это неудивительно, ведь изначально у вас
Код:
arrResult[i][j]===undefined
, а undefined+numeric=NaN.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
JS калькулятор, работа с отрицательными числами. TOPHOP Общие вопросы Javascript 1 24.06.2015 13:13
Помогите к js коду, написать html код Modrih Элементы интерфейса 8 16.06.2015 18:08
Пример тестовых заданий на js junior elshaarawy Учебные материалы 3 26.03.2015 15:17
Картинка обрабатывается js 4yBaK Общие вопросы Javascript 10 11.09.2011 09:28
Помогите найти калькулятор на js GennadiyZm Общие вопросы Javascript 1 29.07.2011 16:26