Главная  Полное построение алгоритма 

[0] [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15] [16] [17] [18] [19] [20] [21] [22] [23] [24] [25] [26] [27] [28] [29] [30] [31] [32] [33] [34] [35] [36] [37] [38] [39] [40] [41] [42] [43] [44] [45] [46] [47] [48] [49] [50] [51] [52] [53] [54] [55] [56] [57] [58] [59] [60] [61] [62] [63] [64] [65] [66] [67] [68] [69] [70] [71] [72] [73] [74] [75] [76] [77] [78] [79] [80] [81] [82] [83] [84] [85] [86] [87] [88] [89] [90] [91] [92] [93] [94] [95] [96] [97] [98] [99] [100] [101] [102] [103] [104] [105] [106] [107] [108] [109] [110] [111] [112] [ 113 ] [114] [115] [116] [117]

Приложение А. Соглашения, принятые

для опи£аи14Я алгоритмов

В этом приложении содержится объяснение соглашений, которые применялись при изложении алгоритмов в этой книге. Мы говорим «соглашения», а не «правила», потому что они не подразумеваются зафиксированными раз и навсегда; наоборот, подразумевается, что эти соглашения достаточно гибкие для того, чтобы изложить любой алгоритм в виде, удобном для чтения и понимания.

Далее следует пример (из разд. 1.2) формы, в которой были описаны алгоритмы.

Algorithm МАХ. Даны n действительных чисел в одномерном массиве r{1), r(2), . . ., r{n); найти такие м и j, что M=rIj)= max r{k)- В случае, когда два или более элементов r имеют

наибольшее значение, выбирается наименьшее значение J. Шаг 0. [Инициализация] Set 7И-<-/?(1); and У-«-1. Шаг 1. [yV=l?] If yV=l then STOP fi.

Шаг 2. [Проверка каждого числа] For к-(-2 to n do шаг 3 od; and STOP.

Шаг 3. [Сравнение] If M<:r(k) then set Mr{k); and j k- (Теперь M - наибольшее число из проверенных, а к - его номер в массиве.) В оставшейся части этого приложения объясняется этот формат.

Общий формат. Общий формат изложения алгоритма проиллюстрирован ниже.

Algorithm ИМЯ ( ). Описание назначения алгоритма вместе с описанием соответствующих параметров и переменных ввода и вывода.

Шаг 0. [ ] Операторы.

Шаг 1. [ ] Операторы

(Комментарии.)

Шаг 2. [ ] Операторы.

Шаг к- [ ] Операторы. (Комментарии.)

Шаг к+1. I 1 Операторы.

Шаг n. [ ] Операторы.



Имя и описание. Начало «Algorithm ИМЯ ( )» выделено жирньш шрифтом. Описание алгоритма читается как абзац с последующими строками, продолжающимися вниз от левого края.

Имя алгоритма пишется только заглавными буквами и должно указывать сущность или автора алгоритма. В некоторых случаях имя может быть аббревиатурой, при этом выделенное курсивом имя может стоять в скобках; например,

Algorithm SIS (Straight Insertion Sort - прямое включение) Algorithm PARSORT (PARallel Sort - параллельная сортировка)

Сразу за именем алгоритма следует краткое описание его назначения, включая описание требуемого ввода и получаемого вывода. Где необходимо, также дается описание появляющихся в алгоритме переменных, назначение которых не сразу очевидно.

Шаги. Перенумерованные шаги алгоритма - Шаг i - выделены курсивом и начинаются с левого края. Некоторые шаги могут быть дважды (трижды и т. д.) сдвинуты вправо, чтобы подчеркнуть логические уровни, повысить наглядность и т. п. Если для операторов внутри Шага i требуется больше одной строки, последующие строки начинаются ниже и правее номера шага.

Шаги алгоритма указываются обозначениями Шаг i, где i - неотрицательное целое число. Нумерация шагов всегда последовательная и начинается с О и.пи 1; Шаг О обычно используется д.пя установки в начальное состояние (инициализации) переменных или массивов. Шаг используется для определения смысловой логической единицы в детализированном изложении алгоритма, для которого дальнейшая детализация не кажется необходимой для понимания.

Скобки. Сразу за Шагом i следует краткая фраза, заключенная в скобки [ ], описывающая цель шага. Эти скобки могут бы1ь опущены в случае, когда цель шага очевидна и не требует объяснения. Скобки служат другой полезной цели, когда они используются для комментариев или замечаний по реализации алгоритма; это помогает прямо показать, где конкретный шаг реализован в кодах.

Пунктуация и комментарии к операторам. За фразой в скобках следует последовательность из одного или более операторов, отделенных точками с запятой (;). Эта последовательность оканчивается точкой. Сразу за последней точкой с запятой и перед последним оператором в последовательности может появиться слово and для удобства чтения. После всех операторов внутри шага могут появиться дополнительные комментарии, заключенные в круглые скобки; они используются для объяснения особенностей алгоритма или различных этапов вычислений.



Соглашения о языке операторов. Предполагается, что все операторы можно читать как предположения или как последовательность команд. Например, вместо того чтобы писать COST f-О, мы можем писать Set COST 0. В этом случае мы говорим, что Set - элемент языка операторов, тогда как COST- переменная, выбранная разработчиком алгоритма. Все слова языка операторов выделяются жирным шрифтом; к ним относятся:

and do else fi for goto if od set then through to while

Если с этих слов начинается предложение, начальные буквы - заглавные, например Set, Do, If.

Чтобы отличить имена переменных и логические операции от слов языка операторов, имена переменных и логические операции пишутся полностью заглавными буквами. Обращаем внимание на разницу между AND и and в следующем примере:

If /<10 AND /<10 then set II+l; and set JJ+{ fi.

Операторы присваивания. Операторы присваивания записываются с помощью стрелки (-«-). Слово set необязательно; например,

Set / 1 или

Set /1; J2; and K<-3.

Операторы If. Операторы if могут быть двух видов, а именно:

И KJ then set +1 fi или If KJ then set I I+l else set J J-1 fi.

После then и else могут появляться заключенные в скобки предложения, если они улучшают или понимание, или читаемость, или и то и другое; например.

If KJ then [исключаем вершину] set /-<- /-f 1

else [сдвигаем указатель] set PTR LEFT (PTR) fi.

Обычно мы рекомендуем ставить fi в конце оператора if, особенно когда его отсутствие может повлечь двусмысленность или неправильность оператора.

Рассмотрим оператор

И KJ then set I I+l

else set +1; К I.

Oh может быть интерпретирован одним из двух способов:

И KJ then set I I+l

else set JJ+1; set /4-1 fi.



[0] [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15] [16] [17] [18] [19] [20] [21] [22] [23] [24] [25] [26] [27] [28] [29] [30] [31] [32] [33] [34] [35] [36] [37] [38] [39] [40] [41] [42] [43] [44] [45] [46] [47] [48] [49] [50] [51] [52] [53] [54] [55] [56] [57] [58] [59] [60] [61] [62] [63] [64] [65] [66] [67] [68] [69] [70] [71] [72] [73] [74] [75] [76] [77] [78] [79] [80] [81] [82] [83] [84] [85] [86] [87] [88] [89] [90] [91] [92] [93] [94] [95] [96] [97] [98] [99] [100] [101] [102] [103] [104] [105] [106] [107] [108] [109] [110] [111] [112] [ 113 ] [114] [115] [116] [117]

0.001