Глава 6. УПРАВЛЯЮЩИЕ СТРУКТУРЫ Оператор присваивания Простой и составной операторы Условный оператор Оператор множественного выбора Оператор цикла с предусловием Оператор цикла с постусловием Оператор цикла с параметром Оператор и процедуры безусловного перехода
2 Гл. 6. УПРАВЛЯЮЩИЕ СТРУКТУРЫ Оператор присваивания Оператором называется конструкция языка программирования, служащая для задания какого-либо действия или последовательности действий в программе над данными. Совокупность операторов программы реализует заложенный в ней алгоритм. Любой оператор подразумевает некоторое действие. Процесс «засылки» значения в переменную называется присваиванием (первое присваивание называется инициализацией). Присваивание осуществляется с помощью специальной конструкции – оператора присваивания: идентификатор переменной :=:= выражение Var W,H : Integer; Begin W := 23; H := 17; W := W * H; End.
3 Гл. 6. УПРАВЛЯЮЩИЕ СТРУКТУРЫ Простой и составной операторы Два последовательных оператора должны разделяться точкой с запятой (имеет смысл конца оператора): a := 11; b := a * a; Write(a,b); Составной оператор – это последовательность операторов, рассматриваемых как единый. Оформляется с помощью зарезервированных слов begin и end (операторные скобки). Оператор в программе это единое неделимое предложение, выполняющее какое-либо действие. Простой оператор не содержит в себе других операторов (оператор присваивания, вызов процедуры,…). begin a := 11; b := a * a; Write(a,b) еnd;
4 Гл. 6. УПРАВЛЯЮЩИЕ СТРУКТУРЫ Условный оператор if K > 5 then begin X := X + 5; Y := 1 еnd else Y := -1; Условный оператор используется для программирования ветвлений, т.е. ситуаций, когда возникает необходимость при определенных условиях выполнять различные действия. Условный оператор имеет структуру: if логическое выражение then оператор else оператор В каждой ветви допускается запись только одного оператора.
5 Гл. 6. УПРАВЛЯЮЩИЕ СТРУКТУРЫ Вложенные условные операторы if then if then else ; Альтернатива else считается принадлежащей ближайшему условному оператору if, не имеющему своей ветви else. if then begin if then end else ;
6 Гл. 6. УПРАВЛЯЮЩИЕ СТРУКТУРЫ Оператор множественного выбора Оператор выбора используется для реализации нескольких альтернативных вариантов действий, каждый из которых соответствует своим значениям некоторого параметра. case выражение of константа/ диапазон else операторы : оператор end ; Значение, а также должны относиться к одному из порядковых типов (кроме LongInt). В зависимости от значения выбирается тот оператор, которому предшествует константа выбора, равная вычисленному значению (альтернатива - операторы после else). Значения констант должны быть уникальными в каждом наборе, т.е. они могут появиться только в одном варианте.
7 Гл. 6. УПРАВЛЯЮЩИЕ СТРУКТУРЫ case I of {I : Word} 1 : X := X +1; 2,3 : X := X +2; 4..9 : begin Write(X); X := X + 3 {м.б. ";"} end {м.б. ";"} else X := X * X; Writeln(X) {м.б. ";"} end;
8 Гл. 6. УПРАВЛЯЮЩИЕ СТРУКТУРЫ Оператор цикла "Пока" (с предусловием) while условное выражение do оператор (тело цикла), стоящий после служебного слова do, будет выполняться циклически до тех пор, пока выполняется логическое условие, т.е. пока значение равно True. Чтобы цикл имел шанс когда-либо завершиться, содержимое его тела должно влиять на условие цикла. Условие должно состоять из корректных выражений и значений, определенных еще до первого выполнения тела цикла. VarF,N : LongInt;{вычисление 10!} Begin F := 1; N := 1; while N
9 Гл. 6. УПРАВЛЯЮЩИЕ СТРУКТУРЫ Оператор цикла "До" (с постусловием) Операторы между словами repeat и until образуют тело цикла. Если имеет значение True, то цикл завершается. Цикл "Пока" - "пока условие истинно, выполнять операторы тела". Цикл "До" - "выполнять тело цикла до тех пор, пока не станет истинным условие"; repeat until False; repea t оператор until условное выражение ;
10 Гл. 6. УПРАВЛЯЮЩИЕ СТРУКТУРЫ Оператор цикла c параметром (цикл по счетчику) – переменная порядкового типа, к этому же типу должны относиться значения и. Значение меняется в возрастающем (при использовании зарезервированного слова to) или убывающем (downto) порядке от значения до значения с постоянным шагом, равным интервалу между двумя ближайшими значениями в типе, к которому относится (для целочисленных типов - это 1, для символьного - от одного символа к другому при увеличении кода на 1, и т.д.). Циклы for допускают вложенность, если никакой из вложенный циклов не использует и не модифицирует переменные - параметры внешних циклов. Используется для организации "строгих" циклов, которые должны быть проделаны заданное число раз. fo r параметр цикла := выражение 1 to выражение 2 do оператор downto
11 Гл. 6. УПРАВЛЯЮЩИЕ СТРУКТУРЫ Var I : Integer; C : Char; B : Boolean; E : (E1,E2,E3,E4); Begin for I := -10 to 10 do Write(I); for C := 'a' to 'z' do Write(C); for B := False to True do Write(B); for E := E1 to E4 do begin {составной оператор} I := ORD(E); Write(I) end End.
12 Гл. 6. УПРАВЛЯЮЩИЕ СТРУКТУРЫ Оператор безусловного перехода Метка может стоять в программе в любом месте между операторами и отделяется от второго оператора двоеточием ":". Область действия операторов безусловного перехода строго локализована. Запрещены переходы по оператору goto между процедурами, а также между основным блоком и процедурой. Оператор безусловного перехода передает управление выполнением в указанное c помощью метки место программы (является "лишним" с точки зрения теории структурного программирования). goto метка Label целое без знака ; идентификатор метки, Синтаксические диаграммы и : LabelL1, L2; Begin... goto L1;... L1 : goto L2;... L2 : End.
13 Гл. 6. УПРАВЛЯЮЩИЕ СТРУКТУРЫ Процедуры безусловного перехода Процедуры неструктурной передачи управления при работе с циклическими структурами: Break – реализует выход из цикла любого типа; Continue – осуществляет переход на следующую итерацию цикла, игнорируя оставшиеся до конца тела цикла операторы. Процедуры Exit и Halt специально предназначены для выхода из программных блоков (процедур, функций, основного программного блока). Halt ( ) осуществляет выход из программы, возвращая операционной системе заданный код завершения. Exit осуществляет безусловный выход из подпрограммы. Если процедура использована в основном блоке, то она выполняется аналогично Halt.