Рішення задач за допомогою функцій.
Розглянемо приклад програми, в якій використовуються функції створені користувачем.
Приклад 3. Дано матрицю цілих чисел 3х6. Знайти, в якому рядку найбільше чисел кратних 3.
program example_3;
type
matr=array [1..3, 1..6] of integer;
var
A : matr;
I, J : byte;
function count(I : byte; A : matr) : byte;
{створюємо функцію, що підраховує кількість чисел кратних 3}
var
K : byte; {проміжна змінна, що буде визначати кількість чисел} begin
K := 0;
for J := 1 to 6 do
if (A[I,J] mod 3) then K := K+1;
count := K {значення проміжної змінної присвоюємо самій функції}
end;
begin
for I := 1 to 3 do
for J := 1 to 6 do
begin
write (,A[,,I , ‘,' ,J, ‘]=');
readln (A[I, J])
end;
if (count(1,A)>=cont(2,A)) and (count(1,A)>=cont(3,A))
then writeln('Найбільше чисел, що діляться на З в 1-му рядку')
else
if (count(2,A)>=cont(1,A)) and (count(2,A)>=cont(3,A))
then writeln('Найбільше чисел, що діляться на З в 2-му рядку')
else writeln('Найбільше чисел, що діляться на З в 3-му рядку');
readln
end.
Приклад 4. Використовуючи функцію max2(a,b), яка визначає максимальне з двох даних чисел, записати функцію max3(a,b,c), що визначає максимальне з трьох даних чисел, і організувати виклик цієї функції для обчислення суми найбільших значень трьох трійок довільних дійсних чисел.
Алгоритм пошуку максимуму з двох чисел являється стандартним. Написання алгоритму пошуку максимуму з трьох чисел розв'язується за допомогою двох викликів функції пошуку максимуму з двох чисел в такім послідовності:
знаходиться максимум з двох чисел (наприклад, a та b) ;
знаходиться максимум з вже найденого максимуму та третього числа с.
За умовою необхідно знайти суму найбільших значень трьох трійок довільних дійсних чисел, тому результатом роботи програми буде значення змінної Rezultat, в якій ми будемо здійснювати накопичення суми.
Виклик функції виконаємо трьома способами. Перший раз для трьох змінних x, y, z, що будуть введені з клавіатури, другий - для трьох констант, що вибрані нами випадково, а третій - для деяких виразів (наприклад, знайти максимум модулів трьох чисел). Це робиться з навчальною метою, щоб показати, що у якості фактичних параметрів можуть бути не тільки змінні, а й константи або вирази (Зверніть увагу учнів на те, що константами або виразами фактичні параметри можуть бути тільки в тому випадку, коли відповідні формальні параметри являються параметрами-значеннями. Якщо ж формальний параметр є параметром-змінною, то відповідний фактичний параметр теж повинен бути змінною).
З урахуванням всього вище сказаного, програма, що виконує запропонований алгоритм, має наступний вигляд:
Program Example_4;
Uses crt; {Підключення бібліотеки}
Function Max2 (a,b:real):real;
begin
if a > b
then Max2:=a
else Max2:=b;
end;
Function Max3 (a,b,c:real):real;
Var Max:real;
Begin
Max:=Max2(a,b);
Max3:=Max2(Max,c);
End;
Var x,y,z,Rezultat:real;
Begin
Clrscr;
writeln ('Введіть три довільні числа: ');
readln (x,y,z);
Rezultat:=Max3(x,y,z);
Rezultat:=Rezultat+Max3(2,-4.5,12.54);
Rezultat:=Rezultat+Max3(abs(x),abs(y),abs(z));
writeln ('Результат -> ',Rezultat:8:2);
Readkey;
End.
Зверніть увагу ще на те, що функція Max2 за умовою може бути вкладеною у функцію Max3 (так як в даному випадку використовується тільки нею). Тому оформлення функцій можна було виконати і так:
Function Max3 (a,b,c:real):real;
Function Max2 (k,l:real):real;
begin
if k > l
then Max2:=k
else Max2:=l;
end;
Var Max:real;
Begin
Max:=Max2(a,b);
Max3:=Max2(Max,c);
End;
