книги / Основы алгоритмизации и программирования на языке Паскаль
..pdfЛекция 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;