Составной оператор в lazarus

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

Например: если s>j, то необходимо s:=s+1 и j:=j-1. Несложно описать эту задачу при помощи оператора if.

Но этот код не будет работать, так как два оператора присваивания не разделены ‘;’.

А если поставить ‘;’, то получим вот это If s>j then s:=s+1; j:=j-1;

Этот код уже будет работать, но не так как нам хотелось. s:=s+1 будет выполнятся, когда s>j, а j:=j-1 будет выполнятся всегда. Это произойдет потому что j:=j-1 от оператора if отделено ‘;’ и не попадает под действие этого оператора.

Для того чтобы эти действия выполнялись вместе необходимо применить особый оператор. Он называется – составной оператор.

Составной оператор служит для объединения групп операторов, которые по смыслу программы рассматриваются как один оператор.

Как в примере: s:=s+1; j:=j-1 должны быть одним оператором. Что бы выполнятся после if вместе. Для того чтобы объединить два оператора будем использовать операторные скобки begin end;.

Теперь все что находится в операторных скобках является составным оператором и будет выполнятся если s>j. Операторы, находящиеся в операторных скобках выполняются последовательно, в том порядке, в котором записаны.

Во многих операторах синтаксис языка требует использование только одного оператора, в этом случае и необходимо использовать составной оператор ( как после слова then по синтаксису должен стоять только один оператор).

При использовании составного оператора есть один нюанс. После последнего оператора, входящего в состав составного оператора, можно не ставить ‘;’. Это объясняется тем что ‘;’ служит для отделения операторов друг от друга, а в составном операторе в конце отделение производится словом end; обязательно с ‘;’.

Если же вы поставите ‘;’, то программа будет работать без ошибок и полностью правильно. Просто вы создадите пустой оператор. Этот оператор не вызывает не каких действий и не какими символами не обозначается. В простейшем случае это просто пустое место между двумя ‘;’

В этом примере есть сразу три пустых оператора между begin ; и между ;; и между ; end;.