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

[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]

ветственно растет трудность понимания, как они работают, исправления обнаруженных в них ошибок, доказательства их правильности и при необходимости правильного внесения в них изменений. В последние годы обратили внимание на то, что от 50 до 100% времени программист тратит на решение задач по исправлению, эксплуатации и модификации программ. Пытаясь помочь программистам, индустрия программного обеспечения предлагает более систематичные подходы к программированию, т. е. предлагает методики, использование которых уменьшает вероятность ошибок в программах, упрощает их понимание и облегчает модификацию.

На сегодняшний день самой популярной методикой, по-видимому, следует считать структурное программирование сверху-вниз. В данном разделе мы введем основные идеи этой методики и проиллюстрируем ее на примере.

Структурное программирование

Наше объяснение структурного программирования мы начнем с определения блок-схемы. Блок-схема - это ориентированная сеть, вершины которой могут быть одного из трех типов, представленных на рис. 2.1.1.

Функциональная вершина используется для представления функции f: X-Y. Предикатная вершина используется для представления функции (или предиката) р: Х{Т, F), т. е. логического выражения, передающего управление по одной из двух возможных ветвей. Объединяющая вершина представляет передачу управления от одной из двух входящих ветвей к одной выходящей ветви.

Структурная блок-схема - это блок-схема, которая может быть выражена как композиция из четырех элементарных блок-схем, изображенных на рис. 2.1.2. Сравнительно просто доказать, что любая программа для вычислительной машины может быть «представлена» блок-схемой. Как было показано Бомом и Якопини, верно (хотя далеко не очевидно) и то, что любая блок-схема может в свою очередь быть представлена структурной блок-схемой. Из этого результата немедленно следует, что для разработки любого алгоритма достаточно четырех элементарных блок-схем, приведенных на рис. 2.1.2.

Когда структурная блок-схема служит как представление программы, В интерпретируется как булевское выражение, а S1 и 52 интерпретируются как программные операторы (или процедуры).

Блок-схемы на рис. 2.1.2, а, б, в и г называют структурами управления программы. Схема на рис. 2.1.2, а яазътается композицией и записывается в виде do SI; S2 od (или просто SI; S2). Схема на рис. 2.1.2, б называется выбором (или альтернативой) и записывается в виде if В then SI else S2 fi (символ fi можно опускать при записи этой конструкции; он является признаком окончания конструкции if). Блок-схемы на рис. 2.1.2, в и г называются итерацией (или повторением) и записываются соответственно как while 5 do SI od и




Рис. 2.1.1. Типы вершин на блок-схеме: (с) функциональная вершина, (б) предикатная вершина, (е) объединяющая вершина.


it •£ г

Рис. 2.1.2. Четыре элемента структурной блок-схемы,


Рис. 2.1.3. Блок-схема для оператора if В then SI.



do SI while В od (употребление символа od также необязательно) Следует отметить, что часто употребляемый упрощенный оператор if В then SI, блок-схема которого приведена на рис. 2.1.3, представляет собой частный случай оператора if - then-else.

Важная особенность заключается в том, что каждая из этих четырех программных структур управления имеет один вход и один выход. Отсюда следует, что у любой блок-схемы, составленной из этих элементов, также будет один вход и один выход. На рис. 2.1.4 в качестве иллюстраций приводится несколько примеров структурных блок-схем, построенных из данных элементов; лингвистически эти блок-схемы могут быть описаны следующим образом:

ifBthendQS1;S2oj5 else if С then £3

e!se 34 f i fi

(/) if В Шп it с Eheri do 31; s2 od

eiss while D(ie S3 Odff else do S4;S5;S6odfi

Обратите внимание на то, что в предыдущих блок-схемах совершенно отсутствует оператор goto.

Строго говоря, .г!од структурным програ.шированием понимается процесс разработки алгорит.мов с помощью структурных блок-схем.


Рис. 2.1.4. Две структурных блок-схемы.

Однако В более широком плане структурное программирование допускает большее разнообразие элементарных структур управления, чем те, которые были предложены Бомом и Якопини (т. е. те, которые



[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.0015