Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
дз11 (6_2, 14).doc
Скачиваний:
9
Добавлен:
11.03.2016
Размер:
297.98 Кб
Скачать

Задания этого типа состоят в анализе или синтезе алгоритма для некоторого исполнителя, имеющего заданную систему команд. Например, это может быть исполнитель Робот, Чертежник, Черепашка или некоторый абстрактный автомат. В одних заданиях требуется составить алгоритм для решения поставленной задачи, который может включать только команды из системы команд исполнителя. В других заданиях нужно проанализировать предложенный алгоритм и объяснить результат его работы.

Пример. Имеется фрагмент алгоритма, записанный на алгоритмическом языке:

m := 10

b := Извлечь(а, m)

нц для k от 4 до 5

с := Извлечь(а, k)

b := Склеить(b, с)

кц

нц для k от 1 до 3

с := Извлечь(а, k)

b := Склеить(b, с)

кц

Здесь переменные a, b и с - строкового типа; переменные n, m, k – целые. В алгоритме используются следующие функции:

Извлечь(х,i) – возвращает i-й символ слева в строке х. Имеет строковый тип.

Склеить(х,у) – возвращает строку, в которой записаны подряд сначала все символы

строки х, а затем все символы строки у. Имеет строковый тип.

Значения строк записываются в кавычках (одинарных), например x='школа'.

Какое значение примет переменная b после выполнения этого фрагмента алгоритма,

если переменная а имела значение 'ИНФОРМАТИКА'?

1) ‘ФОРМАТ’ 2) ‘ФОРИНТ’ 3) ‘КОРТИК’ 4) ‘КОРИНФ’

Решение. В результате выполнения команд

m := 10

b := Извлечь(а, m)

значением переменной b станет десятый символ строки а (К).

Затем дважды выполнятся команды из первого цикла

нц для k от 4 до 5

с := Извлечь(а, k)

b := Склеить(b, с)

кц

При k=4 переменная с получит значение четвертого символа из строки а (О), затем произойдет склеивание (конкатенация) с и строки b, в результате чего в b будет записана строка “КО”; при k=5 c=’P’, b=”KOP”.

Затем трижды выполнятся команды из второго цикла

нц для k от 1 до 3

с := Извлечь(а, k)

b := Склеить(b, с)

кц

При k=1 переменная с получит значение первого символа из строки а (И), затем произойдет склеивание (конкатенация) с и строки b, в результате чего в b будет записана строка “КОРИ”; при k=2 c=’Н’, b=”KOPИН”, при k=3 c=’Ф’, b=”KOPИНФ”.

Пример. Система команд исполнителя РОБОТ, «живущего» в прямоугольном лабиринте на клетчатой плоскости:

вверх вниз влево вправо.

При выполнении любой из этих команд РОБОТ перемещается на одну клетку соответственно: вверх ↑, вниз ↓, влево ←, вправо →. Четыре команды проверяют истинность условия отсутствия стены у каждой стороны той клетки, где находится РОБОТ:

сверху свободно снизу свободно

слева свободно справа свободно

1

2

3

4

5

6

A

B

C

D

E

F

Цикл

ПОКА < условие >

последовательность команд

КОНЕЦ ПОКА

выполняется, пока условие истинно. В конструкции

ЕСЛИ < условие >

ТО команда1

ИНАЧЕ команда2

КОНЕЦ ЕСЛИ

выполняется команда1 (если условие истинно) или команда2 (если условие ложно).

Если РОБОТ начнёт движение в сторону находящейся рядом с ним стены, то он разрушится и программа прервётся.

Сколько клеток лабиринта соответствуют требованию, что, начав движение в ней и выполнив предложенную программу, РОБОТ уцелеет и остановится в закрашенной клетке (клетка F6)?

НАЧАЛО

ПОКА < справа свободно ИЛИ снизу свободно >

ПОКА < справа свободно >

вправо

КОНЕЦ ПОКА

ПОКА < снизу свободно >

вниз

КОНЕЦ ПОКА

КОНЕЦ ПОКА

КОНЕЦ

Решение. В программе три цикла, причем два из них находится внутри самого первого, внешнего. Внешний цикл выполняется при условии < справа свободно ИЛИ снизу свободно >, т.е. программа прекращает работу в клетках F2, D5, F6. Первый внутренний цикл выполняется при условии < справа свободно >, т.е. прекращается в клетках D5, F1-F6. Второй внутренний цикл выполняется при условии < снизу свободно >, т.е. прекращается в клетках D2, D2, F2? B5, C5, D5, A6-F6.

