Алгоритмы для ЭВМ
Принято считать, что алгоритмы вообще и алгоритмы для ЭВМ в частности необходимы для решения очень сложных задач, которое в свете предыдущего утверждения может показаться недостижимой или даже нереальной целью. Разрешается это видимое противоречие довольно просто: если задача настолько трудоемка и сложна, что один алгоритм для ее решения был бы громоздок и сложен, следует разбить ее на меньшие и более простые подзадачи и для каждой из них разработать отдельный алгоритм. Практически уже первое разбиение на подзадачи может иметь такую структуру, что весь алгоритм и ход выполнения от подзадачи к подзадаче будут достаточно просты. Если же некоторые подзадачи по-прежнему останутся громоздкими и сложными (что вполне вероятно), то они, в свою очередь, тоже должны быть разбиты на подзадачи, причем этот иерархический процесс будет продолжаться до тех пор, пока алгоритмы для подзадач самого нижнего уровня не станут достаточно просты.
Все это будет рассмотрено еще раз в аспекте, более приближенном к специфике ЭВМ. Мы можем несколько смягчить требования минимизации числа шагов алгоритма, поскольку на самом деле проблема в основном вызвала наличием переходов, и именно их число следует уменьшать насколько это возможно. Алгоритмы с только последовательным или циклическим ходом выполнения имеют достаточно простую структуру и в общем случае могут содержать большее число шагов, чем алгоритмы с переходами, хотя это число по-прежнему не должно быть таким, чтобы делать неясным конечный результат работы алгоритма.
Каждый переход увеличивает число альтернативных ветвей алгоритма; именно это свойство перехода и вызывает проблемы. Переходы, несомненно, необходимы, но чем больше их в алгоритме, тем сложнее он становится и тем труднее понять, как он работает и по какой ветви пойдёт алгоритм в конкретной ситуации.
Для вычисляемого перехода конкретная ветвь определяется путем вычисления выражения, дающего в результате используемое при выборе значение. Как правило, полученное значение является целым (скажем, г). Целое i должно находиться в пределах от 1 до n включительно, в каждом случае выбирается ветвь, имеющая номер. Если в результате ошибки i выходит за пределы указанного интервала, то выбирается ветвь.
Ограничения, налагаемые вычисляемым переходом, вообще говоря, позволяют легче понять алгоритм, чем в общем случае перехода.
Следствием иерархического метода разработки алгоритмов (который на этапе программирования переходит в структурное программирование) является тот факт, что блок-схемы каждой подзадачи и на каждом иерархическом уровне достаточно просты, настолько просты, что многие считают их вычерчивание бессмысленным, предпочитая выражать алгоритмы непосредственно на каком-нибудь подходящем языке, как правило, на языке программирования, имеющем удобные средства для описания разного рода циклов. Действительно, выражение столь простых алгоритмов будет достаточно простым независимо от того, используются ли для этого блок-схемы, язык программирования или даже (при условии, что будет обращено внимание на возможную неоднозначность, о чем уже говорилось ранее) естественный язык.
Как Вы делаете это — в большей степени дело вкуса. Многие предпочитают иметь визуальное подтверждение хода выполнения алгоритма, которое дает диаграмма. Это, несомненно, полезная часть документации, как будет показано. Если блок-схема помогает пониманию при разработке алгоритма — прекрасно, если нет, то пользоваться ею не обязательно (если Вы не нуждаетесь в ней для обсуждения алгоритма с кем-либо еще).

