while 2>1 do
write(1);
Оператор цикла repeat имеет следующую форму:
repeat
операторы
until условие
В отличие от цикла while, условие вычисляется после очередной итерации цикла, и если оно истинно, то происходит выход из цикла. Таким образом, операторы, образующие тело цикла оператора repeat, выполняются по крайней мере один раз.
Обычно оператор repeat используют в ситуациях, где условие нельзя проверить, не выполнив тело цикла. Например:
repeat
read(x);
until x=0;
Если условие всегда оказывается ложным, то может произойти зацикливание:
repeat
write(1);
until 2=1;
Оператор with
Оператор with позволяет сократить обращение к полям записи, а также к полям, методам и свойствам объекта. Он имеет вид:
with имя записи или объекта do оператор
или
with список имен do оператор
Всюду внутри оператора можно опускать имя записи при обращении к полю указанной записи или имя объекта при обращении к полю, методу или свойству указанного объекта. Например, пусть описана переменная
var
DateOfBirthday = record
Day: Integer;
Month: Integer;
Year: Integer;
end;
Тогда присваивание значений ее полям без использования оператора with имеет вид:
DateOfBirthday.Day := 23;
DateOfBirthday.Month := 2;
DateOfBirthday.Year := 1965;
Использование оператора with позволяет сократить предыдущую запись:
with DateOfBirthday do
begin
Day := 23;
Month := 2;
Year := 1965;
end;
Если внешняя переменная имеет то же имя, что и поле (метод, свойство), то предпочтение отдается полю (методу, свойству). При наличии вложенных операторов with вначале предпринимается попытка рассматривать переменную как поле записи или объекта самого внутреннего оператора with, затем непосредственно объемлющего его оператора with и т.д. Если оператор with содержит список объектов, то они рассматривается справа налево. Например, если имеются описания
var
x,y,z: integer;
a: record
x,y: integer;
end;
b: record
x: integer;
;
то фрагмент программы
with a,b do
begin
x := 1;
y := 2;
z := 3;
;
эквивалентен фрагменту
with a do
with b do
begin
x := 1;
y := 2;
z := 3;
;
а также фрагменту
b.x:=1;
a.y:=2;
z:=3;
Оператор with устарел и сейчас практически не используется.
Оператор безусловного перехода goto
Оператор безусловного перехода goto имеет следующую форму:
goto метка
Он переносит выполнение программы к оператору, помеченному меткой метка.
Метка представляет собой идентификатор или целое без знака. Чтобы пометить оператор меткой, необходимо перед оператором указать метку с последующим двоеточием:
label1: оператор
Метки должны быть описаны в разделе меток с использованием служебного слова label:
label 1,2,3;
Например, в результате выполнения программы
label 1,2;
begin
var i := 5;
2: if i<0 thengoto 1;
write(i);
Dec(i);
goto 2;
1:
end.
будет выведено 543210.
Метка должна помечать оператор в том же блоке, в котором описана. Метка не может помечать несколько операторов.
Переход на метку может осуществляться либо на оператор в том же блоке, либо на оператор в объемлющей конструкции. Так, запрещается извне цикла переходить на метку внутри цикла.