ТОР 5 статей: Методические подходы к анализу финансового состояния предприятия Проблема периодизации русской литературы ХХ века. Краткая характеристика второй половины ХХ века Характеристика шлифовальных кругов и ее маркировка Служебные части речи. Предлог. Союз. Частицы КАТЕГОРИИ:
|
Правила записи оператора IF
У каждого человеческого языка есть своя грамматика, включающая в себя правила, по которым должны выстраиваться в цепочку элементы языка, чтобы получилось правильное предложение. Совокупность этих правил образует часть грамматики, называемую синтаксисом. В языках программирования тоже есть предложения. Такими предложениями здесь являются операторы. Следовательно, у языков программирования тоже должен быть свой синтаксис, который описывает правила, по которым записываются операторы языка и из операторов составляется программа. После того, как человек запускает программу на выполнение, любая порядочная среда программирования прежде, чем действительно выполнять ее, сначала проверит, нет ли в ней синтаксических ошибок, и если есть, то программу выполнять не будет, а выдаст сообщение, указывающее человеку, в чем ошибка. Пока мы не готовы воспринять полный синтаксис оператора ifПаскаля (вы найдете его в 14.8), однако уже сейчас нам хотелось бы писать без ошибок. Для этого, скрепя сердце, будем использовать сокращенный синтаксис. Поясним его в виде синтаксической схемы: IF условие THEN оператор ELSE оператор Как понимать эту схему? Ее следует понимать, как образец, шаблон записи оператора, указывающий порядок, в котором оператор записывается из отдельных слов. Слова, которые в схеме я записал жирными заглавными буквами, при записи оператора просто копируются. Вместо слов, которые в схеме записаны строчными буквами, нужно при записи оператора подставить то, что они означают. Поясним, что обозначают эти слова.
Пример: 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:
Пояснение: Обратите внимание, что в последнем примере оператор 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 лет? Составной оператор Вот фрагмент программы, которая складывает два числа: WriteLn ('Введите два числа'); Вот фрагмент программы, которая возводит число в квадрат: WriteLn ('Введите число'); Пусть мы хотим сделать программу, которая бы по желанию пользователя или складывала два числа, или возводила одно число в квадрат, то есть выполняла или первый или второй фрагмент. Начинаться наша программа могла бы примерно так: VAR Otvet: String;..... BEGIN WriteLn ('Чем займемся – сложением или возведением в квадрат?'); ReadLn (Otvet); if Otvet = 'сложением' then.... else.... Здесь после then мы должны бы вставить первый фрагмент, а после else второй. Однако, тут возникает проблема. Каждый из фрагментов состоит из нескольких операторов, а синтаксис оператора if разрешает ставить после then и else только по одному оператору. Чтобы преодолеть эту трудность, в Паскале есть средство превратить последовательность записанных друг за другом операторов формально в один оператор. Для этого последовательность заключается между словами begin и end и получившаяся конструкция называется составным оператором. Вот первый фрагмент в виде составного оператора: begin Компьютер выполняет составной оператор неотличимо от последовательности операторов, из которых он состоит, однако титул составного оператора позволяет ему считаться одним оператором и поэтому быть вхожим в те места программы, в которые разрешен вход только единичным операторам, а не их последовательностям, как, например, имеет место в нашем случае с оператором if. Вот какая получится программа для нашей задачи: VAR Otvet:String; a,b:Integer; BEGIN WriteLn ('Чем займемся - сложением или возведением в квадрат?'); ReadLn (Otvet); if Otvet = 'сложением' Then begin WriteLn ('Введите два числа'); ReadLn (a,b); WriteLn ('Сумма равна ',a+b) End Else begin WriteLn ('Введите число'); ReadLn (a); WriteLn ('Квадрат числа равен ',a*a) end; WriteLn ('Счет завершен') END. У нашей программы есть недостаток. Если при ответе на вопрос компьютера мы чуть-чуть ошибемся, например, ответим не "сложением", а "сложение", компьютер будет выполнять возведение в квадрат, так как в условии оператора if сравниваемые строки должны совпадать полностью. Научившись выполнять операции над строками, вы научитесь избегать таких ситуаций. Задание 24: Видоизменить диалог с компьютером, начатый в 4.15. Пусть компьютер, узнав возраст человека, дальнейшую беседу ведет по двум вариантам. Если возраст больше 17, то компьютер должен задать вопрос: "В каком институте ты учишься?" и получив ответ, глубокомысленно заметить "Хороший институт". Если же возраст меньше или равен 17, то соответственно - "В какой школе ты учишься?" и "Неплохая школа". После этого, каков бы ни был вариант, компьютер должен попрощаться: "До следующей встречи!". Не нашли, что искали? Воспользуйтесь поиском:
|