Н. Вирт - Программирование на языке Модула-2 (1160777), страница 5
Текст из файла (страница 5)
Стоитпоэтому запомнить ключевые слова, перечисление в следующем далее списке; их смысл будетобъяснен в последующих разделах.ANDELSIFLOOPREPEATARRAYENDMODRETURNBEGINEXITMODULESETBYEXPORTMOTTHENCASEFOROFTOCONSTFROMORTYPEPOINTERUNTILDEFINITION IFDIVIMPLEMENTATION PROCEDUREVARDOIMPORTQUALIFIEDWHILEELSEINRECORDWITHОперации и ограничители, составленные из специальных литер:+сложение, объединение множеств-вычитание, разность множеств*умножение, пересечение множеств/деление, симметрическая разность множеств:=присваивание& логическое И~ логическое НЕ= равно# <> не равно<меньше чем> больше чем<=меньше или равно>=больше или равно()круглые скобки[]индексные скобки{}скобки множества16(* *) скобки комментария^ операция разыменования,.;:.. | знаки пунктуацииПоследовательные лексемы принято разделять одним или несколькими пробелами.
Однаконеобходимо это только в тех случаях, когда отсутствие пробелов привело бы к слиянию двухлексем в одну. Например, во Фрагменте "IF х = у THEN" пробелы нужны перед х и после у, авокруг знака равенства они могут быть опущены.5. Комментарии могут быть вставлены между любыми двумя лексемами. Они являютсяпроизвольными последовательностями литер, заключенными в скобки для комментариев (* и *).Комментарии служат дополнительной информацией для человека и пропускаются компилятором.Они могут также служить для задания режимов работы компилятора.5. ОПЕРАТОРЫ И ВЫРАЖЕНИЯЯзыковая конструкция, задающая некоторое действие, называется оператором. Операторы могутистолковываться (исполняться), и это истолкование (исполнение) влечет за собой последствия,заключающиеся в том, что изменяется состояние вычислительного процесса, который задаетсясовокупным значением всех переменных программы.
Самое элементарное действие присваивания значения переменной. Присваивание имеет вид$Присваивание = Обозначение ":=" Выражение.исоответствующеепоследовательности:емудействие состоит из трех частей, выполняемых в такой1. Вычислить обозначение, определяющее некоторую переменную.2. Вычислить выражение, получив некоторое значение.3. Заменить значение переменной из п. 1 на значение выражения из п. 2.Простые примеры присваиванийi := 1x := y + zЗдесь i получает значение 1, х - значение суммы у и z, прежние значения теряются. Заметьте, чтоследующие пары операторов, выполняемые последовательно, дают разные результаты:i := i + 1; j := 2*1j := 2*i; i := i + 1Полагая начальное значение 1 равным 0, для первой пары получим i = 1, j = 2, в то время каквторая пара дает j = 0.
Если мы захотим обменять значения переменных i и j, топоследовательность операторовi := j; j := iне даст желаемого результата. Мы должны ввести вспомогательную переменную, скажем к, длясохранения значения и задать три последовательных присваиванияk := i; i := j; j := kВ общем случае выражение состоит из операндов и знаков операций. Его вычисление состоит изприменения к операндам операций в предписанном порядке, как правило, слева направо.17Операндами могут быть константы, переменные или функции. (Функции будут описаны далее.)Вообще говоря, идентификация переменной требует в свою очередь вычисления обозначения:здесь мы, однако, ограничимся лишь случаем использования простой переменной, изображаемойидентификатором. Арифметические выражения (существуют и другие выражения) включаютчисла, числовые переменные и арифметические операции. К последним относятся основныеарифметические операции: сложение (+), вычитание (-), умножение (*) и деление.
Все они будутподробно рассмотрены в разделе, посвященном основным типам данных. Здесь же достаточноупомянуть, что знак (/) зарезервирован для деления действительных чисел, а для целых мыиспользуем в качестве знака операции ключевое слово DIV, что означает взятие целой частичастного.Выражение состоит из последовательных слагаемых. ЗаписьТ0 + Т1 + ... + Тnэквивалентна((Т0 + Т1) +...)+ ТnСинтаксис выражения определяется правилами$ПростоеВыражение = ["+" |"-"] Слагаемое$${ОперацияТипаСложения Слагаемое}.ОперацияТипаСложения - "+"|"-"|"OR".ПРИМЕЧАНИЕ: Пока читатель может считать, что синтаксические понятия Выражение иПростоеВыражение эквивалентны. Различие между ними и смысл операций OR, AND и NOTбудут разъяснены в разделе, посвященном данным типа BOOLEAN.Аналогичным образом, каждое слагаемое состоит из множителей.
СлагаемоеF0 * F1 * ... * Fnэквивалентно((F0 * F1) *... ) * Fnи определяется синтаксически по правилам:$$$Слагаемое - Множитель{ОперацияТипаУмножения Множитель}.ОперацияТипаУмножения - "*"|"/"|"DIV"|"MOD"|"AND"|"&".Каждый множитель - это или константа, или переменная, или Функция, или выражение,заключенное в круглые скобки.Примеры арифметических выражений:2*3+4*5 = (2*3)+(4*5) = 2615 DIV 4 * 4 = (15 DIV 4)*4 = 1215 DIV (4*4) = 02 + 3*4-5 = 2+(3*4)-5 = 96.25 / 1.25 + 1.5 = 5.0 + 1.5 = 6.518Учитывая, что множитель в свою очередь тожесинтаксис множителей рекурсивен.$можетбыть выражением, очевидно, чтоМножитель = Число | Цепочка | Множество |$Обозначение[ФактическиеПараметры] |$"(" Выражение ")" | "NOT" Множитель.Правила вычисления выражений в действительности очень просты: сложные ситуациивстречаются весьма редко, но мы тем не менее укажем несколько основных правил,заслуживающих упоминания.1.
Каждой переменной в выражении должно быть предварительно присвоено значение.2. Два знака операций не могут стоять рядом. Например, запись а*-b неправильна: нужнописать а*(-b).3. При умножении нельзя пропускать знак операции. Например, запись 2n неправильна:должно быть 2*n.4.ОперацияТипаУмноженияОперацияТипаСложения.имеетболеевысокийприоритет,чем5.
При возникновении сомнений в правилах вычисления (т.е. старшинстве операций)используйте дополнительные скобки для уточнения. Например, а+b*с можно записать и кака+(b*с).Присваивание - лишь одна из возможных Форм операторов. Другие Формы будут введены вследующих разделах. Мы перечислим эти Формы в виде синтаксического определения$Оператор - [ Присваивание | ВызовПроцедуры |$ЦиклПока | ЦиклДо | ЦиклСШагом |$БезусловныйИикл | УсловныйОператор |$ОператорВыбора | ОператорПрисоединения |$ОператорВозврата | "EXIT" ].Некоторые из этих Форм - структурированные операторы, т.е. их компоненты в свою очередьмогут быть операторами. Таким образом, определение операторов, как и выражений, рекурсивно.Самая фундаментальная структура языка - последовательность.
Начисление - последовательностьдействий, где каждое действие задается некоторым оператором и исполняется после завершенияпредшествующего действия. Строгая временная упорядоченность -существенная предпосылкапоследовательного программирования. Если оператор S1 следует за S0, то мы указываем этупоследовательную во времени связь точкой с запятойS0; S1Этот разделитель операторов (не завершитель) указывает на то, что за действием,соответствующим S0, должно непосредственно следовать действие, соответствующее S1.Последовательность операторов синтаксически определяется так:$ПослОператоров = Оператор {":" Оператор).Синтаксис операторов подразумевает, что оператор может вообще не содержать литер.
В такомслучае оператор называют пустым, и, очевидно, он задает пустое действие. Эта диковинка среди19операторов имеет определенный смысл. Пустой оператор позволяет вставлять точку с запятой втакие места, где она на самом деле избыточна, например в конец последовательности операторов.6. УПРАВЛЯЮШИЕ СТРУКТУРЫГлавная особенность ЭВМ - способность выполнять отдельные действия циклически либовыбирать одно из нескольких действий в зависимости от ранее вычисленных результатов.
Такимобразом, последовательность выполняемых действий не всегда совпадает с последовательностьюсоответствующих операторов. Последовательность действий определяется управляющимиструктурами, указывающими повторение, выбор либо условное выполнение заданных операторов.6.1. Операторы повторения (циклы)Наиболее общая ситуация - повторение одного оператора или последовательности подуправлением некоторого условия. Повторение продолжается, пока условие остается истинным.Это выражается оператором цикла с условием продолжения (ЦиклПока).
Его синтаксис $ЦиклПока - "WHILE" Выражение$"DO" ПослОператоров "END".Соответствующее ему действие 1. Вычислить условие, которое принимает Форму выражения со значением или TRUE(истина) или FALSE (ложь).2. Если получилось значение TRUE, выполнить последовательность операторов, а затемповторить шаг 1. если значение условия - FALSE, то закончить выполнение.Условное выражение в операторе цикла имеет тип BOOLEAN (булев, логический). Этот тип будетобсуждаться в разделе, посвященном типам данных. Здесь же достаточно знать, что простоесравнение -выражение типа BOOLEAN. Пример цикла был дан во вводном примере, гдеповторение заканчивалось, когда сравниваемые переменные принимали одинаковые значения.
Вотеще примеры операторов цикла с условием продолжения.1. Пусть вначале q = 0 и r = х; вычислить, сколько раз можно вычесть у из х, т.е. вычислитьчастное q = х DIV у и остаток r = х MOD у, если х и у - натуральные числа.WHILE r >= у DOr:=r-у; q:=q+1END2. Пусть z = 1 и i = k, умножить z на х к раз, т.е. вычислить z = х^k, если r и k- натуральные числа.WHILE 1 > И DOz := z*x; i := i –ENDИспользуя циклы, важно помнить следующее:1.