Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Тurbo Pascal 7+.doc
Скачиваний:
12
Добавлен:
24.12.2018
Размер:
10.09 Mб
Скачать

5.2. Правила записи оператора if

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

Пока мы не готовы воспринять полный синтаксис оператора if (вы найдете его в разделе 14.8), однако уже сейчас нам хотелось бы писать без ошибок. Для этого будем использовать сокращенный синтаксис. Поясним его в виде синтаксической схемы:

IF условие THEN оператор ELSE оператор

Как понимать эту схему? Ее следует понимать как образец записи оператора, указывающий порядок, в котором оператор записывается из отдельных слов. Слова, которые записаны в схеме полужирными заглавными буквами, при записи оператора просто копируются. Вместо слов, которые в схеме записаны строчными бу­квами, нужно при записи оператора подставить то, что они означа­ют. Поясним, что обозначают эти слова.

Оператор - любой оператор Паскаля.

Условие. Пока под условием будем понимать два арифметических выражения, соединенных знаком сравнения, или условие равенства или неравенства строк, как это показано на примере из раздела 5.1

Выражение. Что такое выражение, было пояснено в разделе 4.9.

Знак сравнения. Знаков сравнения шесть:

> больше, >= больше или равно, = равно,

< меньше, <= меньше или равно, <> не равно.

Пример:

if 5*a+4<=a*b then WriteLn (b) else a:=b+5

Здесь

WriteLn (b) - один оператор,

a:=b+5 - другой оператор,

5*a+4 <= a*b - условие,

5*a+4 - одно выражение,

a*b - другое выражение,

<= - знак сравнения.

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

перед ELSE точку с запятой ставить запрещено.

В разделе 5.1 вы уже видели, что оператор if можно записывать в краткой форме:

IF условие THEN оператор

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

IF условие THEN оператор [ ELSE оператор ]

Квадратные скобки здесь означают, что в операторе их содержи­мое можно писать, а можно и не писать.

Полезное замечание. Вычисляя выражения, стоящие в условии оператора if, Паскаль не записывает их значения в память. На­пример, после выполнения фрагмента b:=6;if b+1>0 thens:=20 в ячейке b будет храниться 6, а не 7. То же относится и к выражениям из оператора WriteLn. Например: b:=6; Writel_n(b+1). И здесь в ячейке b останется храниться 6, а не 7. И вообще, информация в ячейках памяти не меняется при вычислении выражений.

Примеры работы оператора if:

Фрагмент программы

Что на экране

а:=10; if a>2 then WriteLn ('!!!') else WriteLn ('!')

!!!

a:=4; if a>5 then a:=a+10 else a:=a-1; WriteLn (a)

3

s:=6; if s-8<0 then s:=s+10; WriteLn (s)

16

s:=6; if s<0 then s:=s+10;s:=s+1; WriteLn (s),

7

Пояснение. Обратите внимание, что в последнем примере опера­тор if кончается оператором s:=s+10, а не s:=s+1. Поэтому оператор s:=s+1 будет выполняться всегда, независимо от величины s.

Задания 18-20

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

18.

k:=20; k:=k+10; if k+10<>30 then k:=8 else k:=k-1; WnteLn(k)

19.

k:=20; k:=k+10; if k+10 = 30 then k:=8 else k:=k-1; WriteLn(k)

20.

p:=1; if p>0 then p:=p+5; Write(p); if p>10 then p:=p+1; Write(p)

Задания 21-23

21. В компьютер вводятся два числа. Если первое больше второго, то вычислить их сумму, иначе - произведение. После этого компьютер должен напечатать текст ЗАДАЧА РЕШЕНА.

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

Указание. Для этого его длина должна быть меньше суммы длин двух других отрезков.

Замечание. Пока не думайте о том, что слишком длинными могут быть второй или третий отрезок. Об этом - задание из раздела 5.5.

23. Дракон каждый год отращивает по 3 головы, но после того, как ему исполнится 100 лет, - только по 2. Сколько голов и глаз у дракона, которому N лет?