Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Metodichka_po_informatike.pdf
Скачиваний:
162
Добавлен:
13.02.2015
Размер:
1.67 Mб
Скачать

28.

Y =

p 2 x5

 

+ ae x

+ ln | x3 + a 2 |

;

z = log 5 | 2,5x3 + y | +ea3

;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ax

 

+ 0,5 ×10-3

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

a + x

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

a = 0,5;

x = 5.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

+

x3 (b - 2)

 

; y2 =

 

 

 

 

 

 

 

+ y

 

29.

Y =

 

15,1×10-2 x +

a

 

 

 

* y2

 

 

x +

a

 

 

 

 

 

 

 

 

 

 

ea

b

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

b

 

 

 

 

 

 

 

 

 

 

 

 

 

 

A =

x5 ×5

 

 

;

 

 

 

30.

ax3 + 2

b = sin 2 / 3 (ax);

a = 0,5; x = 0,8.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2 + lg 5

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Тема 4. Программирование разветвляющихся процессов

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

4.1.Методические указания

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

называется алгоритмом с разветвляющейся структурой. Каж-

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

35

 

 

 

 

 

Начало

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1 Общий линейный

 

 

 

 

 

 

 

 

участок 1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

False (нет)

 

 

 

True (да)

 

Условие

 

 

 

2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

3

1-я ветвь

 

 

 

4

 

2-я ветвь

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

5 Общий линейный участок 2

Конец

Рис. 4.1

1 этап – выполнение операторов, общих для всех ветвей программы (блок 1);

2 этап – принятие решений (логический блок 2), проверяется некоторое логическое условие и в зависимости от его значения FALSE (Ложь) или TRUE (Истина) осуществляется выбор одной из ветвей программы;

3 этап – реализация одного из выбранных путей решения задачи (блок 3 или 4), которые в свою очередь могут содержать ветвления (сложный разветвляющийся процесс);

4 этап – независимо от пути решения задачи осуществляется возвращение к общему линейному участку 2 (блок 5).

С учётом названных особенностей алгоритм вычисления действительных корней уравненияax2 + bx + c = 0 имеет вид

(рис. 4.2).

36

ìНачало

ï

О бщий

ï

 

1

Ввод a, b,c

 

линейный

ï

 

 

 

í

 

 

 

 

 

 

уч асток 1

ï

 

 

 

 

 

 

 

ï

 

 

 

 

 

 

 

2

 

d:=b

2

- 4ac

Т очка ветвления

 

ï

 

 

 

 

î

 

 

 

 

 

 

 

 

 

 

 

False (нет)

 

T rue (да)

 

ì

 

 

 

 

 

 

 

 

3

d<0

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

4

X1: =

- b +

 

d

 

 

 

 

 

6 Вывод

 

 

 

 

2a

 

 

 

 

 

 

 

 

"Действ.

 

ï

 

X 2: =

- b -

 

 

 

 

 

 

 

корней

 

 

 

 

d

 

 

Ветвь

 

 

 

 

 

 

 

 

 

 

 

нет"

í

 

 

 

 

2a

 

 

"Нет"

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ï

 

5 Вывод

 

 

 

 

 

 

 

 

 

 

 

 

 

"Действ.

 

 

 

 

 

î

 

кор ни";

 

 

 

 

 

 

X1,X2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ì

 

 

 

 

 

 

 

 

Т очка слияния

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Общий

 

 

 

 

 

 

7 Вывод

 

 

 

ï

 

 

 

 

 

 

"Дискри-

 

 

 

линейный ïï

 

 

 

участок 2

í

 

 

 

 

 

 

минант";d

 

 

 

 

 

 

 

ï

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ï

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ï

 

 

 

 

 

 

Конец

 

 

 

 

 

 

 

î

 

 

 

 

 

 

ü

ï

ï

ý

ï

ï

þ

Ветвь "Да"

Рис. 4.2

