Азы информатики
Регистрационная метка

Решения задач

Задача 6. Конкатенация слов
Автор: А. А. Дуванов

Во второй строке записано выражение, состоящие из слов, соединенных между собой операцией конкатенации “+”. Некоторые слова или даже все, могут быть пустыми. Произвести указанные операции и получить результат. В начальный момент исполнитель расположен слева от записи.

Решение

Описание алгоритма. Идем по записи в рекурсивном цикле, выбрасывая из неё кубики “+”. На каждом таком выбросе “запоминаем” команду ВЛЕВО — эти команды после завершения рекурсии уплотнят запись, ликвидируя пустые места от выброшенных кубиков.

ЭТО Вход
  Шаг
  ЕСЛИ       +        ТО { ВВЕРХ ВНИЗ Вход ВЛЕВО }
  ИНАЧЕ ЕСЛИ НЕ ПУСТО ТО Вход
  ИНАЧЕ                  ВВЕРХ
КОНЕЦ

ЭТО Шаг
  ВНИЗ ВПРАВО ВВЕРХ
КОНЕЦ

Тесты

Исходная запись Комментарий Ожидаемый результат
# Пустая запись. #
#+
#++
#+++
Конкатенация пустых слов. #
#
#
#+1+
#++1++2++
Конкатенация пустых и не пустых слов. 1#
12#
#1+2+345+67 Конкатенация не пустых слов. 1234567#

Задача 7. Середина отрезка
Авторы: Игорь Калинин и Павел Сазонтов, Находка

Во втором столбце поля — два кубика. Один в клетке (1,2), другой — где-то ниже, в нечётной строке. В начальный момент Кукарача расположен в клетке (2,2) под первым кубиком. Поставить исполнителя в середину отрезка между двумя кубиками (которые в ответе должны остаться на прежних местах).

Решение

ЭТО Вход
  Работа
  ВПРАВО // Возврат во 2-ой столбец
КОНЕЦ

ЭТО Работа
  ВНИЗ
  ЕСЛИ ПУСТО
    ТО    { ВНИЗ Работа }
    ИНАЧЕ { Возврат_кубика Подготовка }
  ВВЕРХ // Рекурсивная пружинка
КОНЕЦ

ЭТО Возврат_кубика
  ВЛЕВО ВНИЗ ВНИЗ ВПРАВО ВВЕРХ
КОНЕЦ

// Подставим исполнителя под пружину в 1-ом столбце
ЭТО Подготовка
  ВЛЕВО ВВЕРХ
КОНЕЦ

Азы информатики RU 2000/2001 © А.А.Дуванов

Оглавление книг Азы программирования письмо автору