Функция, которая создает матрицу 5x5 + функция, которая создает HTML-представление матрицы - PullRequest
0 голосов
/ 27 июня 2019

Я получил следующее задание:

"Реализация функции numberMatrix() (с использованием JS), которая создает представление HTML матрицы 5x5, как указано ниже:

1 3 3 3 3
2 1 3 3 3
2 2 1 3 3
2 2 2 1 3
2 2 2 2 1

! Примечание. Использование жестко закодированных массивов, таких как

, запрещено.
const arr = [[1,3,3,3,3], [2,1,3,3,3], [2,2,1,3,3], [2,2,2,1,3], [2,2,2,2,1]];

Могут быть и другие числа. Попробуйте использовать квадратные матричные термины и особенности: главная диагональ, элементы над / под главной диагональю.

Для создания HTML-представления используйте только метод document.write() с любыми необходимыми тегами.

Также рекомендуется реализовать отдельные функции для генерации матрицы (двумерного массива) и генерации представления HTML. "

Я знаю, как создать HTML-представление жестко закодированной матрицы:

function numberMatrix() {
  let numbers = [
    [1, 3, 3, 3, 3],
    [2, 1, 3, 3, 3],
    [2, 2, 1, 3, 3],
    [2, 2, 2, 1, 3],
    [2, 2, 2, 2, 1]

  ];

  let x = 0;
  while (x < 5) {
    for (let i = 0; i < 5; i++) {
      document.write(numbers[x][i]);
    }
    document.write('<br>');
    x++;
  }
}

Моя основная проблема - реализовать функцию, которая генерирует матрицу, используя квадратные матричные термины и функции: главная диагональ, элементы над / под главной диагональю, как упомянуто выше.

Ответы [ 2 ]

0 голосов
/ 27 июня 2019

Вот решение, основанное на генераторах функций.

Генератор функций buildSquaredMatrix позаботится о создании квадратной матрицы, предоставляя ее размер, значение, требуемое для диагонали, значение, требуемое дляэлементы ниже диагонали и значение, требуемое для элементов выше диагонали.

Я не учитель математики, поэтому я почти уверен, что это можно сделать по-разному, но я просто надеюсь, что это поможетвы открываете другие способы достижения цели (например, с помощью генератора функций) или даете дополнительные разъяснения о своей проблеме.

В любом случае это решение будет работать для матрицы любого размера.

/**
  Builds a square matrix starting from the desired size.
*/
function *buildSquaredMatrix(size, diagonal, belowDiagonal, aboveDiagonal) {
  // Build each row from 0 to size.
  for (var i = 0; i < size; i++) {
    // Current array is composed by the "below diagonal" part, defined by the range 0 -> i, and the "above diagonal" part, defined by the range i -> size.
    // The concatenation will lead to an array of <size> elements.
    const current = Array.from({length: i}).fill(belowDiagonal).concat(Array.from({length: size - i}).fill(aboveDiagonal));
    // finally, we set the diagonal item, which always is at index <i>.
    current[i] = diagonal;
    // then, we yield the current result to the iterator.
    yield current;
  }
}

// Below, we define a new 5x5 matrix /size 5), where the diagonal value is 1, the value below the diagonal is 2, and above is 3.
for (var row of buildSquaredMatrix(5,1,2,3)) {
  // finally, we join the row with a blankspace, and separe the rows with a break.
  document.write(row.join(' ') + '<br />');
}
0 голосов
/ 27 июня 2019

Некоторые основные мысли:

  • Диагональ - это когда индекс внешнего массива и внутреннего массива равен.

       | 0  1  2  3  4
    ---+---------------
     0 | 1  .  .  .  .
     1 | .  1  .  .  .
     2 | .  .  1  .  .
     3 | .  .  .  1  .
     4 | .  .  .  .  1
    
  • Для получения другой диагонали вы можете добавить индексы внешнего и внутреннего массивов и проверить, равна ли сумма длине минус один.

       | 0  1  2  3  4
    ---+---------------
     0 | .  .  .  .  1
     1 | .  .  .  1  .
     2 | .  .  1  .  .
     3 | .  1  .  .  .
     4 | 1  .  .  .  .
    
  • Взяв только первую диагональот (0, 0) до (4, 4) и, посмотрев на индексы еще раз, вы обнаружите, что внешний индекс должен быть больше внутреннего индекса.

       | 0  1  2  3  4
    ---+---------------
     0 | .  .  .  .  .
     1 | 2  .  .  .  .
     2 | 2  2  .  .  .
     3 | 2  2  2  .  .
     4 | 2  2  2  2  .
    

    var length = 5,
        matrix = Array.from(
            { length },
            (_, i) => Array.from(
                { length },
                (__, j) => i > j ? 2 : '.' // this is the check
            )
        );
    
    matrix.forEach(a => console.log(...a));

Остальное заполнить 3 и до вас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...