Переходы от одного блока к другому называютсяусловными, если они осуществляются только при выполнении некоторого условия. В рассмотренном алгоритме – это переходы от блока 3 к блокам 4 и 6. После выполнения всех действий в любой из ветвей осуществляется переход к блоку 7. Этот переход называется безусловным. Для реализации различных переходов в программе используются специальные операторы передачи управления: оператор безусловного перехода GOTO, условный оператор IF и оператор отбора CASE.

37

4.2. Условный оператор и составной оператор

Условный оператор позволяет выбрать и выполнить один из двух входящих в него операторов в зависимости от значения логического выражения. Его синтаксическая запись:

IF <логическое выражение>

THEN <оператор 1> [ELSE <оператор 2>];

в которой IF…THEN…ELSE – зарезервированные слова языка, означающие соответственно ЕСЛИ…ТО…ИНАЧЕ, квадратные скобки означают, что часть ELSE <оператор 2> может отсутствовать. Условный оператор может быть записан в одну строку, однако рекомендуется придерживаться требований структурированной записи программы.

Если логическое выражение принимает значениеИСТИНА (TRUE), то выполняется оператор 1, если же оно принимает значение ЛОЖЬ (FALSE), то выполняется оператор 2. В любом случае далее выполняется оператор, стоящий в программе за условием.

Например, оператор, вычисляющий Y = X, будет иметь следующий вид:

IF X>=0 THEN Y:=X ELSE Y:= -X;

Условный оператор может не иметь конструкцииELSE, тогда он называется сокращённым условным оператором. Если логическое выражение принимает значение ЛОЖЬ (FALSE), сразу выполняется оператор, следующий за условием.

Например, оператор

IF X<0

THEN X:= -X;

обеспечивает инвертирование значения переменнойХ, если оно отрицательно, и оставляет его без изменения в противном случае.

Рассмотрим подробнее составные части условного операто-

ра.

Логическим выражением (булевым) называется выраже-

ние, имеющее значение типа BOOLEAN, т.е. TRUE или FALSE.

38

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

ипобитовых операций.

Вязыке Pascal допустимы следующие операции отношения:

<, <=, =, >, >=, <>.

Отношение принимает значениеTRUE, если оно справедливо для входящих в него операндов иFALSE в противном случае. Например, 10>7 имеет значение истина, а 5<=0 – ложь.

Переменные, которые в программе принимают значение логического выражения, должны быть описаны в разделе описания переменных как имеющие типBOOLEAN. Например, переменные А и В, описанные как

VAR A, B: BOOLEAN;

считаются в программе логическими (т.е. принимают значе-

ния TRUE и FALSE).

Над множеством логических переменных определены следующие логические операции:

AND – логическое умножение (И);

OR – логическое сложение (ИЛИ);

NOT – логическое отрицание (НЕ). Их действия показаны в таблице 1:

Таблица 1. Таблица истинности

A

B

NOT A

A AND B

A OR B

0 (False)

0 (False)

1 (True)

0 (False)

0 (False)

0 (False)

1 (True)

1 (True)

0 (False)

1 (True)

1 (True)

0 (False)

0 (False)

0 (False)

1 (True)

1 (True)

1 (True)

0 (False)

1 (True)

1 (True)

По сравнению с операторами отношения логические операции имеют меньший приоритет.

В процессе вычислений соблюдается следующая очерёдность в выполнении этих операций:

1.Выражения, заключённые в скобки;

2.Логическое отрицание NOT;

3.Логическое умножение AND;

4.Логическое сложение OR, XOR.

39

Операции, имеющие одинаковый приоритет, вычисляются

слева направо.

 

 

 

 

 

Например, логическое выражение

 

 

1

6

4

2

5

3

(-9>=5) OR NOT (11<30) AND (0<=7)

имеет значение FALSE.

Цифрами

сверху

показан порядок вы-

полнения операций.

 

 

 

 

 

Полный условный оператор в общем случае в своей записи после THEN и ELSE может использовать любой оператор языка PASCAL. Однако часто возникает необходимость вставить в ка- кую-либо ветвь не один, а группу операторов. В этом случае пользуются так называемым составным оператором.

Составной оператор – это заключённая между зарезервированными словами BEGIN и END последовательность операторов, отделённых друг от друга символом’;’(точкой с запятой):

