Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Инф и Инф технол / ЛЕКЦИЯ 5 Инф ЖД 2 сем

.doc
Скачиваний:
39
Добавлен:
10.04.2015
Размер:
47.1 Кб
Скачать

6

1 курс (ЭЖД)

ЛЕКЦИЯ 5

РАЗВЕТВЛЯЮЩАЯСЯ И ЦИКЛИЧЕСКАЯ АЛГОРИТМИЧЕСКАЯ СТРУКТУРА. ОПЕРАТОРЫ ВЕТВЛЕНИЯ И ЦИКЛА

2 семестр

5.1. Разветвляющаяся алгоритмическая структура

Разветвляющаяся алгоритмическая структура относится к основным алгоритмическим структурам (конструкциям) наряду с линейной и циклической.

Как и линейная, данная структура не является определяющей при программировании, то есть, как линейные, так и ветвящиеся задачи в чистом виде решать на ЭВМ смысла нет. Они могут входить как подструктуры при решении больших и сложных задач, включающих линейные и ветвящиеся фрагменты. Подобные задачи имеет смысл решать максимум на программируемом калькуляторе.

Примером ветвящейся программы может служить программа для решения квадратного уравнения.

PROGRAM Quattro;

//Решение квадратного уравнения

VAR

a,b,c,d,x1,x2:Real;

BEGIN

Readln(a,b,c);

d:=b*b-4*a*c;

IF d<0

THEN Writeln('Уравнение не имеет действительных корней')

ELSE

BEGIN

x1:=(-b-Sqrt(d))/(2*a);

x2:=-b/a-x1;

Writeln(x1.x2)

END

END.

5.2. Операторы ветвления языка Pascal

Ветвящийся процесс в Pascal-программах организуется главным образом оператором IF…THEN…ELSE, общий вид которого следующий:

IF <условие> THEN <оператор1> [ELSE <оператор2>].

Здесь <условие> представляет собой выражение типа Boolean, чаще всего являясь обычным числовым неравенством. Оно может принимать одно из двух возможных значений – True (истина) или False (ложь). Если <условие> принимает значение True, то будет выполняться <оператор1>, если <условие> принимает значение False, то будет выполняться <оператор2>. Квадратные скобки означают, что часть оператора, начинающаяся со служебного слова ELSE, может отсутствовать. Тогда если <условие> принимает значение False, то будет выполняться следующий за IF оператор.

Примеры.

IF x<>0

THEN y:=Exp(Ln(Abs(x))/3)*x/Abs(x)

ELSE y:=0;

IF (z>=0) AND (z<5) THEN s:=Arctan(z);

Первый пример реализует вычисление кубического корня из x. Если после служебных слов THEN или ELSE требуется выполнить более одного оператора, применяется составной оператор BEGIN…END. Пример применения такой конструкции приведен в программе "Решение квадратного уравнения".

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

CASE <> OF

<список диапазонов 1>:<оператор 1>;

<список диапазонов 2>:<оператор 2>;

……..;

<список диапазонов n>:<оператор n>

[ELSE

<оператор n+1>]

END

Диапазон – это ограниченный тип, например: 1..10. При записи ограниченного типа нижняя граница должна быть меньше или равна верхней; оба эти значения должны быть константами дискретного типа или константными выражениями также дискретного типа. Диапазон может содержать единственный элемент (например, целое число). Элементы списков отделяются друг от друга запятой. Они не должны пересекаться. Например, если в каждом списке по одному числу, то все числа должны быть разные. Часть оператора, заключенная в квадратные скобки (то есть ELSE и оператор, следующий за ним), может отсутствовать.

Пример.

LABEL 1;

VAR

k:Integer;

s:STRING;

BEGIN

1:Write(' k = ');Readln(k);

CASE k OF

1..5:s:='Рабочий день';

6,7:s:='Выходной день'

ELSE

BEGIN

Writeln('Введите число от 1 до 7!');

GOTO 1

END

END;

Writeln(s)

END.

Программа выполняется следующим образом. Вводится любое целое число в пределах от 1 до 7 включительно; в этом случае программа выведет одно из двух сообщений: "Рабочий день" для чисел от 1 до 5 и "Выходной день" для чисел 6 и 7. Если будет введено число меньшее 1 или большее 7, то программа выведет напоминание о том, что необходимо ввести число от 1 до 7, после чего предложит ввести число заново.

5.3. Циклическая алгоритмическая структура

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

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

К сказанному ранее следует добавить, что существует еще один подход к описанию циклического алгоритма в виде блок-схемы:

Такие конструкции используются, главным образом, для описания цикла, подобного оператору цикла с параметром (такой оператор имеется практически в каждом процедурном языке программирования). В заголовке обычно указывается сам параметр цикла, его начальное, конечное значение и шаг (если он не равен единице). Например:

или

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

5.4. Операторы цикла языка Pascal

Операторы цикла предназначены для организации повторяющихся действий. Примеры:

FOR k:=0 TO 20 DO s:=s+k/(k*k+1);

FOR i:=k+10 DOWNTO 0 DO i:=i-1;

WHILE x<=b DO

BEGIN y:=Sin(2*x)+Sqr(Cos(x/2));x:=x+h;END;

REPEAT

y:=Sin(2*x)+Sqr(Cos(x/2));x:=x+h

UNTIL x>b;

В первом и втором примере приведен оператор цикла с параметром, у которого параметр задан по нарастанию (шаг изменения равен 1). Во втором – также оператор цикла с параметром, у которого параметр задан по убыванию (шаг изменения равен –1).

Общий вид оператора цикла с параметром:

FOR <переменная>:=<выражение1> TO <выражение2> DO <оператор>

или

FOR <переменная>:=<выражение1> DOWNTO <выражение2> DO <оператор>.

Часть оператора, имеющая вид <выражение1> TO <выражение2> или <выражение1> DOWNTO <выражение2>, называется диапазоном. Тогда оператор цикла с параметром может быть переписан в следующем общем виде:

FOR <переменная>:=<диапазон> DO <оператор>

Параметр цикла, а вместе с ним его начальное и конечное значения, в общем случае могут иметь любой из дискретных типов (то есть целый, символьный или булевский). Если величина начального значения параметра цикла (<выражение1>) больше конечного (<выражение2>), то есть параметр цикла задается по убыванию, а диапазон записан со служебным словом TO, то оператор тела цикла не выполнится ни разу. Тоже самое произойдет, если параметр цикла задан по нарастанию, а диапазон записан со служебным словом DOWNTO.

В третьем примере (оператор цикла с предусловием) тело цикла, представляющее собой составной оператор, будет выполняться (повторяться), пока значение выражения x<=b остается равным True. В общем случае оператор цикла с предусловием имеет вид:

WHILE <условие> DO <оператор>.

Тело цикла WHILE, как и в случае оператора цикла с параметром, вообще говоря, состоит из единственного оператора, стоящего после служебного слова DO. Чтобы выполнить более одного оператора, необходимо применить составной оператор BEGIN … END.

В последнем примере (в котором приведен оператор цикла с постусловием) наоборот, операторы тела цикла будут выполняться, пока значение выражения x>b остается равным False. Общий вид оператора цикла с постусловием следующий:

REPEAT [<оператор1>;<оператор2>;…;<оператор N>] UNTIL <условие>.

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