Алгоритмы, структуры данных




Лирическое отступление - часть 3


/p>

Теперь мы можем выполнить несколько чисто формальных шагов:

  • Выделяем в нашем алгоритме фрагменты, которые хорошо укладываются в структурную модель (если такие есть). В нашем случае такой фрагмент только один: B2 + C2, т.е. последовательность из блока и условия.
    ( Если вы считаете, что фрагмент можно взять несколько шире и включить в него C1+B2+C2, я с вами соглашусь, но см.)

  • Вне этих фрагментов ставим жирные точки в следующих местах:

    • на входе в модуль (обозначим ее 1)
    • на выходе модуля (обозначим 0)
    • на входах и выходах всех фрагментов, что мы нашли
    • во всех местах, где есть пересечение линий на блок-схеме

    Скорее всего, многие точки просто сольются - пусть, мы будем считать их за одну. Например, у нас точка 1 на входе модуля совпадает с точкой пересечения линий входящей и от B3.

  • Пронумеруем оставшиеся точки произвольно.

    мы еще поговорим о том, что могут на самом деле означать эти номера. В нашем примере получается 4 точки от 0 до 3.

  • Теперь мы готовы перейти к модели конечного автомата и написать-таки нашу программу.
  • Представьте, что есть некий блок, который может находиться в одном из 4 состояний. И есть набор действий, в результате которых блок переходит из одного состояния в другое.
  • Для отображения этого самого состояния, заведем в программе некоторую переменную, скажем, State. А внутри веток CASE будем изменять ее состояние.
  • Пишем нашу программу: var State:integer; begin State:=1; {для любого алгоритма} repeat case State of ... end; until State=0; {тоже для любого алгоритма} end;

  • Теперь пропишем ветки CASE. Не забудьте в конце каждой ветки уточнить состояние: case State of 1: begin B1; if C1 then State:=2 else State:=3 end; 2: begin B2; if C2 then State:=0 else State:=3 end; 3: begin B3; State:=1 end; end;

  • Все! Программа готова. Идите и попробуйте, она работает. И с точки зрения логики Паскаля все безупречно - никаких тебе GOTO и прочих неприятностей.




Содержание  Назад  Вперед