Из всех клеток первого ряда можно дойти только до клетки F2:

1

2

3

4

5

6

A

B

C

D

E

F


Из всех клеток второго ряда тоже можно дойти только до клетки F2:

1

2

3

4

5

6

A

B

C

D

E

F


Из всех клеток третьего и четвертого ряда можно дойти до клетки F6, причем для клеток F3-F6 цикл ПОКА < справа свободно > не выполнится ни разу:

1

2

3

4

5

6

A

B

C

D

E

F


1

2

3

4

5

6

A

B

C

D

E

F


Из клеток A5, D5, C5, D5 можно попасть только в D5:

1

2

3

4

5

6

A

B

C

D

E

F

Из E5 и F5 можно попасть в F6:

1

2

3

4

5

6

A

B

C

D

E

F


Из всех клеток последнего ряда можно попасть в F6, причем цикл ПОКА < снизу свободно > не выполнится ни разу.

Всего получается 6+6+2+6=20 клеток.

Пример (задание 6-2 демовариант 2015). У исполнителя Удвоитель две команды, которым присвоены номера:

1. прибавь 1,

2. умножь на 2.

Первая из них увеличивает число на экране на 1, вторая удваивает его. Например, 2121 – это программа

умножь на 2

прибавь 1

умножь на 2

прибавь 1,

которая преобразует число 1 в число 7 (12 3 7).

Запишите порядок команд в программе преобразования числа 3 в число 63, содержащей не более 8 команд, указывая лишь номера команд. Если таких программ более одной, то запишите любую из них.

Решение. Можно составить дерево программ или действовать «от обратного». Так, число 63 не может быть получено умножением на 2, значит, последняя команда в программе будет 1. Число 63, следовательно, получено из числа 62, которое можно получить умножением на 2 числа 31. 31 можно получить за счет прибавления 1 к числу 30, а число 30 – умножением на 2 числа 15, 15 – из 14 прибавлением 1, 14 – из 7 умножением, 7 – из 6 сложением, 6 – из 3 умножением. Тогда порядок преобразования будет

3 – 6 – 7 – 14 – 15 – 30 – 31 – 62 – 63, т.е. программа имеет вид 21212121.

Пример (задание 14 демовариант 2015). Исполнитель Чертёжник перемещается на координатной плоскости, оставляя след в виде линии. Чертёжник может выполнять команды:

 

сместиться на (a, b), где a, b – целые числа. Эта команда перемещает Чертёжника из точки с координатами (x, y) в точку с координатами (x + a; y + b).

Например, если Чертёжник находится в точке с координатами (4, 2), то команда сместиться на (2, −3) переместит Чертёжника в точку (6, −1).

 

Цикл

ПОВТОРИ число РАЗ

последовательность команд

КОНЕЦ ПОВТОРИ

 означает, что последовательность команд будет выполнена указанное число раз (число должно быть натуральным).

 

Чертёжнику был дан для исполнения следующий алгоритм (буквами n, a, b обозначены неизвестные числа, при этом n>1):

НАЧАЛО

сместиться на (–3, –3)

ПОВТОРИ n РАЗ

сместиться на (a, b)

сместиться на (27, 12)

КОНЕЦ ПОВТОРИ

сместиться на (–22, -7)

КОНЕЦ

Укажите наименьшее возможное значение числа n, для которого найдутся такие значения чисел a и b, что после выполнения программы Чертёжник возвратится в исходную точку. 

Решение. Чтобы Чертежник вернулся в исходную точку, суммарные перемещения по х и по у должны быть равны нулю. Команды, находящиеся в начале и в конце алгоритма

сместиться на (–3, –3)

сместиться на (–22, -7)

выполняются один раз.

Команды, находящиеся в цикле

сместиться на (a, b)

сместиться на (27, 12)

выполняются n раз, это число n и предстоит определить.

Смещение по х можно представить как сумму

х=(-3)+n(a+27)+(-22)=n(a+27) – 25

Смещение по у

у=(-3)+n(b+12)+(-7)=n(b+12) – 10

Можно составить систему уравнений

