Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
oaip.docx
Скачиваний:
7
Добавлен:
26.09.2019
Размер:
292.13 Кб
Скачать

2)Итерационные циклы

Если число повторений заранее не известно и решение о завершении цикла принимается на основе анализа некоторого условия, то такой повторяющийся вычислительный процесс называется итерационным циклом.

В Паскале для организации итерационных циклов предусмотрено две алгоритмические структуры. Первая структура называется «цикл с предусловием» и использует оператор WHILE ... DO а). Вторая структура носит название «цикл с постусловием» и реализуется оператором REPEAT... UNTIL .

Цикл с предусловием. Оператор WHILE ... DO.

Синтаксическая структура оператора цикла с предусловием имеет вид:

WHILE < Логическое выражение, или переменная > DO < Оператор >;

Как видно из блок-схемы (рисунок 10.а), перед каждым выполнением цикла анализируется логическое выражение или переменная. При значении TRUE выполняется оператор, составляющий тело цикла. При значении FALSE управление передается следующему за циклом оператору. Если условие ложно с самого начала, то оператор не выполняется ни разу.

Цикл с постусловием. Оператор REPEAT... UNTIL.

Недостатком оператора WHILE является то, что в цикле можно выполнить только один оператор, поэтому приходится в большинстве случаев использовать операторные скобки BEGIN...END. Этого недостатка лишен оператор цикла с постусловием (иногда его называют оператором «повтора», рисунок 10. б), имеющим следующий вид:

REPEAT

<Оператор 1>;

<Оператор 2>;

< Оператор К>

UNTIL <Условие>;

Ключевые слова REPEAT и UNTIL этого оператора играют роль операторных скобок BEGIN ... END. Поэтому эта конструкция тоже один оператор.

Break, Continue.

В циклах FOR, REPEAT, WHILE можно использовать процедуры BREAK и CONTINUE. Первая процедура позволяет досрочно выйти из цикла, не дожидаясь выполнения условий выхода. Вторая процедура позволяет начать новую итерацию цикла даже в том случае, если предыдущая итерация не завершена. Использование этих процедур ускоряет работу программы в рамках принципа структурного программирования..

Билет 19

Поиск в ширину в графе

Рассмотрим метод поиска в графе, называемый поиском в ширину (англ: breadth first search). Прежде чем описать его, отметим, что при поиске в глубину чем позднее будет посещена вершина, тем раньше она будет использована — точнее, так будет при допущении, что вторая вершина посещается перед использованием первой. Это прямое следствие того факта, что просмотренные, но еще не использованные вершины скапливаются в стеке. Поиск в ширину, грубо говоря, основывается на замене стека очередью. После такой модификации, чем раньше посещается вершина (помещается в очередь), тем раньше она используется (удаляется из очереди). Использование вершины происходит с помощью просмотра сразу всех еще не просмотренных соседей этой вершины. Вся процедура поиска представлена ниже (данная процедура используется также и для просмотра графа, и в псевдокоде, описанном ниже, отсутствуют операторы, которые не используются для поиска).

procedure WS (v);

(*поиск в ширину в графе с началом в вершине v;

переменные НОВЫЙ, ЗАПИСЬ — глобальные *)

begin

ОЧЕРЕДЬ := Æ; ОЧЕРЕДЬ <= v; НОВЫЙ [v] := ложь

while ОЧЕРЕДЬ ¹ Æ do

begin р<= ОЧЕРЕДЬ; посетить р;

for u Î ЗАПИСЬ [р] do

if НОВЫЙ [u] then

begin

ОЧЕРЕДЬ <= u;

НОВЫЙ [u]:=ложь

end

end

end

Примечание: в 7-й строке псевдокода кроме условия НОВЫЙ[u] должно также выполниться условие наличия связи (ребра) между v-й и u-й вершинами. Для установки наличия ребра сначала в списке v-й вершины ищется информационное значение и-й вершины. Если оно найдено, то ребро установлено, если нет, то информационное значение v-й вершины ищется в списке и-й вершины, т.е. наоборот. В результате добавления двух лишних циклов поиска общий алгоритм поиска несколько теряет компактность, но на быстродействии в целом это не сказывается.

Оператор выбора case

Оператор выбора позволяет выбрать одно из нескольких возможных продолжений программы. Параметром, по которому осуществляется выбор, служит так называемый ключ выбора (или селектор) - выражение любого типа (кроме типов REAL и STRING).

Общая форма записи следующая:case Выражение of

значение1 : оператор (группа операторов);

значение2 : оператор (группа операторов);

. . . . . . . . . . . . . . . . . . . . . .

значениеN : оператор (группа операторов)

else оператор (группа операторов);

end;

Оператор выбора работает следующим образом. Сначала вычисляется значение выражения, стоящего после зарезервированного слова case, а затем выполняется оператор (или составной оператор), соответствующий результату вычисления выражения.

Может случиться, что в списке выбора не окажется константы, равной вычисленному значению ключа. В этом случае управление передается оператору, стоящему за словом ELSE.

case NUMBER mod 2 of

0 : writeln (NUMBER, '- число четное')

else writeln (NUMBER, '- число нечетное');

end;

Если один оператор выполняется при нескольких значениях, то их можно перечислить через запятую.

case MONTH of

1, 2, 3 : writeln ('Первый квартал');

4, 5, 6 : writeln ('Второй квартал');

7, 8, 9 : writeln ('Третий квартал');

10, 11, 12 : writeln ('Четвёртый квартал');

end;

Оператором может являться не только простой оператор, но также составной и пустой операторы.

case CODE of

1 : for i := 1 to 5 do

writeln ('*******');

2 : begin {составной оператор}

x:=sqr(y-1);

writeln (x);

end;

3 : {пустой оператор}

end;

Любому заданному значению селектора соответствует лишь один вход в списке операторов. Константы должны принадлежать тому же типу, что и селектор. Если селектор принимает значение, которому не соответствует ни один вход, то будет выполняться оператор, следующий за словом else. Если же этого оператора нет, то никакие альтернативы не будут выполняться.

Если оператор должен выполняться при нескольких последовательных значениях селектора, образующих некоторый промежуток, можно использовать следующую форму записи:case Chislo of

0..9 : write ('Это число является цифрой');

Билет 20

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]