ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 04.12.2023
Просмотров: 5510
Скачиваний: 26
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
© К. Поляков, 2009-2022
12 (повышенный уровень, время – 6 мин)
Тема: Выполнение алгоритмов для исполнителя.Что проверяется:Умение анализировать результат исполнения алгоритма.1.6.2. Вычислимость. Эквивалентность алгоритмических моделей (?).1.1.3. Умение строить информационные модели объектов, систем и процессов в виде алгоритмов (?).Что нужно знать:-
правила выполнения линейных, разветвляющихся и циклических алгоритмов -
основные операции с символьными строками (определение длины, выделение подстроки, удаление и вставка символов, «сцепка» двух строк в одну) -
исполнитель – это человек, группа людей, животное, машина или другой объект, который может понимать и выполнять некоторые команды -
в школьном алгоритмическом языке нц обозначает «начало цикла», а кц – «конец цикла»; все команды между нц и кц – это тело цикла, они выполняются несколько раз -
запись нц для i от 1 до n обозначает начало цикла, в котором переменная i (она называется переменной цикла) принимает последовательно все значения от 1 до n с шагом 1
Пример задания:
Р-14. (Н. Титов) Редактор получает на вход строку цифр и преобразовывает её. Редактор может выполнять две команды, в обеих командах v и w обозначают цепочки цифр.заменить (v, w)Эта команда заменяет в строке первое слева вхождение цепочки v на цепочку w. Если цепочки v в строке нет, эта команда не изменяет строку.нашлось (v)Эта команда проверяет, встречается ли цепочка v в строке исполнителя Редактор. Если она встречается, то команда возвращает логическое значение «истина», в противном случае возвращает значение «ложь». Строка при этом не изменяется.Дана программа для исполнителя Редактор:НАЧАЛОПОКА НЕ нашлось(00)заменить(01, 220)заменить(02, 3201)заменить(03, 2012)КОНЕЦ ПОКАКОНЕЦ Известно, что исходная строка начиналась с нуля и заканчивалась нулём, а между ними были только цифры 1, 2 и 3. После выполнения данной программы получилась строка, содержащая 0 единиц, 186 двоек и 26 троек. Выведите минимальную длину исходной строки.Решение (Н. Титов):
-
Во-первых, необходимо разобраться сколько цифр ‘1’, ‘2’ и ‘3’ дают строки ‘010’, ‘020’, ’030’. Реализовав предложенный алгоритм на любом из языков программирования, мы получим:
-
Пример реализации алгоритма на языке Python:
-
Записав полученный результат в виде системы уравнений, мы получим следующее:
-
Решение данной задачи сводится к решению системы трёх уравнений с тремя неизвестными. Его можно решать теоретически (например, методом исключения переменных) или с помощью программы на языке Python:
-
В результате выполнения программы мы получим количество цифр ‘1’, ‘2’ и ‘3’ между двумя цифрами ‘0’. К этому нужно добавить 2, так как по краям строки были два нуля. -
Ответ: 43.
Ещё пример задания:
Р-13. Редактор получает на вход строку цифр и преобразовывает её. Редактор может выполнять две команды, в обеих командах v и w обозначают цепочки цифр.заменить (v, w)Эта команда заменяет в строке первое слева вхождение цепочки v на цепочку w. Если цепочки v в строке нет, эта команда не изменяет строку.нашлось (v)Эта команда проверяет, встречается ли цепочка v в строке исполнителя Редактор. Если она встречается, то команда возвращает логическое значение «истина», в противном случае возвращает значение «ложь». Строка при этом не изменяется.Дана программа для исполнителя Редактор:НАЧАЛОПОКА нашлось (2222) ИЛИ нашлось (8888)ЕСЛИ нашлось (2222)ТО заменить (2222, 88)ИНАЧЕ заменить (8888, 22)КОНЕЦ ЕСЛИКОНЕЦ ПОКАКОНЕЦ Какая строка получится в результате применения приведённой программы к строке, состоящей из 70 идущих подряд цифр 8? В ответе запишите полученную строку.Решение (теоретическое):-
чтобы понять принцип работы алгоритма, сначала рассмотрим строку из 10 цифр 8:
-
поскольку цепочки 2222 пока нет, сначала заменяем 8888 на 22:
-
цепочки 2222 снова нет, поэтому опять заменяем 8888 на 22:
-
теперь появилась цепочка 2222, которая согласно алгоритму заменяется на 88:
-
таким образом, в результате трёх замен цепочка восьмёрок укоротилась на 6 цифр -
посчитаем, сколько раз так можно сделать: 70 : 6 = 11,(6) – округляем вниз до 11 -
после 11 таких укорачиваний удалено 66 цифр 8, осталось всего 4, которые заменяются на 22 -
Ответ: 22.
-
поскольку при сдаче ЕГЭ в компьютерной форме доступны среды программирования, проще всего написать программу, которая моделирует исполнителя Редактор; для этой цели лучше всего подходит язык Python, обладающий широким набором встроенных функций для обработки символьных строк -
в начале программы записываем в строковую переменную s 70 цифр 8:
-
операция нашлось(2222) заменяется на
а заменить(2222, 88) – на s = s.replace( "2222", "88", 1 ) здесь третий аргумент (равный 1)– это количество замен, которые нужно выполнить
-
приведём полную программу
-
аналогичная программа на языке PascalABC.NET:
-
программа на языке PascalABC.NET с использованием новых функций (М. Коротков):
-
аналогичная программа на языке С++:
-
(П. Финкель) Решение не школьном алгоритмическом языке (Кумир):
-
Ответ: 22.
-
эту задачу несложно решить с помощью электронных таблиц; в ячейку C1 записываем исходную строку, применяя функцию ПОВТОР (в OpenOffice Calc:=REPT("8";70))
-
затем нужно определить, есть ли в этой строке сочетания символов «2222» и «8888»; для этого можно использовать функцию НАЙТИ (FIND) -
эта функция выдаёт ошибку, если образец не найден; эту ошибку мы можем перехватить, используя функцию ЕСЛИОШИБКА (только в Excel 2007+и LibreOfficeCalc); в случае ошибки выведем 0, а при обнаружении образца – его позицию (результат работы функции НАЙТИ); записывается это так (в ячейке A1): =ЕСЛИОШИБКА(НАЙТИ("2222";C1);0) ; аналогично в B1 записываем формулу для поиска строки 8888: =ЕСЛИОШИБКА(НАЙТИ("8888";C1);0)
-
к сожалению, в OpenOfficeCalcнет встроенной функции ЕСЛИОШИБКА (IFERROR), и эти формулы приходится реализовывать через функции IF и ISERROR:
-
теперь в ячейке C2 строим изменённую строку: если в A2 не ноль, меняем 2222 на 88, иначе меняем 8888 на 22:
-
аргументы при вызове функции ЗАМЕНИТЬ (REPLACE):
-
формулы в диапазоне A2:C2 протягиваем вниз до появления сообщения об ошибке (оно означает, что не найден ни один образец, ни 2222, ни 8888; последняя строка перед ошибкой – это и есть ответ:
-
Ответ: 22. -
Замечание: вместо вызовов функции ЗАМЕНИТЬ (REPLACE) можно использовать функцию ПОДСТАВИТЬ (SUBSTITUTE):
-
после получения строки с ответом (22) в следующих строках ответ просто повторяется (уже нет сообщения об ошибке, как при использовании функции ЗАМЕНИТЬ); -
в электронных таблицах (как и в языках программирования) числовое значение ноль в логических выражениях (ЕСЛИ и т.д.) рассматривается как ЛОЖЬ (FALSE), а другие числовые значения (не равные нулю) – как ИСТИНА (TRUE).