n(a+27) – 25=0

n(b+12) – 10=0

или

n(a+27) = 25

n(b+12) = 10

Из уравнений следует, что значение n должно быть делителем для 25 и 10. Наименьший общий делитель для 25 и 10 равен 5.

A

B

Задания

1) Исполнитель Робот действует на клетчатом поле, между соседними клетками которого могут стоять стены. Робот передвигается по клеткам поля и может выполнять следующие команды: Вверх (1), Вниз (2), Вправо (3), Влево (4). При выполнении каждой такой команды Робот перемещается в соседнюю клетку в указанном направлении. Если же в этом направлении между клетками стоит стена, то робот разрушается. Какую последовательность из 5 команд выполнил Робот, чтобы переместиться из клетки А в клетку В, не разрушившись от встречи со стенами? Ответы записаны в виде последовательности цифр, соответствующих командам.

1) 32323 2) 23324 3) 32324 4) 22211

2) Система команд исполнителя РОБОТ, «живущего» в прямоугольном лабиринте на клетчатой плоскости:

вверх вниз влево вправо.

При выполнении любой из этих команд РОБОТ перемещается на одну клетку соответственно: вверх ↑, вниз ↓, влево ←, вправо →. Четыре команды проверяют истинность условия отсутствия стены у каждой стороны той клетки, где находится РОБОТ:

сверху свободно снизу свободно

слева свободно справа свободно

Цикл ПОКА <условие> команда выполняется, пока условие истинно, иначе происходит переход на следующую строку.

Если РОБОТ начнет движение в сторону стены, он разрушится и программа прервется.

Сколько клеток приведенного лабиринта соответствуют требованию, что, выполнив предложенную ниже программу, РОБОТ уцелеет и остановится в той же клетке, с которой он начал движение?

1) 1 2) 2 3) 3 4) 4

НАЧАЛО

ПОКА <снизу свободно> влево

ПОКА <слева свободно> вверх

ПОКА <сверху свободно> вправо

ПОКА <справа свободно> вниз

КОНЕЦ

6

5

4

3

2

1

A

B

C

D

E

F

3) Система команд исполнителя РОБОТ, «живущего» в прямоугольном лабиринте на клетчатой плоскости:

вверх вниз влево вправо.

При выполнении любой из этих команд РОБОТ перемещается на одну клетку соответственно: вверх ↑, вниз ↓, влево ←, вправо →. Четыре команды проверяют истинность условия отсутствия стены у каждой стороны той клетки, где находится РОБОТ:

сверху свободно снизу свободно

слева свободно справа свободно

Цикл ПОКА <условие> команда выполняется, пока условие истинно, иначе происходит переход на следующую строку.

Если РОБОТ начнет движение в сторону стены, он разрушится и программа прервется.

Сколько клеток приведенного лабиринта соответствуют требованию, что, выполнив предложенную ниже программу, РОБОТ уцелеет и остановится в той же клетке, с которой он начал движение?

1) 1 2) 2 3) 3 4) 4

НАЧАЛО

ПОКА <сверху свободно> вправо

ПОКА <справа свободно> вниз

ПОКА <снизу свободно> влево

ПОКА <слева свободно> вверх

КОНЕЦ

6

5

4

3

2

1

A

B

C

D

E

F

4) Система команд исполнителя РОБОТ, «живущего» в прямоугольном лабиринте на клетчатой плоскости:

вверх вниз влево вправо.

При выполнении любой из этих команд РОБОТ перемещается на одну клетку соответственно: вверх ↑, вниз ↓, влево ←, вправо →. Четыре команды проверяют истинность условия отсутствия стены у каждой стороны той клетки, где находится РОБОТ:

сверху свободно снизу свободно

слева свободно справа свободно

Цикл ПОКА <условие> команда выполняется, пока условие истинно, иначе происходит переход на следующую строку.

Если РОБОТ начнет движение в сторону стены, он разрушится и программа прервется.

Сколько клеток приведенного лабиринта соответствуют требованию, что, выполнив предложенную ниже программу, РОБОТ уцелеет (не врежется в стену)?

1) 0 2) 5 3) 15 4) 25

НАЧАЛО

ПОКА <слева свободно> влево

ПОКА <справа свободно> вправо

вверх

вправо

КОНЕЦ

