Ну и "на закуску", для сравнения - разворачиваю ЦД в два вложенных цикла:

## Код:
```
i := 0;
WHILE i < len DO
   j := i + 1;
   WHILE (j < len) & (pass[j] = pass[i]) DO
     INC(j)
   END;
   INC(stat[j-i])
   i := j
END
```


Если сравнивать ЦД и последний вариант (помня, что последний легко написался уже после ЦД), то плюсом ЦД является то, что он требует "полноты анализа ситуаций". Т.е. сразу перечисляешь на одном уровне и все возможные действия, и условия, при которых эти действия активизируются. Не думая о том, как между собой взаимодействуют вложенные циклы.
Но с точки зрения читателя вариант, преобразованный во вложенные, может быть попонятней. С другой стороны, вопрос, хотим ли мы сохранять в коде понятность хода мыслей? Иногда смотришь на понятный алгоритм, но понимаешь, что скрыт объём работы при его построении...
+ фактор развиваемости: если что-то понадобится менять, усложнится задача, то ЦД гораздо проще развивать...
Можно, конечно, класть начальный ЦД в комментарий (в фолд), а писать преобразованный вариант.