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

Основы алгоритмизации и программирования на языке Паскаль

..pdf
Скачиваний:
11
Добавлен:
15.11.2022
Размер:
2.96 Mб
Скачать

Лекция 4

Организация разветвляю щ ихся конструкций

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

Даже небольшая программа предполагает использова­ ние условных конструкций, которые предназначены для выбора к исполнению одного из возможных действий (группы операторов) в зависимости от выполнения неко­ торого условия. Такой алгоритм называется разветвляю­ щимся. К условным конструкциям относятся операторы: I f

Then ... Else, GoTo, Case. В качестве условий выбора используется значение логического выражения, поэтому начнем с того, что приведем краткую справку о данных логического типа.

4.1. Данные логического типа - Boolean

Математическая логика, или булева алгебра - это раздел математики, который разработал английский мате­ матик Джордж Буль в середине XIX века. Основу матема­ тической логики составляет высказывание (условие).

Высказывание (условие) - это любое утверждение, в отношении которого можно однозначно сказать, истинно оно или ложно (True/False).

Например:

 

Луна - спутник Земли

«Истина» (Т)

1=0

«Ложь» (F)

Значения этих высказываний однозначно определены и являются логическими (булевскими) константами, они принимают значения соответственно True и False.

Рассмотрим высказывание (условие) х < 0, которое может быть истинным или ложным в зависимости от знака х. Таким образом, значение этого условия является логиче­ ской (булевской) переменной.

В Паскале определены две логические (булевские) константы «Истина» и «Ложь» (T/F), которым соот­ ветствуют 1 и 0. Логическая (булевская) переменная может принимать одно из этих двух значений.

При описании переменных логического типа исполь­ зуют зарезервированное слово Boolean.

Формат описания:

Var <имя>: Boolean;

Данные логического типа занимают в памяти машины 1 байт и используются при проверке некоторых высказы­ ваний (условий).

Для сравнения данных предусмотрены операции от­ ношений: <, >, <=, >=, =. Операции отношения сравнивают значения двух операндов и определяют, истинно или лож­ но (T/F) отношение между ними.

Например: Условия у > 2х - 5,6 и а + b < = с содержат операции отношений и являются выражениями отноше­ ний. Выражение отношений определяет истинность или ложность результата (T/F).

Простые отношения можно объединять в составные (сложные) отношения с помощью логических операций:

-Not (не) - отрицание;

-A n d (и) - логическое умножение (конъюнкция);

-Or (или) - логическое сложение (дизъюнкция). Операции перечислены в порядке убывания приоритетов. Пусть А и В некоторые высказывания (условия), т.е.

логические операнды.

Операция отношения Or: A or В.

Операция Or дает истинный результат (Т), если хотя бы один из операндов А или В имеет истинное значение.

Операция отношения And: A And В.

Операция And дает истинный результат (Т), если оба операнда А и В имеют истинное значение.

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

Например:

 

 

Математическое

Логическое высказывание

неравенство

(условие)

1 —х —5

(1 <=х)

and (х >= 5)

х< -3 , х > 5

(х <-3)

or (х > 5)

4.2. Разветвляющийся алгоритм

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

4.2.1. условны й оператор I f

Условный оператор I f позволяет выбирать одно из двух возможных действий (операторов).

Формат оператора:

I f <условие> then <оператор 1> else <оператор 2>;

где If - имя оператора; Then, Else - зарезервированные слова; условие - любое выражение логического типа, при­ нимающее значение T\F (1\0); оператор 1 и оператор 2 - любые операторы Паскаля (простые или сложные).

Работа оператора:

Вначале вычисляется булевское выражение <условие>. Далее возможны два варианта:

1. Если <условие>= Истина (Т), то управление переда­ ется на <оператор 1>; а <оператор 2> пропускается.

2. Если <условие>=Ложь (F), то управление передает­ ся на <оператор 2>; а <оператор 1> пропускается.

Допускается короткий формат оператора I f (без Else): I f <условие> Then <оператор >;

Работа оператора:

1. Если <условие>=Истина (Т), то управление переда­ ется на <оператор>.

2. Если <условие>=Ложь (F), то управление передает­ ся на оператор, следующий за оператором If.

Например: Проверьте себя. Что получится в результа­ те выполнения следующего фрагмента программы?

Л:-2; В:=8; С:=0;

 

I f А>В Then С:=А+В;

 