BEGIN

Оператор 1; Оператор 2;

Оператор N; END;

В свою очередь любой из операторов, входящих в составной, тоже может быть составным. Зарезервированные слова BEGIN и END называются в этом случае операторными скобками. Турбо Паскаль допускает произвольную глубину их вложенности.

Приведём программу: вычисление действительных корней квадратного уравнения ax2 + bx + c = 0, в соответствии с алгоритмом рис. 4.2.

Program SQEQ;

Var

A, B, C, D, X1, X2: Real;

Begin

WriteLn (‘Введите А, В, С’);

ReadLn (A);

ReadLn (B);

40

ReadLn (C);

D:=Sqr (B) – 4 * A * C; If D<0 then

WriteLn (‘Действительных корней нет’) else begin

X1:=(–B + Sqrt (D)) / (2 * A);

X2:=(–B – Sqrt (D)) / (2 * A);

WriteLn (‘Действительный корень Х1=‘, X1:3:1); WriteLn (‘Действительный корень Х2=‘, X2:3:1); End;

WriteLn (‘Дискриминант D=‘, D:3:1)

End.

Результаты выполнения программы

Введите A, B, C 2 5 2

Действительный корень X1 = - 0.5 Действительный корень X2 = - 2.0 Дискриминант D = 9.0

Структура выбора может входить составной частью в одну из ветвей другой структуры выбора. В этом случае имеет место сложное ветвление. Например, даны две переменные a и b. Если a=b, то вывести на печать значения этих переменных без изменения. Если a<b, значения переменных уменьшить в3 раза. Если a>b, то значения переменных увеличить на6. Алгоритм и программа имеют следующий вид (см. рис. 4.3):

41

 

Начало

 

1

Ввод

 

 

a, b

 

False (нет)

T rue (да)

2

a< >b

 

 

False (нет)

a < b

 

3

5

a:= a + 6

 

 

b:= b + 6

 

6

Вывод

 

 

a, b

 

Конец

Рис. 4.3

T rue (да)

4a:= a / 3 b:= b / 3

Program AANOB; Var

A, B: Real; Begin

WriteLn (‘Введите A, B’); Read (A, B);

If A<>B then

If A<B then begin A := A / 3;

B := B / 3; End

else begin

A := A + 6;

B := B + 6; End;

WriteLn (‘A=’, A:2:1,’B=’, B:2:1)

End.

42

Результаты выполнения программы

Введите A, B 4 2

A = 10.0 B = 8.0

В ветви THEN внешнего разветвления содержится ещё один оператор. Конструкция ELSE во внешнем ветвлении отсутствует. Ветвь ELSE относится к ближайшемуIF, не имеющему ELSE. Структурированный вид программы предполагает написание соответствующих IF…THEN…ELSE друг под другом. Операторы, ограниченные операторными скобками BEGIN … END, записывают также друг под другом и следуют относительно BEGIN и END.

4.3. Оператор безусловного перехода GOTO и оператор

отбора CASE

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

ре GOTO.

Пример:

GOTO 1;

1: WRITE (‘ОПЕРАТОР С МЕТКОЙ’);

Метки, используемые в Turbo Pascal, могут быть двух типов:

-целым числом (в пределах от 0 до 9999);

-обычным идентификатором.

Все используемые метки должны быть описаны в разделе объявления меток, начинающемся зарезервированным словом LABEL, пример:

LABEL 1, 2, 3, A, B, X2;

Для того, чтобы пометить оператор, перед ним пишут метку, двоеточием отделяя её от оператора. Таким образом, можно пометить только один оператор. Следует иметь ввиду, что исполь-

43

зовать оператор GOTO нужно очень осторожно. Частое его применение приводит к затруднению понимания логики работы программы. При написании блок-схемы этот оператор отображается стрелкой перехода в нужную часть алгоритма.

Оператор отбора – обобщение условного оператора: он даёт возможность выполнить одно из нескольких действий. В зависимости от значений выражения(селектора отбора), относящихся к перечисляемому или ограниченному(но не вещественному) типу, этот оператор производит выбор из нескольких операторов.

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

