Вопрос по информатике:
Петя и Вася придумали язык программирования "Мозг". В нём используются 8 ячеек памяти, и есть следующие операторы:
Оператор Действие
>> перейти к следующей ячейке
<< перейти к предыдущей ячейке
++ увеличить значение в текущей ячейке на 1
-− уменьшить значение в текущей ячейке на 1
[[ если значение текущей ячейки ноль, перейти вперёд по тексту программы на ячейку, следующую за соответствующей ] (с учётом вложенности)
]] если значение текущей ячейки не ноль, перейти назад по тексту программы на символ [ (с учётом вложенности)
.. напечатать значение из текущей ячейки
Исполнение программы начинается с третей ячейки. На момент запуска ячейки имеют следующие значения:
Номер ячейки 1 2 3 4 5 6 7 8
Значение 10 330 50 19 17 0 184 0
Запишите число, которое выведет программа:
[->[->+>+<<]>>[-<+<+>>]<<<]>>.[−>[−>+>+<<]>>[−<+<+>>]<<<]>>.
Примечание: под вложенностью операторов [ и ] подразумевается однозначное соответствие оператора [ к оператору ] и наоборот по аналогии с открывающими и закрывающими скобками из математики.
Пример: для программы [->+[-]<][−>+[−]<] первая открывающая квадратная скобка соответствует второй закрывающей квадратной скобке, а вторая открывающая квадратная скобка соответствует первой закрывающей квадратной скобке.
Трудности с пониманием предмета? Готовишься к экзаменам, ОГЭ или ЕГЭ?
Воспользуйся формой подбора репетитора и занимайся онлайн. Пробный урок - бесплатно!
- 22.12.2015 23:29
- Информатика
- remove_red_eye 4601
- thumb_up 25
Ответы и объяснения 1
Но проще не мучиться и просто написать программу, выполняющую этот код.
python 3.
array = [10, 330, 50, 19, 17, 0, 184, 0]
array_position = 2
program = "[->[->+>+<>[-<+>]<<>."
stack = []
transitions = [None] * len(program)
for k, op in enumerate(program):
if op == '[':
stack.append(k)
elif op == ']':
v = stack.pop()
transitions[k] = v + 1
transitions[v] = k + 1
k = 0
while k < len(program):
op = program[k]
if op == '.':
print(array[array_position])
elif op == '>':
array_position += 1
elif op == '<':
array_position -= 1
elif op == '[' and array[array_position] == 0:
k = transitions[k]
continue
elif op == ']' and array[array_position] != 0:
k = transitions[k]
continue
elif op == '+':
array[array_position] += 1
elif op == '-':
array[array_position] -= 1
k += 1
- 23.12.2015 03:05
- thumb_up 25
Знаете ответ? Поделитесь им!
Есть сомнения?
Не нашли подходящего ответа на вопрос или ответ отсутствует? Воспользуйтесь поиском по сайту, чтобы найти все ответы на похожие вопросы в разделе Информатика.
Трудности с домашними заданиями? Не стесняйтесь попросить о помощи - смело задавайте вопросы!
Информатика — наука о методах и процессах сбора, хранения, обработки, передачи, анализа и оценки информации с применением компьютерных технологий, обеспечивающих возможность её использования для принятия решений.