q1 - указатель. В начале программы указывает на второй элемент последовательности
Программа говорит, что если указатель q1 указывает на единицу, то надо ее исправить на единицу и сместиться вправо... т.е. указатель будет двигаться вправо до тех пор, пока не встретит ноль.
Таким образом в конце выполнения первого правила указатель q1 сместится в конец последовательности (до нуля)
Далее, если указатель q1 показывает на ноль, то меняем ноль на единицу, меняем указатель q1 на q2 и сдвигаемся влево.
После выполнения второго правила получаем последовательность 0111111 и указатель q2 на предпоследнюю единицу.
Третьим правилом q2 - сдвигается влево до достижения нуля
После его выполнения получаем последовательность 0111111 и указатель q2 на первый ноль
Четвертое правило заменяет указатель q2 на q0 и сдвигается вправо
Таким образом получаем в конце программы последовательность 0111111 и указатель q0 на первую единицу.
Объяснение:
1. Для наглядности построй в столбик значения двойки в степенях от 0 до 7. Это будет 1, 2, 4, 8, 16, 32, 64, 128.
2. Разложи число (Внимание! Обязательно только из десятичной системы счисления) на числа из построенного ранее столбика.
К примеру возьмем число 37. 37=32+4+1.
2. Отсчитывай от числа из столбика 128 до 1. Если в разложении имеется это число, то пиши 1. Иначе 0.
0(128 нету) 0(64 нету) 1(32 есть!) 0(16 нету) 0 1 0 1
Цифр должно получиться восемь. Лучше пересчитать на случай, если случайно забыл ряд.
То есть по этому алгоритму
.
И, конечно же, пробуй переводить числа самостоятельно. Сухая теория тут не имеет места.