Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Правила записи оператора IF




END.

Пояснение: В программе 5 операторов, последний – WriteLn (y). Поскольку эти 5 операторов выполняются по порядку, то он выполнится обязательно.

 

Задача 2. В компьютер вводятся два произвольных положительных числа - длины сторон двух кубиков. Компьютер должен подсчитать объем одного кубика - большего по размеру.

Обозначим a1 - сторону одного кубика, a2 - сторону другого, bol - сторону большего кубика, V - объем кубика. Приведем три варианта программы:

 

ВАРИАНТ 1   VAR a1,a2: Real; BEGIN ReadLn (a1,a2); ifa1>a2 then WriteLn (a1*a1*a1: 15:5) else WriteLn (a2*a2*a2: 15:5) END.
ВАРИАНТ 2   VAR a1,a2,V: Real; BEGIN ReadLn (a1,a2); if a1>a2 thenV:=a1*a1*a1 else V:=a2*a2*a2; WriteLn (V: 15:5) END.
ВАРИАНТ 3   VAR a1,a2,bol,V: Real; BEGIN ReadLn (a1,a2); if a1>a2 then bol:=a1 else bol:=a2; V:=bol*bol*bol; WriteLn (V: 15:5) END.

 

Поясним последний вариант. Программа состоит из четырех операторов, которые выполняются в порядке записи. Первым после запуска выполняется оператор ReadLn (a1,a2), который ждет от нас ввода двух чисел. Пусть мы сегодня ввели числа 3 и 2. Компьютер понимает, что a1 равно 3, a2 равно 2, и переходит к выполнению оператора if. Он видит, что 3>2, и поэтому выполняет оператор bol:=a1, а оператор bol:=a2 не выполняет. В результате в ячейке bol оказывается число 3. Затем компьютер переходит к следующему оператору - V:=bol*bol*bol и вычисляет V=3*3*3=27. Следующий оператор WriteLn (V: 15:5) печатает число 27.00000.

Если завтра мы запустим эту же программу и введем числа 6 и 10, то компьютер увидит, что утверждение 6>10 ложно, и поэтому выполнит оператор bol:=a2, а оператор bol:=a1 выполнять не станет. В результате в ячейке bol окажется число 10 и будет напечатано число 1000. 00000.

 

А теперь, дорогой читатель, вам пришла пора освоить пошаговый режим выполнения программы на компьютере. В обычном режиме компьютер выполняет программу настолько быстро, что вы не успеваете заметить, в каком порядке он выполняет отдельные операторы программы, а без этого часто невозможно понять ее логику. Пошаговый режим заставляет компьютер при выполнении программы задерживаться на каждой строке программы столько, сколько нужно человеку. Сейчас вам необходимо проделать то, что сказано в части IV в пункте «Пошаговый режим» параграфа «Исправление ошибок. Отладка программы».

 

Итак, если паровая машина избавила человека от тяжелого физического труда, то оператор if избавил человека от тяжелого умственного труда, в нашем случае - от необходимости решать, какое из двух чисел больше другого.

Оператор if можно записывать и без части else. Например, if s<t then w:=a+1. Это означает, что если s<t, то нужно выполнить оператор w:=a+1, в противном случае ничего не делать, а просто перейти к следующему оператору.

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

Вот как будет выглядеть наша программа-"цензор":

VAR Slovo: String;
BEGIN
ReadLn (Slovo); { переменная Slovo будет иметь значением строку символов, введенных с клавиатуры }
if Slovo = 'колхозник' then Slovo:= 'фермер';
WriteLn (Slovo)
END.

 

 

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

Пока мы не готовы воспринять полный синтаксис оператора 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 then s:=20 - в ячейке b будет храниться 6, а не 7. То же относится и к выражениям из оператора WriteLn. Например: b:=6; WriteLn (b+1). И здесь тоже в ячейке b останется храниться 6, а не 7. И вообще, информация в ячейках памяти не меняется при вычислении выражений.

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

ФРАГМЕНТ ПРОГРАММЫ ЧТО НА ЭКРАНЕ
a:=10; if a>2 then WriteLn ('!!!') else WriteLn ('!') !!!
a:=4; if a>5 then a:=a+10 else a:=a-1; WriteLn (a)  
s:=6; if s-8<0 then s:=s+10; WriteLn (s)  
s:=6; if s<0 then s:=s+10; s:=s+1; WriteLn (s)  

Пояснение: Обратите внимание, что в последнем примере оператор 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; WriteLn (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. Дракон каждый год отращивает по три головы, но после того, как ему исполнится 100 лет - только по две. Сколько голов и глаз у дракона, которому N лет?




Поделиться с друзьями:


Дата добавления: 2014-12-27; Просмотров: 1171; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.011 сек.