Файл: Выполнение алгоритмов для исполнителя.doc

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 04.12.2023

Просмотров: 2370

Скачиваний: 17

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.



  1. таким образом, только клетка B1 удовлетворяет условию задачи, поэтому …

  2. правильный ответ – 1.

Еще пример задания:


Р-01. В приведенном ниже фрагменте алгоритма, записанном на алгоритмическом языке, переменные a, b, c имеют тип «строка», а переменные i, k – тип «целое». Используются следующие функции:

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

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

Склеить(a,b) – возвращает строку, в которой записаны сначала все символы
строки
a, а затем все символы строки b. (Тип «строка»)

Значения строк записываются в одинарных кавычках (Например, a:='дом'). Фрагмент алгоритма:

i := Длина(a)

k := 2

b := 'А'

пока i > 0

нц

c := Извлечь(a,i)

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

i := i – k

кц

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

Какое значение будет у переменной b после выполнения вышеприведенного фрагмента алгоритма, если значение переменной a было ‘ПОЕЗД’?

1) ‘АДЕПТ’ 2) ‘АДЗЕОП’ 3) ‘АДТЕТПТ’ 4) ‘АДЕОТ’

Решение:

  1. эта задача более близка к классическому программированию, здесь выполняется обработка символьных строк; вся информация для успешного решения, вообще говоря, содержится в условии, но желательно иметь хотя бы небольшой опыт работы с символьными строками на Паскале (или другом языке)

  2. заметим, что последняя команда алгоритма, b:=Склеить(b,'Т'), добавляет букву 'Т' в конец строки b, поэтому ответ 2 – явно неверный (строка должна оканчиваться на букву 'Т', а не на 'П')

  3. для решения будем использовать ручную прокрутку; здесь пять переменных: a, b, c, i, k, для каждой из них выделим столбец, где будем записывать изменение ее значения

  4. перед выполнением заданного фрагмента мы знаем только значение a, остальные неизвестны (обозначим их знаком вопроса):




    a

    b

    c

    i

    k




    'ПОЕЗД'

    ?

    ?

    ?

    ?

  5. в первой команде длина строки a (она равна 5 символам) записывается в переменную i:




    a

    b

    c

    i

    k




    'ПОЕЗД'

    ?

    ?

    ?

    ?

    i:=Длина(a)










    5




  6. следующие два оператора записывают начальные значения в k и b:




    a

    b

    c

    i

    k




    'ПОЕЗД'

    ?

    ?

    ?

    ?

    i:=Длина(a)










    5




    k:=2













    2

    b:='А'




    'A'










  7. далее следует цикл пока с проверкой условия i>0 в начале цикла; сейчас i=5>0, то есть, условие выполняется, цикл начинает работать и выполняются все операторы в теле цикла:





a

b

c

i

k




'ПОЕЗД'

?

?

?

?

i:=Длина(a)










5




k:=2













2

b:='А'




'A'










i > 0?

да

c:=Извлечь(a,i)

i:=Длина(a)










5

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

k:=2













i:=i–k










3




  • поскольку i=5, вызов функции Извлечь(a,i) выделяет из строки a символ с номером 5, это 'Д';

  • следующей командой этот символ приписывается в «хвост» строки b, теперь в ней хранится цепочка 'АД';

  • в команде i:=i-k значение переменной i уменьшается на k (то есть, на 2)

  1. далее нужно перейти в начало цикла и снова проверить условие i>0, оно опять истинно, поэтому выполняется следующий шаг цикла, в котором к строке b добавляется 3-й символ строки a, то есть 'Е':




    a

    b

    c

    i

    k

    ...

    'ПОЕЗД'

    'АД'



    3

    2

    i > 0?

    да

    c:=Извлечь(a,i)







    'Е'







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




    'АДЕ'










    i:=i–k










    1




  2. условие i>0 истинно, поэтому тело цикла выполняется еще один раз, к строке b добавляется 1-й символ строки a, то есть 'П':




    a

    b

    c

    i

    k

    ...

    'ПОЕЗД'

    'АДЕ'



    1

    2

    i > 0?

    да

    c:=Извлечь(a,i)







    'П'







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




    'АДЕП'










    i:=i–k










    –1




  3. теперь i=-1, поэтому при очередной проверке условие i>0 в начале цикла оказывается ложным, выполнение цикла заканчивается, и исполнителю остается выполнить единственную строчку после цикла, которая дописывает в конец строки b букву 'Т':




    a

    b

    c

    i

    k

    ...

    'ПОЕЗД'

    'АДЕП'



    –1

    2

    i > 0?

    нет

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




    'АДЕПТ'










  4. у нас получилось, что в конце выполнения фрагмента алгоритма в переменной b будет записана последовательность символов 'АДЕПТ'

  5. таким образом, правильный ответ – 1.


Возможные проблемы:

  • таблица получилась достаточно громоздкая, однако она позволяет наиболее наглядно решить задачу



Еще пример задания1:


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

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

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

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

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

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