Застосовується для складання всіляких таблиць, якими можуть бути як абстрактна таблиця значень математичної функції, так і конкретна таблиця вартості товару або платежів, зроблених абонентом стільникового оператора.
У загальному виді алгоритм можна описати так:
- до циклу задається початкове значення керуючої змінної, умовою виходу із циклу служить досягнення керуючої змінної кінцевого значення;
- у тілі циклу на кожному кроці обчислюється чергове значення функції, що залежить від керуючої змінної, потім формується рядок таблиці:
- наприкінці кроку циклу значення керуючої змінної (позначимо її x) змінюється оператором виду x:=x+d;, де d – заданий крок по керуючої змінній.
Пр. Складемо таблицю синусів у межах від 0 до π із кроком по аргументу 0.25. Позначимо аргумент як x, значення синуса від x позначимо як y. У найпростішому випадку програма табулювання може виглядати так:
var x,y:real;
begin
writeln('x':10,'sin(x)':10);{печатка заголовка таблиці – до циклу}
x:=0; {початкове значення аргументу}
while x<=pi do begin
y:=sin(x); {обчислення функції}
writeln (x:10:2, y:10:2); {печатка рядка таблиці}
x:=x+0.25; {крок по x}
end;
end.
Пр. "Розширимо" завдання за рахунок використання довільних границь зміни аргументу й довільного кроку, а також виконання всіх необхідних перевірок коректності. Нехай, наприклад, потрібно скласти таблицю значень наступної функції:
,
значення a,b уводяться користувачем.
Напишемо текст програми, супроводивши його відповідними коментарями.
var x,f,a,b,dx:real; {змінні з умови завдання}
n:integer; {лічильник виведених на екран рядків}
begin
repeat {Цикл уведення з контролем правильності значень:
a,dx,b повинні бути числами, dx>0, a+dx повинне бути менше b}
writeln ('Уведіть початкове значення, крок і кінцеве значення:');
{$I-}read (a,dx,b);{$I+}
if Ioresult <> 0 then begin
writeln ('Ви не ввели 3 числових значення, спробуємо ще раз');
continue;
end;
if (dx<=0) or (a+dx>=b) then begin
writeln ('Ви не ввели припустимі дані, спробуємо ще раз');
continue;
end
else break;
until false;
{Печатка заголовка таблиці - робиться один раз до циклу}
writeln;
writeln ('x':10,'f(x)':10);
x:=a;
n:=2; {2 рядка вже зайнятий - порожня й заголовок}
while x<=b+1e-6 do begin
{в умові циклу враховуємо можливу погрішність роботи з real!}
if x<=0 then f:=sqr(x)*x
else f:=exp(1/3*ln(abs(x))); {корінь 3 ступеня побрали через exp і ln}
writeln (x:10:2,f:10:2);
n:=n+1;
if n=24 then begin {На екрані консолі за замовчуванням усього 25 рядків}
write ('Натисніть Enter для продовження...');
reset (input); readln;
n:=1;
end;
x:=x+dx;
end;
writeln ('Таблиця виведена');
reset (input); readln;
end.
Як видне із прикладу, основний порядок дій – такий же, як у попередньому завданні. Тому що екран консолі за замовчуванням містить усього 25 рядків, за допомогою змінної n ми додатково контролюємо число вже виведених рядків і робимо по заповненню екрана паузу до натискання користувачем клавіші Enter.
Зрозуміло, інші вивчені нами види циклів також можуть застосовуватися при табулюванні. Розглянемо як приклад наступне завдання:
Пр. Відома вартість одиниці товару. Скласти таблицю вартості 1,2,…,K одиниць товару, значення K уводиться.
Тому що число одиниць товару – свідомо ціле, при програмуванні завдання буде зручний цикл for:
var t:real;
i,k:integer;
begin
writeln;
writeln ('Уведіть вартість одиниці товару:');
read (t);
writeln ('Уведіть кількість одиниць товару для таблиці:');
read (k);
writeln ('Одиниць':10,'Вартість':10);
for i:=1 to k do
writeln (i:10,(i*t):10:2);
end.
Тут для простоти ми виключили зроблені в другому прикладі перевірки. Вартість одиниці товару позначена t, змінна i необхідна для перебору можливих значень одиниць товару в циклі for. Оскільки лічильник циклу for автоматично міняється із кроком 1, а оператором writeln можна виводити не тільки значення змінних, але й вирази, основний цикл програми складається з одного оператора й не має потреби в операторных дужках.