Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Основи програмування Паскаль.docx
Скачиваний:
51
Добавлен:
12.05.2015
Размер:
511.7 Кб
Скачать

11. Типові алгоритми табулювання функцій, обчислення кількості, суми й добутку

Отже, основне призначення циклів – обробка великого обсягу даних. Математично ця обробка найчастіше зводиться до пошуку, вибору й статистичній обробці потрібних величин. Практично в будь-якім реальнім завданні ми шукаємо максимальні й мінімальні значення в наборі даних, підсумуємо або перемножуємо необхідні дані, визначаємо арифметичне середнє або кількість елементів, що відповідають умові. Для розв'язку всіх цих розповсюджених завдань існують типові алгоритми, що задають правила виконання відповідних розрахунків. Вивченням цих алгоритмів ми займемося в главах 11 і 12.

Зрозуміло, справжні завдання, що встають перед програмістами, значно складніше, чим наведені нижче приклади, але з типових алгоритмів, як із цеглинок, будується будинок будь-якої складної програми.

11.1 Алгоритм табулювання

Застосовується для складання всіляких таблиць, якими можуть бути як абстрактна таблиця значень математичної функції, так і конкретна таблиця вартості товару або платежів, зроблених абонентом стільникового оператора.

У загальному виді алгоритм можна описати так:

  1. до циклу задається початкове значення керуючої змінної, умовою виходу із циклу служить досягнення керуючої змінної кінцевого значення;

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

  3. наприкінці кроку циклу значення керуючої змінної (позначимо її 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можна виводити не тільки значення змінних, але й вирази, основний цикл програми складається з одного оператора й не має потреби в операторных дужках.