Шешімі: Преобразование строки редактором
Исполнитель «Редактор» получает на вход строку цифр. Команда «заменить(v, w)» заменяет первое слева вхождение цепочки v на цепочку w. Если цепочка v отсутствует, строка не изменяется. Команда «нашлось(v)» проверяет наличие цепочки v в строке, не изменяя её. Цикл выполняется, пока его условие истинно.
К строке, состоящей из 102 идущих подряд цифр 9, применили программу:
НАЧАЛО
ПОКА нашлось(33333) ИЛИ нашлось(999)
ЕСЛИ нашлось(33333)
ТО заменить(33333, 99)
ИНАЧЕ заменить(999, 3)
КОНЕЦ ЕСЛИ
КОНЕЦ ПОКА
КОНЕЦ
Какая строка получится в результате выполнения программы?
Шешім по шагам
3 қадамВ начале строки есть только цепочки 999, поэтому на первых шагах заменяется первое вхождение 999 на 3. Постепенно формируется цепочка из цифр 3.
Как только появляются пять подряд идущих цифр 3, условие ЕСЛИ становится истинным, поэтому заменяется цепочка 33333 на 99, а не цепочка 999.
Продолжаем выполнять команды, каждый раз выбирая первое слева вхождение соответствующей цепочки. После завершения всех замен строка принимает вид 33399.
Где здесь ошибаются
Всегда заменяют 999 на 3, не учитывая приоритет проверки 33333.
Заменяют все вхождения цепочки одновременно, хотя команда изменяет только первое слева вхождение.
Останавливают выполнение после исчезновения одной из цепочек, хотя цикл продолжается, пока существует хотя бы одна из них.