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

Информатика

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

Паскаль, воспользовавшись логической операцией and (так как каждая сторона должна удовлетворять этому требованию):

tr:=(a>0) and (b>0) and (c>0) and (a<b+c)

and (b<a+c) and (c<a+b);

Таким образом, переменной tr будет присвоено значение true, если данное условие выполняется, и значение false в противном случае.

Для записи всего высказывания на языке Турбо-Паскаль объединим два условия, рассмотренных выше, с помощью операции and, так как условия должны выполняться одновременно:

vys:=rs and tr;

Таким образом, переменной tr будет присвоено значение true, если высказывание истинно, и значение false в противном случае.

Ниже представлен пример выполнения данного задания в системе Турбо-Паскаль:

Рассмотрим особенности данной программы.

Все переменные, соответствующие сторонам треугольника a, b, c, и переменные, в которых будут храниться результаты вычисления логических выражений (rs, tr, vys), объявлены в разделе описания переменных var.

Исполняемые операторы программы располагаются между служебными словами begin и end.

81

C помощью процедур write выводится подсказка пользователю о том, что необходимо ввести значения сторон треугольника a, b, c соответственно.

C помощью процедуры readln пользователю предлагается ввести значения переменных a, b, c соответственно. После ввода значения каждой из переменных необходимо нажать кла-

вишу Enter.

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

Затем выполняется вычисление логического выражения, предназначенного для проверки того, что введенные пользователем числа могут являться сторонами треугольника, и присваивание его значения переменной tr.

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

Для вывода значения высказывания используется стандартная процедура writeln.

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

вишу Enter.

Рассмотрим особенности выполнения программы для различных значений, вводимых пользователем.

Пусть пользователь ввел значения сторон a = 5, b = 6, c = 7. На экран было выведено значение false, так как такой треугольник с такими сторонами хоть и может существовать, но не является равнобедренным, поскольку значения всех сторонразличны:

82

Пусть пользователь ввел значения сторон a = 5, b = 5, c = 8. На экран было выведено значение true, так как такой треугольник действительно является равнобедренным, поскольку две его стороны равны:

Пусть пользователь ввел значения сторон a = 3, b = 3, c = 50. На экран было выведено значение false, так как, несмотря на то, что два первых числа равны, введенные числа не являются сторонами треугольника, так как не удовлетворяют условию, учтенному в переменной tr:

Вопросы для самоконтроля

1.Что называется высказыванием?

2.Какая логическая операция изменяет значение логической величины на противоположное?

3.Вкакомслучаерезультатомконъюнкцииявляется«истина»?

4.Вкакомслучаерезультатомдизъюнкцииявляется«истина»?

5.Какими служебными словами обозначаются логические значения в языке Турбо-Паскаль?

6.Что является идентификатором логического типа данных

вязыке Турбо-Паскаль?

7.Сколько байт занимают в памяти величины логического типа данных в языке Турбо-Паскаль?

8.Для чего предназначены операции отношения в языке Турбо-Паскаль?

9.В каких случаях логическая операция xor, используемая

вязыке Турбо-Паскаль, дает в результате значение «истина»?

83

10. Расположите логические операции, используемые в языке Турбо-Паскаль, в порядке убывания приоритета:

а) and; б) xor;

в) or;

г) not.

11.Что является результатом вычисления логического выражения в языке Турбо-Паскаль?

12.Что в логическом операторе присваивания, записанном на языке Турбо-Паскаль, расположено слева от знака присваивания, а что – справа?

13.Каким ключевым словом обозначают символьный тип данных в языке Турбо-Паскаль?

14.Сколько байт отводится под один символ?

15.Какие простые типы данных языка Турбо-Паскаль относятся к порядковым?

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

17.Чему равно значение выражения ord(false), записанного на языке Турбо-Паскаль?

18.Чему равно значение выражения pred(true), записанного на языке Турбо-Паскаль?

19.Чему равно значение выражения odd(4), записанного на языке Турбо-Паскаль?

Лабораторная работа № 5 ОПЕРАТОРЫ ВЕТВЛЕНИЯ

1. Цель работы

Научиться использовать операторы ветвления в программах на языке Турбо-Паскаль.

84

2.Краткие теоретические сведения

2.1.Базовые конструкции структурного программирования13

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

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

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

Цикл задает многократное выполнение оператора. Следование, ветвление и цикл называют базовыми конст-

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

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

2.2. Операторы ветвления14

Условный оператор if и оператор варианта case применяются для того, чтобы в зависимости от конкретных значений исходных данных обеспечить выполнение разных последовательностей операторов.

13Программирование на языке высокого уровня Паскаль. Лекция 2. Управляющие операторы языка [Электронный ресурс]. – URL: http://www.intuit.ru/ studies/courses/628/484/lecture/6260 (датаобращения: 22.08.2013).

14Там же.

85

Оператор if обеспечивает передачу управления на одну из двух ветвей вычислений, а оператор case – на одну из произвольного числа ветвей.

2.3. Условный оператор if15

