Главная страница

Сало. Выполнение алгоритмов для исполнителя


Скачать 1.59 Mb.
НазваниеВыполнение алгоритмов для исполнителя
Дата22.01.2021
Размер1.59 Mb.
Формат файлаdoc
Имя файлаege14.doc
ТипДокументы
#170407
страница7 из 26
1   2   3   4   5   6   7   8   9   10   ...   26

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


Р-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   2   3   4   5   6   7   8   9   10   ...   26


написать администратору сайта