Учебно-методический комплекс дисциплины для обучающегося «Языки программирования» для специальности 5В010900 Математика


Пример 5 (сжатие слова) А={a,b,c}. Удалить из слова Р первое вхождение символа a, если такое есть. Решение



бет82/142
Дата03.01.2022
өлшемі1.33 Mb.
#450516
түріУчебно-методический комплекс
1   ...   78   79   80   81   82   83   84   85   ...   142
УМКДО -ЯзыкиПрограммирования

Пример 5 (сжатие слова) А={a,b,c}. Удалить из слова Р первое вхождение символа a, если такое есть.

Решение. В предыдущем примере мы переносили на позицию вправо только один символ. В данном же примере мы будем в цикле переносить вправо все начальные символы b и c входного слова - до первого символа a или до пустой клетки:

Центральный момент здесь - как перенести символ x из левой клетки в очередную клетку, где находится некоторый символ y, чтобы затем этот символ у можно было перенести в правую клетку? Если через qx обозначить состояние, в котором в видимую клетку надо записать символ x, находившийся ранее в клетке слева, тогда это действие можно изобразить так:



Для этого предлагается выполнить такт x,R,qy, в котором объединены сле­дующие три действия: во-первых, в видимую клетку записывается символ x, взятый из клетки слева; во-вторых, автомат сдвигается вправо - под клетку, в которую затем надо будет записать только что замененный символ y; в-третьих, автомат переходит в состояние qy, в котором он и будет выполнять эту запись.



Повторение таких тактов в цикле и приведет к сдвигу вправо на одну позицию начальных символов входного слова. Этот цикл должен закончиться, когда в очередной клетке окажется символ a или Λ (y=a или y=Λ), а в начале цикла можно считать, что на место первого символа слева переносится символ «пусто» (x=Λ). В итоге получается следующая программа для МТ:

В этой программе следует обратить внимание на такт Λ,R,! , который выполняется в конфигурации , т.е. когда первым символом входного слова является a. Ясно, что надо просто стереть этот символ и остановиться. Однако в этом такте указан еще и сдвиг вправо. Зачем? Напомним, что в момент останова автомат должен находиться под выходным словом (под любым его символом), поэтому мы и сдвигаем автомат с пустой клетки на клетку с первым символом выходного слова, который во входном слове был вторым.




Достарыңызбен бөлісу:
1   ...   78   79   80   81   82   83   84   85   ...   142




©dereksiz.org 2024
әкімшілігінің қараңыз

    Басты бет