ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 04.12.2023
Просмотров: 2370
Скачиваний: 17
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
-
таким образом, только клетка B1 удовлетворяет условию задачи, поэтому … -
правильный ответ – 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) ‘АДЕОТ’
Решение:
-
эта задача более близка к классическому программированию, здесь выполняется обработка символьных строк; вся информация для успешного решения, вообще говоря, содержится в условии, но желательно иметь хотя бы небольшой опыт работы с символьными строками на Паскале (или другом языке) -
заметим, что последняя команда алгоритма, b:=Склеить(b,'Т'), добавляет букву 'Т' в конец строки b, поэтому ответ 2 – явно неверный (строка должна оканчиваться на букву 'Т', а не на 'П') -
для решения будем использовать ручную прокрутку; здесь пять переменных: a, b, c, i, k, для каждой из них выделим столбец, где будем записывать изменение ее значения -
перед выполнением заданного фрагмента мы знаем только значение a, остальные неизвестны (обозначим их знаком вопроса):
a
b
c
i
k
'ПОЕЗД'
?
?
?
?
-
в первой команде длина строки a (она равна 5 символам) записывается в переменную i:
a
b
c
i
k
'ПОЕЗД'
?
?
?
?
i:=Длина(a)
5
-
следующие два оператора записывают начальные значения в k и b:
a
b
c
i
k
'ПОЕЗД'
?
?
?
?
i:=Длина(a)
5
k:=2
2
b:='А'
'A'
-
далее следует цикл пока с проверкой условия 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)
-
далее нужно перейти в начало цикла и снова проверить условие 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
-
условие 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
-
теперь i=-1, поэтому при очередной проверке условие i>0 в начале цикла оказывается ложным, выполнение цикла заканчивается, и исполнителю остается выполнить единственную строчку после цикла, которая дописывает в конец строки b букву 'Т':
a
b
c
i
k
...
'ПОЕЗД'
'АДЕП'
…
–1
2
i > 0?
нет
b:=Склеить(b,'Т')
'АДЕПТ'
-
у нас получилось, что в конце выполнения фрагмента алгоритма в переменной b будет записана последовательность символов 'АДЕПТ' -
таким образом, правильный ответ – 1.
-
Возможные проблемы:-
таблица получилась достаточно громоздкая, однако она позволяет наиболее наглядно решить задачу
-
Еще пример задания1:
Р-00. Система команд исполнителя РОБОТ, «живущего» в прямоугольном лабиринте на клетчатой плоскости:
вверх вниз влево вправо.
При выполнении любой из этих команд РОБОТ перемещается на одну клетку соответственно: вверх ↑, вниз ↓, влево ←, вправо →. Четыре команды проверяют истинность условия отсутствия стены у каждой стороны той клетки, где находится РОБОТ:
сверху свободно снизу свободно
слева свободно справа свободно
Цикл ПОКА <условие> команда выполняется, пока условие истинно, иначе происходит переход на следующую строку.
| | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | |