Порівняння роботи операторів while, repeat і for
Відзначимо відмінності й особливості гарного стилю роботи з розглянутими циклічними операторами.
Цикл з передумовою while (поки умова істинна)
| Цикл з післяумовою repeat (до істинності умови)
|
1) До початку циклу повинні бути зроблені початкові установки змінних, керуючих умовою циклу, для коректного входу в цикл
|
2) У тілі циклу повинні бути присутнім оператори, що змінюють змінні умови так, щоб цикл через деяке число ітерацій завершився
|
3) Цикл працює поки умова істинна (поки True)
| 3) Цикл працює поки умова хибна (поки False)
|
4) Цикл завершується, коли умова стає помилковою (до False)
| 4) Цикл завершується, коли умова стає істинною (до True)
|
5) Цикл може не виконатися жодного разу,якщо вихідне значення умови при вході в цикл дорівнює False,
| 5) Цикл обов'язково виконується як мінімум один раз
|
6) Якщо в тілі циклу потрібно більше одного оператора, то необхідно використати складений оператор
| 6) Незалежно від кількості операторів у тілі циклу використання складеного оператора не потрібно
|
Цикл з лічильником for
|
1) Початкова установка змінної лічильника циклів до заголовка не потрібна
|
2) Зміна в тілі циклу значень змінних, що стоять у заголовку циклу, не допускається
|
3) Кількість ітерацій циклу незмінне й точно визначається значеннями нижньої й верхньої границь і кроку циклу
|
4) Нормальний хід роботи циклу може бути порушений оператором goto або процедурами Break і Continue
|
5) Цикл може не виконатися жодного разу, якщо крок циклу буде змінювати значення лічильника від нижньої границі в напрямку, протилежному верхній границі
|
| | |
Для наочності порівняння запису циклів while, repeat і for зберемо воєдино розглянуті для них приклади.
S: =0 ;
i: =1 ;
while i<=ndo
begin
S:=S+A[i] ;
i:=i+l ;
end
| S:=0;
i: =1;
repeat
S:=S+A[i];
i:=i+l;
until i>n
| S: =0;
for i:=lto ndo
S:=S+A[i];
|
Оператор приєднання with призначений для спрощення доступу до полів записів (record) і має такий синтаксис:
Якщо оператор with не використати, то при звертанні до полів записів необхідно вказувати повне кваліфікуєме ім'я поля, що складається з ланцюжка ідентифікаторів, розділених точками.
type T_Rec =record
А:record
В:record
X :Char;
Y :Byte
End
С:Real
End
D :String
End
var Rec : T_Rec;
|
Наприклад,якщо зроблено опис
то для присвоювання полю Y значення 0, а полю С - значення 3.1415 необхідно записати
Rec.А.В.Y := 0;
Rec.А.С:= 3.1415;
|
У найпростішому випадку оператор приєднання дозволяє скоротити імена полів запису в такий спосіб
with Recdo
begin
A.B.Y := 0;
А.С:= 3.1415
end
|
with Recdo
with Ado
begin
B.Y := 0;
С:= 3.1415
end
|
Якщо ж використати не один, а два оператори with, то можна записати
Останній фрагмент можна записати більш компактно одним оператором with, указавши імена Rec і А в одному списку посилань
with Rec, Ado
begin
B.Y:= 0;
С:=3.1415
end
|
with Rec, A, Bdo
begin
X: = '*' ;
У:=0
end
|
Якщо потрібний доступ тільки до полів X і Y, то можна записати