Условный оператор if используется для разветвления процесса вычислений на два направления. Формат оператора:

if выражение then оператор_1 else оператор_2;

Словесно алгоритм, соответствующий условному оператору, можно записать следующим образом:

1)сначала вычисляется выражение логического типа (т.е. некоторое условие), следующее за ключевым словом if;

2)ссли это выражение имеет значение true, то выполняется первый оператор, т.е. оператор, следующий за ключевым словом then;

3)иначе, если это выражение имеет значение false, выполняется второй оператор, т.е. следующий за ключевым словом

else;

4) после этого управление передается на оператор, следующий за условным.

На рис. 1 представлена блок-схема алгоритма, соответствующего выполнению условного оператора.

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

15 Программирование на языке высокого уровня Паскаль. Лекция 2. Управляющие операторы языка [Электронный ресурс]. – URL: http://www.intuit.ru/ studies/courses/628/484/lecture/6260 (дата обращения: 22.08.2013).

Семакин И.Г., Шестаков А.П. Лекции по программированию: учебное пособие. – 2-е изд., доп. – Пермь: Изд-во Перм. ун-та, 1998. – 279 с.

86

Рис. 1. Блок-схема алгоритма, реализуемого условным оператором

Ветвь else в условном операторе может отсутствовать. Следует отметить, что отсутствие ключевых слов begin и end в ветви else компилятор как ошибку не распознает: выполнится только один оператор, следующий за ключевым словом else (в случае, если значение выражения в условном операторе равно false), а далее будет выполнен оператор, следующий за условным, вне зависимости от того, какое значение

приняло выражение в условном операторе. Рассмотрим примеры условных операторов.

Пример 1.

if x>5 then y:=10;

В данном примере отсутствует ветвь else. Такая конструкция называется пропуском оператора.

Оператор выполняется следующим образом:

1)сначала вычисляется значение логического выражения x>5;

2)если значение выражения x>5 равно true, то выполняется оператор y:=10, а уже затем будет выполняться некоторый оператор, следующий за условным;

3)если значение выражения x>5 равно false, то будет выполняться некоторый оператор, следующий за условным.

87

Например, если x = 7, то значением выражения x>5 будет true, и затем переменной y будет присвоенозначение 10.

Если же, к примеру, x = 4, то значением выражения x>5 будет false и, следовательно, начнет выполнение оператор, следующий за условным.

Пример 2.

if (a<b) and (с>=-7) then

a:=(a+c)/b else

begin b:=b*a; a:=-c

end;

Оператор выполняется следующим образом:

1) сначала вычисляется значение логического выражения

(a<b) and (с>=-7);

2) если значение данного выражения x>5 равно true, то выполняется оператор

a:=(a+c)/b

Обратите внимание, что после оператора, находящегося перед ключевым словом else, не ставится точка с запятой;

3) если значение выражения равно false, то будет выполняться составной оператор, обрамленный ключевыми словами

begin и end: begin

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

end;

Пример 3.

if a<b then

if a<c then min:=a else min:=c else

if b<c then min:=b else min:=c;

88

Вэтом примере вычисляется наименьшее из значений трех переменных a, b и с.

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

Сначала сравниваются между собой переменные a и b. В случае, если a меньше, чем b, происходит сравнение переменных a и c. Если переменная a оказалась меньше и переменной c, то она признается наименьшей и ее значение присваивается переменной min для дальнейшей работы. В противном случае наименьшей признаетсяпеременнаяc.

Если же переменная b в действительности меньше, чем a, то значение переменной b сравнивается со значением переменной c, и если переменная b оказалась меньше c, то она признается наименьшей. В противном случае наименьшей признается переменная c.

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

Пример 4 (с комментариями):

const eps = 1e-6;{Требуемая точность вычислений}

var x, y : real;

...

if (x = y) then

writeln('x и y равны'); {Ненадежно!}

if (abs(x – y) < eps) then

writeln('x и y равны'); {Рекомендуется}

89

2.4. Оператор варианта case 16

Оператор варианта (выбора) предназначен для разветвления процесса вычислений на несколько направлений. Формат оператора:

case выражение of константы_1 : оператор_1; константы_2 : оператор_2;

константы_n : оператор_n; else оператор;

end;

Алгоритм, соответствующий оператору case, можно словесно записать следующим образом:

1)выполнение оператора выбора начинается с вычисления выражения;

2)затем управление передается на оператор, помеченный константами, значение одной из которых совпало с результатом вычисления выражения;

3)после этого выполняется выход из оператора выбора;

4)если совпадения не произошло, выполняются операторы,

расположенные после слова else, а при его отсутствии управление передается оператору, следующему за case.

На рис. 2 приведена блок-схема алгоритма, реализуемого оператором case.

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

16 Программирование на языке высокого уровня Паскаль. Лекция 2. Управляющие операторы языка [Электронный ресурс]. – URL: http://www.intuit.ru/ studies/courses/628/484/lecture/6260 (дата обращения: 22.08.2013).

90