В Brainfuck, как я могу написать цикл, который печатает матрицу, элементы которой даны пользователем? - PullRequest
0 голосов
/ 18 ноября 2018

Я пытаюсь сделать исключение Гаусса в Brainfuck, но я не могу понять, как напечатать матрицу с заданными числами

,>,, это получает количество строк и столбцов;<[>>>+<<<-]>>>[<<[<+>>+<-]>[<+>-]>-]<<< это определяет, сколько элементов будет иметь матрица (в основном это rows*columns)

Теперь мне нужно ввести элементы самой матрицы.Самая простая вещь, о которой я думал, это сделать цикл, который получает от входа число, сохраняет его в ячейке и уменьшает rows*columns, но как мне сделать цикл, который каждый раз перемещается в новую ячейку (и который, очевидно, останавливается?когда у меня есть количество элементов, равное row*columns), чтобы не перезаписывать уже существующие элементы?

1 Ответ

0 голосов
/ 24 мая 2019

До сих пор ваш код просто вычисляет строки * столбцы и сохраняет количество столбцов. Если вы просто хотите прочитать строки * столбцы и все входы отличны от нуля, вы можете просто уменьшить свою первую ячейку для каждого введенного значения

[ cells: rows*columns, columns, 0 (for finding first 0), value, value, value, ... ]

,>,<[>>>+<<<-]>>>[<<[<+>>+<-]>[<+>-]>-]<<< (your code)

[           while rows*columns is not 0
  >>>       leave an empty cell between column count and matrix (so bf can search for the first zero cell)
  [>]       go to the first empty cell
  ,         read input
  [<]<<     go back to rows*colums
  -         decrement rows*colums
]

если вход также может быть 0, вы должны использовать дополнительную ячейку маркера для каждой ячейки матрицы. Итак, вы видите, если он используется.

[ cells: rows*columns, columns, 0 (for finding first 0), value, marker(1), value, marker(1), value, marker(1) ... ]

,>,<[>>>+<<<-]>>>[<<[<+>>+<-]>[<+>-]>-]<<< (your code)

[           while rows*columns is not 0
  >>>       leave an empty cell between column count and matrix (so bf can search for the first zero cell)
  >         go to marker cell
  [>>]      go to the first empty marker cell
  +         set it to 1 so it marks that it is used
  <         go to its value cell
  ,         read input
  <[<<]<<   go back to rows*colums
  -         decrement rows*colums
]
...