Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Проблема с двойными массивами (https://javascript.ru/forum/misc/47307-problema-s-dvojjnymi-massivami.html)

Пашка 18.05.2014 17:09

Проблема с двойными массивами
 
В общем, надо написать программу поиска корней СЛАУ, я нашел блок-схему и по ней написал скрипт. Он отказался работать, тогда я подумал, что напортачил чего. Поэтому нашел готовый рабочий пример.
И в нем возникает такая же ошибка.
Ошибка такая: Unhandled Error: Cannot convert 'document.interface' to object
Помогите, пожалуйста, разобраться. Я просто не понимаю, почему при обычном присвоении JS пытается конвертировать в объект и не может это сделать. Такое, что странно, возникает только при попытке взять из формы и присвоить в ячейку двойного массива.
Неужели придется делать без двойного массива? Я вообще уже запутался, ничего не могу понять. По-моему, должно работать.

А вот сам код:
<html>
<head>
<title>Решение СЛАУ методом Гаусса</title>
<script language=javascript>
// Ввод данных
n = 4;
var m=new Array(n); // Определение массива
var otv=new Array(n);
var X=new Array(n);


for(i=0; i<n; ++i) {
m[i]=new Array(n);
for (j=0; j<n; ++j) {
m[i][j] = parseInt(m[i][j]);
}
}

// Заполнение матрицы
var tmp = document.interface.x11.value;
var tmp2 = parseInt(tmp);
m[0][0]=tmp2;
m[0][1]=document.interface.x12.value;
m[0][2]=document.interface.x13.value;
m[0][3]=document.interface.x14.value;
m[0][4]=document.interface.o1.value;

m[1][0]=document.interface.x21.value;
m[1][4]=document.interface.x22.value;
m[1][2]=document.interface.x23.value;
m[1][3]=document.interface.x24.value;
m[1][4]=document.interface.o2.value;

m[2][0]=document.interface.x31.value;
m[2][1]=document.interface.x32.value;
m[2][2]=document.interface.x33.value;
m[2][3]=document.interface.x34.value;
m[2][4]=document.interface.o3.value;

m[3][0]=document.interface.x41.value;
m[3][1]=document.interface.x42.value;
m[3][2]=document.interface.x43.value;
m[3][3]=document.interface.x44.value;
m[3][4]=document.interface.o4.value;

alert(m[3][4]);
//прямой ход метода Гаусса
  function paral(){

    for (var k = 0; k < n; k++){ 
    
     for (var j = n; j >= k; j--){
       
           m[k][j] = m[k][j] / m[k][k];  
     }


     for (var i = k + 1; i < n; i++){
       for (var j = n; j >= k; j--){
         m[i][j] -= m[k][j] * m[i][k];  
       }  
     }
  
}
       }

  //Обратный ход
  function obratno() {
     for (var i = 0; i < n; i++){
         X[i] = m[i][n];
     }

        for (var i = n - 2; i >= 0; i--){
          for (var j = i + 1; j < n; j++){
              X[i] -= X[j] * m[i][j];   
          }
        }
    }

  function process() {    
 paral();
 obratno();
	document.interface.x1.value = X[0];
	document.interface.x2.value = X[1];
	document.interface.x3.value = X[2];
	document.interface.x4.value = X[3];

}


</script>
</head>
<body>
<center>
<h2>Решение СЛАУ методом Гаусса</h2>
<BODY BGCOLOR="#CCCCCC" TEXT="#000000">
<form name="interface">
<input type="text" name="x11" value="0" size=3> x1 +
<input type="text" name="x12" value="0" size=3> x2 +
<input type="text" name="x13" value="0" size=3> x3 +
<input type="text" name="x14" value="0" size=3> x4 =
<input type="text" name="o1" value="0" size=3>

<br>
<input type="text" name="x21" value="0" size=3> x1 +
<input type="text" name="x22" value="0" size=3> x2 +
<input type="text" name="x23" value="0" size=3> x3 +
<input type="text" name="x24" value="0" size=3> x4 =
<input type="text" name="o2" value="0" size=3>

<br>
<input type="text" name="x31" value="0" size=3> x1 +
<input type="text" name="x32" value="0" size=3> x2 +
<input type="text" name="x33" value="0" size=3> x3 +
<input type="text" name="x34" value="0" size=3> x4 =
<input type="text" name="o3" value="0" size=3>  

<br>
<input type="text" name="x41" value="0" size=3> x1 +
<input type="text" name="x42" value="0" size=3> x2 +
<input type="text" name="x43" value="0" size=3> x3 +
<input type="text" name="x44" value="0" size=3> x4 =
<input type="text" name="o4" value="0" size=3>  
<br>
<input type="button" value="    ! ! ! РЕШИТЬ ! ! !    " onClick="process()">
<br>
============================
<br>
Ответ:
x1 = <input type="text" name="x1" value="0" size=3> 
x2 = <input type="text" name="x2" value="0" size=3>  
x3 = <input type="text" name="x3" value="0" size=3>
x4 = <input type="text" name="x4" value="0" size=3>
</form>
</center>
</body>
</html>

рони 18.05.2014 18:13

Пашка,
когда начинает работать ваш скрипт -- элемента interface ещё несуществует -- ставьте скрипт перед </body>
строка 15 -- какой-то бред -- да и строки с 14 по 16 лишние

Пашка 18.05.2014 18:58

Цитата:

Сообщение от рони (Сообщение 312350)
Пашка,
когда начинает работать ваш скрипт -- элемента interface ещё несуществует -- ставьте скрипт перед </body>
строка 15 -- какой-то бред -- да и строки с 14 по 16 лишние

Действительно бред. Сам добавил в поисках решения проблемы, забыл убрать.
Теперь код работает, но при этом не высчитывает (или высчитывает, но не выводит) результаты. На выходе NaN. Лог никаких ошибок не выдает. В чем проблема?

рони 18.05.2014 19:14

Пашка,
покажите ваш код -- и можно
[HTML run][/HTML]
так

Пашка 18.05.2014 19:55

<html>
<head>
<title>Решение СЛАУ методом Гаусса</title>
</head>
<body>
<center>
<h2>Решение СЛАУ методом Гаусса</h2>
<BODY BGCOLOR="#CCCCCC" TEXT="#000000">
<form name="interface">
<input type="text" name="x11" value="0" size=3> x1 +
<input type="text" name="x12" value="0" size=3> x2 +
<input type="text" name="x13" value="0" size=3> x3 +
<input type="text" name="x14" value="0" size=3> x4 =
<input type="text" name="o1" value="0" size=3>

<br>
<input type="text" name="x21" value="0" size=3> x1 +
<input type="text" name="x22" value="0" size=3> x2 +
<input type="text" name="x23" value="0" size=3> x3 +
<input type="text" name="x24" value="0" size=3> x4 =
<input type="text" name="o2" value="0" size=3>

<br>
<input type="text" name="x31" value="0" size=3> x1 +
<input type="text" name="x32" value="0" size=3> x2 +
<input type="text" name="x33" value="0" size=3> x3 +
<input type="text" name="x34" value="0" size=3> x4 =
<input type="text" name="o3" value="0" size=3>  

<br>
<input type="text" name="x41" value="0" size=3> x1 +
<input type="text" name="x42" value="0" size=3> x2 +
<input type="text" name="x43" value="0" size=3> x3 +
<input type="text" name="x44" value="0" size=3> x4 =
<input type="text" name="o4" value="0" size=3>  
<br>
<input type="button" value="    ! ! ! РЕШИТЬ ! ! !    " onClick="process()">
<br>
============================
<br>
Ответ:
x1 = <input type="text" name="x1" value="0" size=3> 
x2 = <input type="text" name="x2" value="0" size=3>  
x3 = <input type="text" name="x3" value="0" size=3>
x4 = <input type="text" name="x4" value="0" size=3>
</form>
</center>

<script language=javascript>
// Ввод данных
n = 4;
var m=new Array(n); // Определение массива
var otv=new Array(n);
var X=new Array(n);


for(i=0; i<n; ++i) {
m[i]=new Array(n);
}

// Заполнение матрицы

m[0][0] = document.forms[0].x11.value;
m[0][1]=document.interface.x12.value;
m[0][2]=document.interface.x13.value;
m[0][3]=document.interface.x14.value;
m[0][4]=document.interface.o1.value;

m[1][0]=document.interface.x21.value;
m[1][4]=document.interface.x22.value;
m[1][2]=document.interface.x23.value;
m[1][3]=document.interface.x24.value;
m[1][4]=document.interface.o2.value;

m[2][0]=document.interface.x31.value;
m[2][1]=document.interface.x32.value;
m[2][2]=document.interface.x33.value;
m[2][3]=document.interface.x34.value;
m[2][4]=document.interface.o3.value;

m[3][0]=document.interface.x41.value;
m[3][1]=document.interface.x42.value;
m[3][2]=document.interface.x43.value;
m[3][3]=document.interface.x44.value;
m[3][4]=document.interface.o4.value;
alert(m[0][0]);
//прямой ход метода Гаусса
  function paral(){

    for (var k = 0; k < n; k++){ 
    
     for (var j = n; j >= k; j--){
       
           m[k][j] = m[k][j] / m[k][k];  
     }


     for (var i = k + 1; i < n; i++){
       for (var j = n; j >= k; j--){
         m[i][j] -= m[k][j] * m[i][k];  
       }  
     }
  
}
       }

  //Обратный ход
  function obratno() {
     for (var i = 0; i < n; i++){
         X[i] = m[i][n];
     }

        for (var i = n - 2; i >= 0; i--){
          for (var j = i + 1; j < n; j++){
              X[i] -= X[j] * m[i][j];   
          }
        }
    }

  function process() {    
 paral();
 obratno();
alert(m[0][0]);
	document.interface.x1.value = X[0];
	document.interface.x2.value = X[1];
	document.interface.x3.value = X[2];
	document.interface.x4.value = X[3];

}


</script>

</body>
</html>

рони 18.05.2014 20:27

Пашка,
матрица заполнена нулями
<script>
alert(0/0);
</script>

строки 61 -85 наверно нужно перенести в paral в строку 89
алгоритм подсчёта проверяйте сами - что он и зачем считает известно только вам.


Часовой пояс GMT +3, время: 11:13.