Інструкція for

Розглянемо наступну задачу. Нехай потрібно написати програму, яка обчислює значення функції у = 5х 2 – 7    в точках  -1, -0.5, 0, 0.5 і 1

(таблиця повинна бути виведена в поле мітки форми додатка). Процедура, що забезпечує вирішення поставленого завдання, може виглядати так:

procedure TForm1.ButtonlClick (Sender: TObject); var
у: real; // значення функції
x: real; // аргумент функції
dx: real; // приріст аргументу
st: string; // зображення таблиці

begin
st: = '';
x : = -1; dx: = 0.5;
у : = 5 * х * х -7;
st : = St + FloatToStr (x) + '' + FloatToStr (y) + chr (13);
x : = X + dx;
у : = 5 * х * х -7;
st : = St + FloatToStr (x) + * '+ FloatToStr (y) + chr (13);
x : = X + dx;
у : = 5 * х * х -7;
st : = St + FloatToStr (x) + * '+ FloatToStr (y) + chr (13);
x : = X + dx;
у : = 5 * х * х -7;
st : = St + FloatToStr (x) + '' + FloatToStr (y) + chr (13);
x : = X + dx;
у : = 5 * х * х -7;
st : = St + FloatToStr (x) + '' + FloatToStr (y) + chr (13);
x : = X + dx;
Label1.Caption : = St;

end;

З тексту процедури видно, що група інструкцій

у : = 5 * х * х -7;
st : = St + FloatToStr (x) + '' + FloatToStr (y) + chr (13);
x : = X + dx;

забезпечує обчислення значення функції, формування рядка таблиці і збільшення аргументу, виконується 5 раз.
Скориставшись інструкцією for, наведену процедуру можна переписати таким чином:

procedure TForm1.ButtonlClick (Sender: TObject);

var
у: real; // значення функції
x: real; // аргумент функції
dx: real; // приріст аргументу
st : string; // зображення таблиці
i : integer; // лічильник циклів
begin
st: = ''; x: = -1; dx: = 0.5;

for i: = l to 5 do begin
у : = 5 * x * x -7;
st : = St + FloatToStr (x) + '' + FloatToStr (y) + chr (13); x: = x + dx; end;
Label1.Caption : = St;

end;

Другий варіант процедури, по-перше, вимагає менше зусиль при наборі, по-друге, процедура більш гнучка: для того щоб збільшити кількість рядків в виведеної таблиці, наприклад до десяти, досить в рядку for i: = 1 to 5 do число 5 замінити на 10.
Інструкція for використовується в тому випадку, якщо деяку послідовність дій (інструкцій програми) треба виконати кілька разів, причому число повторень заздалегідь відомо.
У загальному вигляді інструкція for записується в такий спосіб:

for лічильник: = нач_знач to кон_знач do begin
// тут інструкції, які треба виконати кілька разів end

де:

  • лічильник – змінна-лічильник числа повторень інструкцій циклу;
  • нач_знач– вираз, що визначає початкове значення лічильника циклів;
  • кон_знач – вираз, що визначає кінцеве значення лічильника циклів.

Змінна лічильник, вираження нач_знач і кон_знач повинні бути цілого типу.
Кількість повторень інструкцій циклу можна обчислити за формулою
(кон_знач – нач_знач + L).
Приклади:

for i: = l to 10 do begin
label1.caption: = label1.caption + '*'; end;
for i: = 1 to n do s: = s + i;

Примітка
Якщо між begin і end знаходиться тільки одна інструкція, то слова begin і end можна не писати.


Рис. 2.13. Алгоритм інструкції for

Алгоритм, відповідний інструкції for, представлений на рис. 2.13. Зверніть увагу, що якщо початкова значення лічильника більше кінцевого значення, то послідовність операторів між begin і end нічого очікувати виконано жодного разу.
Крім того, після кожного виконання інструкцій тіла циклу лічильник циклів збільшується автоматично.
Зміну-лічильник можна використовувати всередині циклу (але ні в якому разі не змінювати). наприклад, в результаті виконання наступних інструкцій:

змінна tabl буде містити зображення таблиці квадратів чисел. Розглянемо програму, яка обчислює суму перших 10 елементів ряду: 1 + + 1/3 + … (значення i-го елемента ряду пов’язано з його номером формулою 1 //). Діалогове вікно програми має містити, принаймні, два компоненти: поле мітки (Label1) і командну кнопку (Buttonl). Обчислення суми ряду і висновок результату виконує процедура обробки події Onclick, текст якої наведено нижче. Після обчислення чергового елемента ряду процедура виводить в поле Labell номер елемента і його значення в поле мітки форми, призначене для виведення результату.

procedure TForm1.ButtonlClick (Sender: TObject);

var
i: integer; {Номер елемента ряду}

elem: real;

{ значення елемента ряду}

summ: real;

{ сума елементів ряду)
begin
summ: = 0;
label Leapt ion: = '';

for i: = l to 10 do begin
elem: = l / i;
label1.caption: = labell.caption +
IntToStr (i) + ' '+ FloatToStr (elem) + # 13; sunrn: = summ + elem;

end;

label1.caption: = label1.caption +
'Сума ряду: '+ FloatToStr (summ);

end;

Якщо в інструкції for замість слова to записати downto, то після чергового виконання інструкцій тіла циклу значення лічильника буде не збільшуватися, а зменшуватися.