Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции Алгоритмизация.doc
Скачиваний:
2
Добавлен:
01.04.2025
Размер:
445.44 Кб
Скачать

Тема 3. Описание линей­ных и разветвляющихся структур алгоритмов. Программирование разветвляющихся структур.(1 часа)

План лекции 4:

  1. Линей­ные структуры алгоритмов.

  2. разветвляющиеся структуры алгоритмов.

  3. Классификация операторов алгоритмического языка.

Для программ в императивных (процедурных) языках при их выполнении характерно строго последовательное выполнение содержащихся в них операторов. Переход от одного оператора к другому в процессе выполнения программы называется течением программы или управлением потоком. В языке для управления течением программы используются, прежде всего, условные операторы и циклы. В машинном языке для управления потоком используется команда перехода. С помощью этой команды и реализуются условные операторы и циклы. Но в языке Паскаль существует и прямой аналог команды перехода  оператор перехода.

Отдельные операторы можно пометить с помощью меток. Благодаря этому может быть использован специальный оператор goto m (называемый переходом), так что в результате выполнения этого оператора выполнение программы продолжается с оператора, помеченного меткой m.

Все метки, используемые в программе (блоке), должны быть описаны в специальном разделе label. Метка представляет собой идентификатор или целое число от 1 до 9999.

Пример:

label

m,1,metka,56;

Оператор, помеченный меткой, имеет вид

<метка>:<оператор>;

Не допускаются переходы вовне подпрограмм или внутрь их. Переход внутрь структурного оператора может вызвать непредсказуемые эффекты, хотя компилятор не выдает сообщение об ошибках.

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

Блок-схема для императивной программы может быть систематически выведена из программы.

Условный оператор if C then S1 else S2 выражается с помощью следующей блок-схемы, изображенной на рис. 1

Рис. 1

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

Последовательной композиции S1;S2 соответствует соединение блок-схем для S1 и соответственно для S2 с помощью стрелки от S1 до S2 (рис.2).

Рис. 2

Оператору цикла while B do S соответствует блок-схема рисунка 3.

Рис. 3

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

Условный оператор применяется для задания разветвления в программе, т.е. выбора действий в зависимости от истинности или ложности какого-либо условия.

Пример:

Для того чтобы z стало равным наибольшему из двух чисел x и y, необходимо выполнить присвоение z:=x либо z:=y.

Две формы условного оператора: полная и сокращенная.

<полный условный оператор>::=

if <логическое выражение> then <оператор>

else <оператор>

Примеры:

if x>y then z:=x

else z:=y;

if x<0 then begin

x:=x+h;

y:=y-h;

d:= not d

end

else begin

x:=0;

y:=0

end;

if x>0 then sgn:=1

else if x=0 then sgn:=0 else sgn:=-1;

<сокращенный условный оператор>::=

if <логическое выражение> then <оператор>;

Например, оператор x:=abs(x) эквивалентен if x<0 then x:=-x.

Поменять местами значения переменных x и y так, чтобы в x было большее значение:

if y>x then begin

t:=x;

x:=y;

y:=t

end;

Ветви then и else могут снова содержать условные операторы, например:

if x>0 then sgn:=1

else if x=0 then sgn:=0 else sgn:=-1;

Неоднозначность в условном операторе следующего вида:

if B1 then if B2 then S1 else S2

Возможные истолкования

a) if B1 then begin

if B2 then S1 else S2

end;

b) if B1 then begin if B2 then S1 end

else S2;

В Паскале используется вариант a).

Вводится последовательность целых чисел, 0 – конец последовательности. Найти два наименьших числа.

Переменные:

x – очередное число;

min1 – первое наименьшее число;

min2 – второе наименьшее число (min2>=min1).

Алгоритм решения задачи:

  1. устанавливаем начальные значения min1 и min2 по двум первым числам;

  2. последовательно считываем числа и, если очередное число x меньше или равно min1 (min1<min2), то переприсваиваем значение min1 и min2;

  3. если x попадает в интервал от min1 до min2, то переприсваиваем только min2;

  4. выводим результат.

var x,min1,min2:integer;

begin

write('Введите x=');

readln(x);

min1:=x;

write('Введите x=');

readln(x);

min2:=x ;

{min1<=min2}

repeat

if x<=min1 then

begin

min2:=min1;

min1:=x;

end

else

if (min1<x) and (x<min2) then min2:=x;

write('Введите x=');

readln(x);

until (x=0);

writeln( 'Два наименьших числа равны', min1, 'и', min2);

end.