Продублировать массив n клеток дважды.
Каретка расположена в любой ячейке перед массивом
Другие языки программирования и технологии
Помогите пожалуйста с "Машиной Поста"
По-моему, нужно сперва уточнить условие, потому, что для произвольного массива клеток и произвольного N будет весьма сложный алгоритм...
В простом случае - будем считать, что вся ячейки ленты заняты 0, а все N клеток массива, который нужно скопировать заняты 1. И нам не обязательно сохранять исходный массив.
1. Начиная с текущей позиции делаем шаги вправо до тех пор, пока не встретим единицу
2. Стираем 1 в текущей ячейке
3. Двигаемся вправо пока не встретим 0 (он будет отделять исходный массив от копии и, заодно, будет использован для остановки программы)
4. Делаем шаг вправо (начало копии)
5. Движемся вправо до тех пор, пока в ячейках стоят 1 (пропускаем скопированные метки)
6. Ставим 1, шаг вправо, ставим еще одну 1.
7. Движемся влево пока не найдем ноль-разделитель
8. Делаем один шаг влево. Если там стоит 0 - конец программы. Иначе переходим к 9.
9. Идем влево пока не встретим 0, возвращаемся вправо на 1 шаг. Переходим к п. 2
Это схема алгоритма, в программу уж сами переведите. Возможно, это не самый простой алгоритм, что первое в голову пришло. Получим удвоенную область занятую единицами. Несложно переделать алгоритм, чтобы копии были разделены пустой ячейкой. Если исходный массив нужно сохранить, то код будет немного сложнее - текущую копируемую позицию нужно будет обозначать 0, потом восстанавливать 1...
В простом случае - будем считать, что вся ячейки ленты заняты 0, а все N клеток массива, который нужно скопировать заняты 1. И нам не обязательно сохранять исходный массив.
1. Начиная с текущей позиции делаем шаги вправо до тех пор, пока не встретим единицу
2. Стираем 1 в текущей ячейке
3. Двигаемся вправо пока не встретим 0 (он будет отделять исходный массив от копии и, заодно, будет использован для остановки программы)
4. Делаем шаг вправо (начало копии)
5. Движемся вправо до тех пор, пока в ячейках стоят 1 (пропускаем скопированные метки)
6. Ставим 1, шаг вправо, ставим еще одну 1.
7. Движемся влево пока не найдем ноль-разделитель
8. Делаем один шаг влево. Если там стоит 0 - конец программы. Иначе переходим к 9.
9. Идем влево пока не встретим 0, возвращаемся вправо на 1 шаг. Переходим к п. 2
Это схема алгоритма, в программу уж сами переведите. Возможно, это не самый простой алгоритм, что первое в голову пришло. Получим удвоенную область занятую единицами. Несложно переделать алгоритм, чтобы копии были разделены пустой ячейкой. Если исходный массив нужно сохранить, то код будет немного сложнее - текущую копируемую позицию нужно будет обозначать 0, потом восстанавливать 1...
Михаил Караваев
спасибо вам большое
Похожие вопросы
- Задача на машине Поста
- Машине Тьюринга и Машины Поста нужна помощь с решением
- Помогите пожалуйста разобраться с вопросами по информатике и программированию
- Составить программу на машине Поста
- Помогите Пожалуйста....не могу настроить сеть между 2-я компютерами... очень прошу кто шарит загляньте...
- Помогите пожалуйста!!!
- Помогите пожалуйста избавиться от "синего экрана смерти"! кто поможет, тому +10 баллов гарантирую!
- добрый вечер!помогите пожалуйста решить задание
- Вопрос по delphi, помогите пожалуйста.
- Помогите пожалуйста найти ошибку, с++