Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 13.10.2015, 10:48
Интересующийся
Отправить личное сообщение для goody-goody Посмотреть профиль Найти все сообщения от goody-goody
 
Регистрация: 13.10.2015
Сообщений: 17

Как обратиться к предыдущему элементу массива
Доброго времени суток. В общем задача такова: нужно создать двумерный массив 20 на 20 в котором изначально известны только 2 значения - A[10][0] и A[11][0], остальные нули. Затем по формуле A[SUB]ij[/SUB]=0.5(A[SUB]i-1,j-1[/SUB]+A[SUB]i+1,j-1[/SUB] необходимо рассчитать последующие значения. Создаю массив, задаю начальные значения:
var n = 20, m = 20;
var arr = [];
for (var i = 0; i < m; i++){
    arr[i] = [];
    for (var j = 0; j < n; j++){
        arr[i][j] = 0;
        if(j==0 && (i==10 || i==11)){
            arr[i][j] = 120;
        }
        document.write(arr[i][j]+'&nbsp');
    }
    document.write('<br/>');
}


и теперь главная проблема - как подступиться к значению предыдущего элемента массива, чтоб посчитать следующее?
Ответить с цитированием
  #2 (permalink)  
Старый 13.10.2015, 11:36
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,105

Сообщение от goody-goody
Затем по формуле
непонятно
а можно увидеть результат, который должен получится?
Ответить с цитированием
  #3 (permalink)  
Старый 13.10.2015, 12:21
Интересующийся
Отправить личное сообщение для goody-goody Посмотреть профиль Найти все сообщения от goody-goody
 
Регистрация: 13.10.2015
Сообщений: 17

Сообщение от рони Посмотреть сообщение
непонятно
а можно увидеть результат, который должен получится?
вот так как-то, правда тут не 20 на 20, но суть не в том
Ответить с цитированием
  #4 (permalink)  
Старый 13.10.2015, 12:35
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,105

goody-goody,
осталось узнать формулу по которой получается этот результат
Ответить с цитированием
  #5 (permalink)  
Старый 13.10.2015, 14:37
Аватар для sanmihan
Аспирант
Отправить личное сообщение для sanmihan Посмотреть профиль Найти все сообщения от sanmihan
 
Регистрация: 28.05.2015
Сообщений: 54

goody-goody, так?
<html>
<script>
var n = 20, m = 20;
var arr = [];
for (var j = 0; j < n; j++){
    for (var i = 0; i < m; i++){
		if(!arr[i]) arr[i] = [];
        arr[i][j] = 0;
        if(j==0 && (i==10 || i==11)){
            arr[i][j] = 120;
        }
		if(j > 0){
			if(i-1 >= 0 && i+1 < m)
				arr[i][j] = 0.5 * (arr[i-1][j-1] + arr[i+1][j-1])
			else if(i-1 < 0)
				arr[i][j] = 0.5 * (0 + arr[i+1][j-1])
			else 
				arr[i][j] = 0.5 * (arr[i-1][j-1] + 0)
		}
    }
}
for(var i=0;i<m;i++){
for(var j=0;j<n;j++){
arr[i][j] = arr[i][j].toFixed(2);
document.write(arr[i][j]+'&nbsp');
}
document.write('<br/>');
}
</script>
</html>

Последний раз редактировалось sanmihan, 13.10.2015 в 16:17. Причина: run
Ответить с цитированием
  #6 (permalink)  
Старый 13.10.2015, 14:46
Интересующийся
Отправить личное сообщение для goody-goody Посмотреть профиль Найти все сообщения от goody-goody
 
Регистрация: 13.10.2015
Сообщений: 17

ой, спасибо большое! я просто такой новичек в веб-разработке, только осваиваю js
Ответить с цитированием
  #7 (permalink)  
Старый 13.10.2015, 15:00
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,105

sanmihan,
а посмотреть?
Ответить с цитированием
  #8 (permalink)  
Старый 13.10.2015, 15:26
Интересующийся
Отправить личное сообщение для goody-goody Посмотреть профиль Найти все сообщения от goody-goody
 
Регистрация: 13.10.2015
Сообщений: 17

sanmihan, я изначально свой массив с нулями заганяла в табличку, а теперь ваш код что-то не могу правильно загнать, отображается не горизонтально, а вертикально (на самое начало скрипта прошу не обращать внимания, там расчеты идут)
function addTable() {
  var q = 0.8, //вихід стічних вод
      H = 1.8, //серендня глибина водотоку(стала)
      v = 0.2, //середня швидкість течії(стала)
      D=0.0028, //коефіцієнт турбулентної дифузії(стала)
      hMala = 11; //відстань від берега до місця випуску вод(стала)
  var control = document.myForm.control.value;// контрольна відстань
  var konc = document.myForm.konc.value;//концентрація забруднюючої речовини
  var y = q/(2*H*v); //поперечний розмір початкового прямокутника
  var x = (v*Math.pow(y,2))/(2*D); //відстань між перерізами
  var k = Math.round(control/x)+2; //кількість стовбців
  console.log('кідькість стовбців - ' + k);
  var index1 = Math.round(hMala/y);
  var index2 = index1+1;
  var n = index2*2; //кількість рядків
  console.log('кількість рядків - ' + n)
  var col = 0;

  var tr = "",
      td = "",
      th = "",
      main = document.getElementById("main"),
      table = document.createElement("table");
      table.setAttribute("border", "2px");
      var firstTable = document.querySelector("table");

  var tr = document.createElement("tr");
  var th = document.createElement("th");
  var firstHeading = "Відстань від берега/" + "<br>" + "Відстань від джерела";
  th.innerHTML = firstHeading;
  tr.appendChild(th);

  for (var j = 0; j < k; j++) {
    var th = document.createElement("th");
    th.innerHTML=col;
    tr.appendChild(th);
    table.appendChild(tr);
    col = Math.round((col+x)*100)/100;
  } 

  var arr = [];
  for (var j = 0; j < n; j++){
    var tr = document.createElement("tr");
    var th = document.createElement("th");
    th.innerHTML=j;
    tr.appendChild(th);
    for (var i = 0; i < k; i++){
      if(!arr[i]) arr[i] = [];
      arr[i][j] = 0;
      if(j==0 && (i==10 || i==11)){
        arr[i][j] = 120;
      }
      if(j > 0){
        if(i-1 >= 0 && i+1 < k)
          arr[i][j] = 0.5 * (arr[i-1][j-1] + arr[i+1][j-1])
        else if(i-1 < 0)
          arr[i][j] = 0.5 * (0 + arr[i+1][j-1])
        else
          arr[i][j] = 0.5 * (arr[i-1][j-1] + 0)
      }
      var cell =arr[i][j]
      var td = document.createElement("td");
      td.innerHTML=(cell);
      tr.appendChild(td);
    }
    table.appendChild(tr);
  }

  if (firstTable == null) {
    return main.appendChild(table);
  }
}
Ответить с цитированием
  #9 (permalink)  
Старый 13.10.2015, 15:30
Интересующийся
Отправить личное сообщение для goody-goody Посмотреть профиль Найти все сообщения от goody-goody
 
Регистрация: 13.10.2015
Сообщений: 17

ой, еще же html нужен для полноты картины
<!doctype html>
<html>
	<head>
		<meta charset="UTF-8">
		<title>Розповсюдження</title>
		<script src='jquery-2.1.4.min.js'></script>
		<link rel="stylesheet" type="text/css" href="jquery-ui-1.10.4.custom/css/custom-theme/jquery-ui-1.10.4.custom.css" />
		<script src='jquery-ui-1.10.4.custom/js/jquery-ui-1.10.4.custom.min.js'></script>
		<script src='script.js'></script>
	</head>
	<body>
		<div id='main' class="ui-widget-content ui-corner-top">
			<div class="ui-widget-header ui-corner-top form_pad">
				<h1>Моделювання процесу розповсюдження забруднюючих речовин</h1>
			</div>
			<h3>Введіть дані</h3>
			<form name='myForm'>
				<p>Назва речовини: <select required>
					<option value='kysen'>Розчинений кисень</option>
					<option value='sulfat'>Сульфати</option>
					<option value='hloryd'>Хлориди</option>
					<option value='azot'>Азот амонійний</option>
					<option value='nitrat'>Нітрати</option>
					<option value='nitryt'>Нітрити</option>
					<option value='fosfat'>Фосфати</option>
					<option value'carbomid'>Карбаміди</option>
				</select></p>
				<p>Контрольна відстань: <input type='text' value='500' size='5' name='control'></p>
				<p>Вихід стічних вод: <input type='text' size='5' value='53,5' required></p>
				<p>Концентрація забруднюючої речовини: <input type='text' name='konc' size='5' value='120' required></p>
				<input type='button' value='Змоделювати' name='mySubmit' onclick='addTable()' style='margin-bottom: 2%'>
			</form>
		</div>
	</body>
</html>
Ответить с цитированием
  #10 (permalink)  
Старый 13.10.2015, 15:57
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,105


<!DOCTYPE HTML>

<html>

<head>
  <title>Untitled</title>
  <meta charset="utf-8">
  <style type="text/css">
  div.t{border:1px solid #8B4513;width:4.7%;text-align:center;font-size:.8em;}
  .test{margin:0;padding:0;display:flex;flex-wrap:wrap;justify-content:center; width: 800px;}
  .red{color:#F00;font-weight:bold}
  </style>
</head>

<body>

<script>
var n = 20, m = 20;
var arr = [];
for (var j = 0; j < n; j++){
    for (var i = 0; i < m; i++){
		if(!arr[i]) arr[i] = [];
        arr[i][j] = 0;
        if(j==0 && (i==10 || i==11)){
            arr[i][j] = 120;
        }
		if(j > 0){
			if(i-1 >= 0 && i+1 < m)
				arr[i][j] = 0.5 * (arr[i-1][j-1] + arr[i+1][j-1])
			else if(i-1 < 0)
				arr[i][j] = 0.5 * (0 + arr[i+1][j-1])
			else
				arr[i][j] = 0.5 * (arr[i-1][j-1] + 0)
		}
    }
}
var d= document.createElement('div');
d.className = 'test';
document.body.appendChild(d);
for(var i=0;i<m;i++){
for(var j=0;j<n;j++){
cls = 't';
arr[i][j] && (arr[i][j] = arr[i][j].toFixed(2).replace(/\.?0+$/,'')) && (cls = 't red');
var div = document.createElement('div');
div.className = cls;
div.appendChild(document.createTextNode(arr[i][j]));
d.appendChild(div);

}
}


</script>
</body>

</html>

Последний раз редактировалось рони, 13.10.2015 в 16:03.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как обратиться к элементу массива? Alex_dark74 Общие вопросы Javascript 12 11.11.2014 12:23
Управление скроллом "а-ля тач" HonesT Элементы интерфейса 2 27.08.2013 14:25
как обратиться к элементу из XML Rentony Элементы интерфейса 1 20.12.2011 12:24
обратиться к элементу формы, заданному переменной Andrej_2 Элементы интерфейса 4 15.05.2009 09:18
Можно ли как для произвольного массива создавать вызовы функций , имеющих на входе kefi Общие вопросы Javascript 3 17.04.2009 16:53