Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ТЕОРИЯ АЛГОРИТМОВ.doc
Скачиваний:
17
Добавлен:
18.08.2019
Размер:
93.18 Кб
Скачать
  1. Делаем вда шага вправо.

  2. Если ячейка пустая, то переходим к шагу... Иначе переходим на шаг 3.

  3. Удаляем метку.

  4. Делаем шаг влево.

  5. Делаем еще два шага влево.

  6. Если ячейка свободная, то ставим метку. Иначе повторяем шаг 5.

  7. Делаем шаг вправо.

  8. Проверяем наличие метки. Если метки нет, то переходим на пункт 9. Если метка есть, то переходим на пункт 3.

  9. Делаем шаг вправо.

  10. Проверяем наличие метки. Если метки нет, то переходим на шаг 10. Елси метка есть, то переходим на пункт 7.

  11. Конец работы.

Задача 1. На ленте машины Поста расположен массив из N меток. Составить программу, действуя по которой машина выяснит, является ли число четным. Если да, то в исходном массиве удаляются метки через одну.

Алгоритм

  1. Известно, что вначале каретка обозревает первую слева метку.

  2. Проверяем вторую справа ячейку, если она пустая, то число N нечетное. Переходим на пункт 5.

  3. Проверяем третью срава ячейку. Если ячейка пустая, значит на ленте расположены подряд две метки. Следовательно, число N на 2 делится. Переходим на пункт 4. Если ячейка с меткой, значит на ленте расположено более двух меток, возвращаемся на пункт 2, считая текущую ячейку первой.

  4. Удаляем каждую вторую метку: делаем два шага, удаляем метку, опять делаем два шага, если метка есть, то ее удаляем, опять делаем два шага и так далее. 

  5. Конец работы.

Задача 1. На ленте массива Поста находится n массивов меток. Каретка находится где-то над первым массивом. Удалите все массивы с четными номерами (соседние массивы разделены тремя пустыми секциями).

Алгоритм

  1. Делаем шаг вправо.

  2. Проверяем наличие метки в ячейке. Если метки нет, то переходим на пункт 3. Если метка есть, то переходим на пункт 1.

  3. Делаем три шага вправо.

  4. Проверяем наличие метки в ячейке. Если метки нет, то переходим на следюущий пункт. Если метка есть, то переходим на пункт 9.

  5. Удаляем метку. Делаем шаг вправо.

  6. Проверяем наличие метки в ячейке. Если метки нет, то переходим на следующий пункт. Если метка есть, то переходим на пункт 4.

  7. Делаем три шага вправо.

  8. Проверяем наличие метки в ячейке. Если метки нет, то переходим к следующему пункту. Если метка есть, то переходим на пункт 1.

  9. Конец работы.

Задача 1. Число k представляется на ленте машины Поста k +1 идущими подряд метками. Одна метка соответствует нулю. Составить программу копирования исходного числа так, чтобы во втором числе метки располагались на ленте через одну пустую клетку. Каретка расположена над одной из меток, принадлежащих заданному числу k . При этом исходное число должно остаться на ленте.

Алгоритм. Последовательно удалять одну метку исходного массива и ставить одну метку нового массива. В конце поставить в новом массиве еще одну метку.

  1. Переходим к первой слева метке.

  2. Удаляем эту метку.

  3. Находим первую пустую ячейку справа от числа.

  4. Делаем два шага вправо.

  5. Проверяем наличие метки в ячейки. Если метки нет, то переходим к следующему пункту. Елси метка есть, то возвращаемся к пункту 4

  6. Ставим метку.

  7. Делаем два шага влево.

  8. Проверяем наличие метки в ячейке. Если метки нет, то переходим к следующему пункту. Если метка есть, то возвращаемся к пункту 7.

  9. Находим удаленную метку. Ставим ее обратно.

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

  11. Находим крайнюю справа метку второго массива. Ставим за ней еще одну метку.

  12. Конец работы.

Задача 1. Число k представляется на ленте машины Поста k +1 идущими подряд метками. Одна метка соответствует нулю. Составить программу копирования исходного числа и прибавления к нему двух меток. Каретка расположена над одной из меток, принадлежащих заданному числу k . При этом исходное число должно остаться на ленте.

Алгоритм. Последовательно удалять одну метку исходного массива и ставить одну метку нового массива. В конце поставить в новом массиве еще две метки.

  1. Переходим к первой слева метке.

  2. Удаляем эту метку.

  3. Находим первую пустую ячейку справа от числа.

  4. Перешагиваем эту ячейку, чтобы между массивами осталась одна пусная ячейка.

  5. Если можно поставить метку, то ставим. Если метка уже есть, то ставим метку в первой справа пустой ячейке.

  6. Возвращаемся на пустую ячейку между массивами.

  7. Находим удаленную метку. Ставим ее обратно.

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

  9. Находим крайнюю справа метку второго массива. Ставим за ней еще подряд две метки.

  10. Конец работы.