С:=1;

Результат: С= 1

WriteLn (‘с=’,С:2);

Пример 4.1. Для вводимого с пульта значения х вычис­ лить значение функции у, заданной выражением

V1 - х 2;

М < 1;

У = <

 

х < -1

^cosx;

X > 1 ,

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

Блок-схема и программа для этого примера мало чем отличаются от блок-схемы и программы примера 2.1. В этой блок-схеме появляется блок проверки условия (ло­ гический блок) - это ромб. Приведем лишь фрагмент этой программы:

I f Abs(x)<=l Then у := sqrt(l-sqr(x))

Else у := Cos(x);

^

(4.1)

\ х 2 + у 2 < R2

Если точка М(х,у) € D, то ее координаты (х, у) должны удовлетворять системе неравенств (4.1). Запишем про­ грамму для R=1.

Program Demolf; Const R=l;

Ntxt=’mo4Ka не принадлежит области Ytxt=’точка принадлежит области*;

Var х, у: real;

Txt: string [30];

Begin

Writeln(‘eeedume x, y: ’); Readln(x,y);

I f (y>=-x) and (x*x+y*y<=R*R) Then txt:=Ytxt Else txt:=Ntxt;

Writeln(x, y, txt);

End.

4.3. Оператор выбора Case

Оператор If позволяет сделать выбор только из двух альтернатив. Оператор Case позволяет сделать выбор из произвольного числа имеющихся вариантов.

Формат оператора:

Case <селектор> o f <константа 1>: <оператор 1 ;> <константа 2>: <оператор 2 ;>

<константа N > : <оператор N ;> else <оператор>

end;

где Case - имя оператора (Case - в случае, of - из); селек­ тор - переменная или выражение.

Работа оператора:

Если текущее значение селектора равно одной из кон­ стант, то выполняется оператор, соответствующий этой константе. Затем управление передается за пределы опера­ тора Case.

Если ни одна из констант не равна текущему значению се­ лектора, то выполняется <оператор>, стоящий за словом else.

Как и в случае оператора If возможна короткая форма оператора Case, т.е. без else.

Типы селектора и констант должны совпадать. В качестве типа может быть integer, boolean, char.

Например: Рассмотрим фрагмент программы, в кото­ ром селектор целочисленного типа

Case k o f

5: y:=SQR(x); 11: у:=х+к;

7:z:=a+b;

4:Writeln(a, х);

End;

Если селектор к = 5, то будет выполнено действие у = х2 и управление будет передано на конец оператора Case и т.д.

Переменная к должна быть объявлена как integer, пере­ менные х, а, в должны получить значения до оператора Case.

Пример 4.3. По вводимому с пульта номеру дня недели вывести на экран его название на русском языке.

Program D Case;

Var Day:integer;

Begin

Write((Beedume номер дня недели: ’);

Readln(Day);

определение значения селектора}

Case Day o f

 

1:Writeln (‘Понедельник’);

2:Writeln (‘Вторник’);

3:Writeln (‘Среда’);

4:Writeln (‘Четверг’);

5:Writeln (‘Пятница’);

6:Writeln (‘Суббота’);

Else

Writeln (‘Воскресенье’);

End;

End.

При выполнении этой программы на экран монитора выводится приглашение «Введите номер дня недели:». С клавиатуры считывается целочисленное значение дня не­ дели и присваивается переменной Day. Затем в зависимо­ сти от значения селектора Day на экран выводится соответ­ ствующее название дня недели. Например, если значение селектора Day=5, то реализуется оператор Writeln (‘Пятни­

ца’);. Если при вводе переменная Day получает значение 7 и ни одна из констант не равна этому значению селектора, то выполняется оператор, стоящий за словом else.

Подумайте, что произойдет, если вы по ошибке ввели

Day=8 или Day=0.

4.4. М етки и оператор безусловного перехода GoTo

Современная технология структурного программирова­ ния основана на принципе «программировать без Go То».

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

Формат оператора:

Go То <метка>;

где метка - произвольное имя (идентификатор).

Метка объявляется в разделе описания меток (Label) и может содержать цифровые и буквенные символы. Чаще всего это целое число из диапазона 1-9999.

Метка ставится перед оператором, отделяясь от него «:», и дает возможность ссылки на него.

Например:

• •

Label 10, 45;

GoTo 45; 10: А:=х+2.4;

45:Y:=x+21;