Javascript.RU

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

заполнение матрицы 2мя змейками
в общем проблема. не выводит вторую змейку (нижнюю) в матрице 10х10
<script>
n=m=10;
var mas=new Array(n)
for (i=1; i<11; ++i) {
mas[i]=new Array(10);
}
for (i=1; i<6; i++) {
 for (j=1; j<11; j++){
	 if (i%2==1){
		 mas[i][j]=(i-1)*m+j}
	 else mas[i][j]=i*m-j+1
    } 
}
for (i=6; i<11; i++){
	for (j=11; j<1; j--){
	if (j%2==1){ 
		mas[i][j]=(j-1)*n+(n-i+1)}
    else mas[i][j]=(j-1)*n+i
		}
}
}
document.write("<table border=1>");
for (i=1; i<11; i++){document.write("<tr align='center'>");
for (j=1; j<11; j++){ 
	
	document.write("<td width='10%'>"+mas[i][j]+"</td>");	
	}
	}
	document.write("</table>");
</script>

помогите разобраться ((
змейка вида
123
654
789
761
852
943
но только с 1 до 100 непрерывна

Последний раз редактировалось artemjke, 22.09.2011 в 22:26.
Ответить с цитированием
  #2 (permalink)  
Старый 23.09.2011, 10:10
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,205

Сообщение от artemjke
помогите разобраться
Чего там разбираться-то?

Как вариант...

<!DOCTYPE html>
<html>
<head>
<style type="text/css">
</style>
<script type="text/javascript">
function Go(Type) {
	var n=10
	var o=document.getElementById('tbl')
	var inc=1
	var i,j,k,m,d
	k=(Type==1)? n: -1
	i=(Type==1)? 0: n-1
	while (i!=k) {
		m=(i%2==1)? -1: n
		j=(i%2==1)? n-1: 0
		d=(i%2==1)? -1: 1
		while (j!=m) {
			o.rows(i).cells(j).innerHTML=inc++
			j=j+d
		}
		i=i+Type
	}
}
</script>
</head>
<body>
<script>
document.write("<table id='tbl' border='1'>");
for (i=1; i<11; i++) {
	document.write("<tr align='center'>");
	for (j=1; j<11; j++) { 
		document.write("<td width='10%'>&nbsp;</td>");	
		}
	}
	document.write("</table>");
</script>
<input type='button' value='Beg' onclick='Go(1)' />
<input type='button' value='End' onclick='Go(-1)' />
</body>
</html>
Ответить с цитированием
  #3 (permalink)  
Старый 23.09.2011, 17:05
Новичок на форуме
Отправить личное сообщение для artemjke Посмотреть профиль Найти все сообщения от artemjke
 
Регистрация: 22.09.2011
Сообщений: 3

немного не так. после 50 начинает вертикальной змейкой заполнять
как мне сказали 3 цикла. 1 генератор чисел от 1 до 100. 2.заполнение первой змейкой(горизонтальной). 2. заполнение второй змейкой (вертикальной)
Ответить с цитированием
  #4 (permalink)  
Старый 23.09.2011, 22:00
sinistral
Посмотреть профиль Найти все сообщения от melky
 
Регистрация: 28.03.2011
Сообщений: 5,418

покажите картинку, которая ясно покажет, что надо сделать

или алгоритм.
Ответить с цитированием
  #5 (permalink)  
Старый 24.09.2011, 08:02
Новичок на форуме
Отправить личное сообщение для artemjke Посмотреть профиль Найти все сообщения от artemjke
 
Регистрация: 22.09.2011
Сообщений: 3

Ответить с цитированием
  #6 (permalink)  
Старый 24.09.2011, 15:40
sinistral
Посмотреть профиль Найти все сообщения от melky
 
Регистрация: 28.03.2011
Сообщений: 5,418

я разделил эту задачу на две подзадачи : формирование матрицы и вывод

матрица, слава Богу, я знаю, что такое в языке JS матрица будет массивом массивов.

тобишь, это будет являться типичной матрицей размером 2х2
matrix = [ [1,2],[3,4] ];


у нас матрица 10х10.

итак,займемся её формированием.

// наша матрица
var matrix = [];

// её размеры. row-строка, col-столбец
var rows = 10, cols = 10;

var m = 1; // текст внутри ячейки.

var left = 1;// будет ли двигаться заполнение влево.(да)

for(var i=0,curr; i<rows; i++ ){
    
    // текущая строка
    curr = matrix[i] = [];
    
    // формируем столбцы строки.
    for( var b=0; b<cols; b++ ){
        
        // заполняем массив в зав-ти от направления.
        // и увеличиваем тект внутри ячейки
        curr[ left ? "push":"unshift" ]( m++ );
    }
    
*!*
    // меняем направление с каждой строкой. toggler *см.сноску
    left = left == false;
*/!*
}


насчёт красной строки. это тогглер (true,false,true,false....)

монолайтед в какой-то теме очень изящно шаманил с побитовыми операциями. буду рад, если он напишет вновь, как можно это сделать

теперь займёмся выводом. им я не стал заморачиваться. как быстрее - так и написал.
var s = '<table width="100%" height="100%">';
for( var i=0;i<matrix.length;i++ ){
    s+= "<tr>";
    for( var b=0;b<matrix[i].length;b++ )
        s+= "<td>"+matrix[i][b]+"</td>";
    s+="</tr>"
}
s+="</table>";
document.body.innerHTML = s;


итоговый скрипт будет таким. живой пример. он же лежит на jsfiddle
<body></body>
<script>
// наша матрица
var matrix = [];

// её размеры. row-строка, col-столбец
var rows = 10, cols = 10;

var m = 1; // текст внутри ячейки.

var left = 1;// будет ли двигаться заполнение влево.(да)

for(var i=0,curr; i<rows; i++ ){
    
    // текущая строка
    curr = matrix[i] = [];
    
    // формируем столбцы строки.
    for( var b=0; b<cols; b++ ){
        
        // заполняем массив в зав-ти от направления.
        // и увеличиваем тект внутри ячейки
        curr[ left ? "push":"unshift" ]( m++ );
    }
    
    // меняем направление с каждой строкой.
    left = left == false;
}


/*   --- ВЫВОД ---   */

var s = '<table width="100%" height="100%">';
for( var i=0;i<matrix.length;i++ ){
    s+= "<tr>";
    for( var b=0;b<matrix[i].length;b++ )
        s+= "<td>"+matrix[i][b]+"</td>";
    s+="</tr>"
}
s+="</table>";
document.body.innerHTML = s;
</script>
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
JS, <SELECT> заполнение bma2004 Общие вопросы Javascript 6 13.11.2016 13:48