Проблема с двойными массивами
В общем, надо написать программу поиска корней СЛАУ, я нашел блок-схему и по ней написал скрипт. Он отказался работать, тогда я подумал, что напортачил чего. Поэтому нашел готовый рабочий пример.
И в нем возникает такая же ошибка. Ошибка такая: 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> |
Пашка,
когда начинает работать ваш скрипт -- элемента interface ещё несуществует -- ставьте скрипт перед </body> строка 15 -- какой-то бред -- да и строки с 14 по 16 лишние |
Цитата:
Теперь код работает, но при этом не высчитывает (или высчитывает, но не выводит) результаты. На выходе NaN. Лог никаких ошибок не выдает. В чем проблема? |
Пашка,
покажите ваш код -- и можно [HTML run][/HTML]так |
<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> |
Пашка,
матрица заполнена нулями <script> alert(0/0); </script> строки 61 -85 наверно нужно перенести в paral в строку 89 алгоритм подсчёта проверяйте сами - что он и зачем считает известно только вам. |
Часовой пояс GMT +3, время: 11:13. |