5) Имеется фрагмент алгоритма, записанный на алгоритмическом языке:

n := Длина(а)

i := n

b := ''

нц пока i > 1

с := Извлечь(а, i)

b := Склеить(c, b)

i := i - 2

кц

Здесь переменные a, b и с - строкового типа; переменные n, i – целые. В алгоритме используются следующие функции:

Длина(х) – возвращает количество символов в строке х. Имеет тип «целое».

Извлечь(х,i) – возвращает i-й символ слева в строке х. Имеет строковый тип.

Склеить(х,у) – возвращает строку, в которой записаны подряд сначала все символы строки х, а затем все символы строки у. Имеет строковый тип.

Значения строк записываются в кавычках (одинарных), например x='школа'.

Какое значение примет переменная b после выполнения этого фрагмента алгоритма,

если переменная а имела значение 'ABCDEFGH'?

1) ‘HFDB’ 2) ‘BCDE’ 3) ‘BDFH’ 4) ‘EFGH’

6) У исполнителя УТРОИТЕЛЬ две команды, которым присвоены номера:

1. Вычти 1

2. Умножь на 3

Первая из них уменьшает число на экране на 1, вторая – увеличивает его в три раза.

Запишите порядок команд в программе получения из числа 3 числа 16, содержащей не более 5 команд, указывая лишь номера команд.

(Например, программа 21211 это программа

умножь на 3

вычти 1

умножь на 3

вычти 1

вычти 1

которая преобразует число 1 в 4.)

7) Имеется исполнитель Кузнечик, который живет на числовой оси. Система команд Кузнечика:

Вперед N (Кузнечик прыгает вперед на N единиц);

Назад M (Кузнечик прыгает назад на M единиц).

Переменные N и M могут принимать любые целые положительные значения. Известно, что Кузнечик выполнил программу из 50 команд, в которой команд “Назад 2” на 12 больше, чем команд “Вперед 3”. Других команд в программе не было. На какую одну команду можно заменить эту программу, чтобы Кузнечик оказался в той же точке, что и после выполнения программы?

8) Исполнитель Чертежник имеет перо, которое можно поднимать, опускать и перемещать. При перемещении опущенного пера за ним остается след в виде прямой линии. У исполнителя существуют следующие команды:

Сместиться на вектор (а, Ь) – исполнитель перемещается в точку, в которую можно попасть из данной, пройдя а единиц по горизонтали и b – по вертикали.

Запись: Повторить 5[ Команда 1 Команда 2] означает, что последовательность команд в квадратных скобках повторяется 5 раз.

Чертежник находится в начале координат. Чертежнику дан для исполнения следующий алгоритм:

Сместиться на вектор (5,2)

Сместиться на вектор (-3, 3)

Повторить 3[Сместиться на вектор (1,0)]

Сместиться на вектор (3, 1)

На каком расстоянии от начала координат будет находиться исполнитель Чертежник в результате выполнения данного алгоритма?

9) У исполнителя, который работает с положительными однобайтовыми двоичными числами, две команды, которым присвоены номера:

1. сдвинь влево

2. вычти 1

Выполняя первую из них, исполнитель сдвигает число на один двоичный разряд влево, а выполняя вторую, вычитает из него 1. Исполнитель начал вычисления с числа 91 и выполнил цепочку команд 112112. Запишите результат в десятичной системе.

10) На экране есть два окна, в каждом из которых записано по числу. Исполнитель СУММАТОР имеет только две команды, которым присвоены номера:

  1. Запиши сумму чисел в первое окно

  2. Запиши сумму чисел во второе окно

Выполняя команду номер 1, СУММАТОР складывает числа в двух окнах и записывает результат в первое окно, а выполняя команду номер 2, заменяет этой суммой число во втором окне. Напишите программу, содержащую не более 5 команд, которая из пары чисел 1 и 2 получает пару чисел 13 и 4. Укажите лишь номера команд.

Например, программа 21211 – это программа:

Запиши сумму чисел во второе окно

Запиши сумму чисел в первое окно

Запиши сумму чисел во второе окно

Запиши сумму чисел в первое окно

Запиши сумму чисел в первое окно

которая преобразует пару чисел 1 и 0 в пару чисел 8 и 3.

11) Исполнитель Вычислитель работает с целыми положительными однобайтными числами. Он может выполнять две команды: