- •Практикум на эвм
- •Казань – 2006
- •Разработка алгоритмов. Графическое изображение (блок-схемы) и словесная запись алгоритмов
- •II. Программирование и структурирование блок-схем
- •If b1 then if b2 then s1 else s2.
- •1: S1; if b then begin s2; goto 1 end и
- •If b1 then goto 2 else goto 3; 2: s; 3: if b2 then goto 2.
- •III. Небольшие программы
- •III.1. Последовательная структура управления
- •III.2. Условная структура управления
- •IV. Циклическая структура управления (без индексации)
- •IV.1. Однократные итерационные циклы
- •IV.2. Переход к кратным (вложенным) циклам
- •V. Управление потоками данных
- •Рекомендации по отработке основных приемов программирования
II. Программирование и структурирование блок-схем
Следующие блок-схемы с одним входом (H – начало) и одним выходом (K – конец), объявляются для данного раздела базисными:
Символы S, S1, ... (называемые в дальнейшем операторами) служат для обозначения функциональных блоков ,каждый из которых представляет некоторую последовательность действий (или вычислений) с одним входом и одним выходом. Символ В обозначает некоторое (логическое) условие, которое может как выполняться (+), так и не выполняться (–). Разветвление интерпретируется следующим образом: если условие В выполняется, то происходит переход на левую ветку, в противном случае – на правую. Стрелки () определяют последовательность выполнения операторов. Таким образом, каждая из блок-схем (1) – (5) однозначно определяет порядок выполнения операторов S, S1, ... в зависимости от выполнения того или иного условия B.
Введем специальный язык для линейной записи блок-схем. Запись блок-схемы на таком языке будет называться программой. Для записи блок-схем (1) – (5) используются следующие конструкции (назовем их базисными операторами):
(1) |
begin S1;...; Sn end |
(составной оператор) |
(2) |
if B then S1 else S2 |
(полный условный оператор) |
(3) |
if B then S |
(неполный условный оператор) |
(4) |
while B do S |
(оператор цикла ПОКА) |
(5) |
repeat S1;...; Sn until B |
(оператор цикла ПОВТОР) |
Определение. Структурной блок-схемой называется любая из базисных блок-схем, а также любая блок-схема, которая может быть получена из структурной блок-схемы заменой некоторых из составляющих ее функциональных блоков на структурные блок-схемы. (Таким образом, программа структурной блок-схемы – это оператор вида (1) – (5), составные части S, S1, ... которого являются операторами того же вида.)
Одно ограничение. Если S – оператор вида (2), то вместо (3) будем писать
(3') |
if B then begin S end |
|
Если такого ограничения не вводить, то существенно разным блок-схемам (6) и (7):
соответствовала бы одна и та же программа
If b1 then if b2 then s1 else s2.
Для записи неструктурных блок-схем введём дополнительное средство – оператор goto L (переход по стрелке), где L – метка, отмечающая оператор, на который осуществляется переход. Например, блок-схемы, изображенные на рис. 1, могут быть записаны как
1: S1; if b then begin s2; goto 1 end и
If b1 then goto 2 else goto 3; 2: s; 3: if b2 then goto 2.
Известно, что любая блок-схема с одним входом и одним выходом без зацикливаний и недостижимых операторов может быть структурирована, т.е. приведена к "эквивалентной" структурной форме, если согласиться на дублирование операторов и введение в блок-схему некоторых дополнительных операторов, вычисляющих "флажки". Например, блок-схемы на рис. 1 могут быть структурированы, как показано на рис. 2.
1. (Написание программ.) Написать программы по заданным блок-схемам (8) – 24) на стр. 10 и 11, используя:
а) составные и условные операторы (схемы (8) – (15));
б) базисные операторы, т.е. составные, условные и цикла (схемы (16) – (21));
в) составные, условные операторы и операторы перехода (схемы (22) – (24)).
2. (Структурирование блок-схем.) Блок-схемы (25) – (30) на стр. 12 преобразовать в их структурные эквиваленты.
3. (Структурирование и программирование.) Написать программы для блок-схем (31) – (42) на стр. 12 – 13. Блок-схемы предварительно преобразовать в структурные.
4. (Блок-схемы программ.) Составить блок-схемы для заданных фрагментов программ:
a) |
if B then begin S1; if B1 then begin S2; S3 end else if B2 then S4 end else if B3 then begin S5; S6; if B4 then S7 end; |
б) |
if B then begin S1; repeat S2; S3 until B1 end else if B1 then S3 else S4; if B2 then begin if B3 then begin S1; S2; S3 end else S4; S5 end else begin while B4 do S6; if B5 then S7; repeat S8 until B6; S9 end; |
в) |
while B do if B1 then S1; if B2 then repeat S1; S2; S3 until B3; if B4 then repeat S4 until B1 else if B4 then S5 else while B5 do begin S6; S7; S8; if B6 then S9 end. |
5. (Структурирование программ.) Составить блок-схемы для заданных фрагментов программ. Полученные блок-схемы преобразовать в структурные и заново запрограммировать:
a) |
5: if B1 then begin S1; S2; S3 end; 6: if B2 then S4 else goto 5; if B3 then S5 else if B4 then S6 else if B5 then goto 6; |
б) |
2: if B1 then begin if B2 then S1 else while B3 do S2; goto 1 end else if B4 then S3 else goto 2; 1: if B3 then S4 else S5; |
в) |
2: S1; if B1 then begin S2; if B2 then repeat S3; S4 until B3 else if B4 begin S5; S6; S7; S8; end end else if B7 then S9 else S10; 1: if B6 then begin S11; goto 1 end else begin while B7 do S12; goto 2 end; if B8 then begin repeat S13 until B9; goto 1 end. |
6. (Ограниченные инструментальные средства.) Показать, что любой из трех базисных операторов (2), (4) или (5) может быть выражен через два остальных, если дополнительно разрешено использовать составной оператор (1) и операторы присваивания следующего вида: x:=true и x:=false (или x:=0 и x:=1).