CASE <селектор> OF C1 : <оператор 1>; C2 : <оператор 2>;

.....

CN : <оператор N>; [ELSE <оператор (N+1)>] END;

Вэтой структуре: CASE … OF … [ELSE …] END – заре-

зервированные слова языка PASCAL, которые можно перевести соответственно как ВЫБОР … ИЗ … [ИНАЧЕ …] КОНЕЦ;

C1, C2,…, CN – константы, с которыми сравнивается значение выражения "селектор";

оператор 1, оператор 2,…, оператор N – операторы, из ко-

торых выполняется тот, с константой которого совпадает значение выражения "селектор";

оператор (N+1) – оператор, который выполняется, если значение выражения "селектор" не совпадает ни с одной из констант

C1, …, CN.

Ветвь оператора ELSE является необязательной. Если она отсутствует и значение выражения"селектор" не совпадает ни с одной из перечисленных констант, то выполняется оператор, стоящий за END. В отличие от оператора IF перед словом ELSE точку с запятой можно ставить.

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

44

Case I of

0, 2, 4, 6, 8: WriteLn (‘Четная цифра’); 1, 3, 5, 7, 9: WriteLn (‘Нечетная цифра’); 10…100: WriteLn (‘Число от 10 до 100’);

else

WriteLn (‘Отрицательное число или больше 100’)

End;

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

Покупатель, имея 100 рублей, заплатил за покупку 23 рубля. Определить минимальное количество купюр в наборе, которое он получит в качестве сдачи. (Возможные купюры: 5 руб., 10 руб., 50 руб.).

Один из вариантов программы решения этой задачи выглядит так:

Вблоке 1 вводим имеющуюся сумму А и сумму за покупку B в рублях. Далее в блоке 2 находим оставшуюся сумму N и обнуляем счётчик купюр K. Затем проверяем в блоке 3 больше ли оставшееся сумма, чем 50 (руб.), если да, то селектору R присваиваем значение 2, и осуществляем переход в блок10, где оператор выбора передаёт управление блоку 11.

Внём из оставшейся суммыN вычитаем 50 (руб.) и в блоке 14 увеличиваем счётчик купюр на 1. После этого возвращаемся к блоку 3 и сравниваем оставшуюся сумму N с достоинством трёх купюр, т.о. процесс повторяется до тех пор, пока оставшаяся сумма не станет меньше 5 руб. (рис. 4.4)

45

 

Начало

 

 

 

 

1

Ввод A, B

 

 

 

 

 

 

 

 

 

2

N: = A - B

 

 

 

 

 

K: = 0

 

 

 

 

3

N ³ 50

Да

 

 

 

 

 

 

 

 

Нет

 

4

R: = 2

 

 

Да

 

 

 

5

N<50 и

 

 

 

 

 

 

 

N>=10

 

 

 

 

 

6

R: = 3

 

 

 

Нет

 

 

 

 

 

 

 

7

N<10 и

Да

 

 

 

 

 

 

 

N>=5

 

 

 

 

 

8

R: = 4

 

 

 

Нет

 

 

 

 

 

 

 

9

Вывод: К

 

10

Case R of

 

 

 

 

 

Конец

11

N:=N-50

13

N:=N-5

 

 

 

12

N:=N-10

 

 

 

 

14

K:= K+1

 

 

 

 

Рис. 4.4

 

 

Как результат вычислений печатаем значение счётчика ку-

пюр K.

 

 

 

 

 

Program MONEY;

 

 

 

{ Минимальное количество купюр в качестве сдачи }

Label 1, 7;

 

 

 

 

Var

 

 

 

 

 

A, B, N, K, R: Integer;

 

 

 

Begin

 

 

 

 

Write (‘Исходная сумма’); ReadLn (A);

 

 

Write (‘Потраченная сумма’); ReadLn (B);

 

N := A – B;

 

 

 

 

K := 0;

{ обнуление оставшейся суммы}

1: If N >= 50 then R := 2 else

 

 

46

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