субота, 25 листопада 2017 р.

Тема 3. Підпрограми-функції

Процедури-функції
1. Задається функція так:
Function <ім'я функції>(<список формальних параметрів>):<тип результату>;

2. У тілі функції обов'язково повинен бути оператор присвоєння виду:
<ім'я функції>:=<вираз>

3. Результат виконання функції потрібно присвоїти відповідній змінній.

Параметрце змінна, яка використовується для обчислення значення функції. Відмінність параметру від звичайної змінної полягає в тому, що він описується не в розділі опису змінних, а в заголовку функції. Конкретне значення параметр отримує під час роботи програми при викликанні функції з основної програми.
Список формальних параметрів використовується для передачі даних в підпрограму – функцію. Після імені змінної чи групи імен змінних йде двокрапка і записується тип цих змінних.
Тип результатуце тип значення, яке функція повертає у викликаючу її програму.
В розділі операторів знаходиться хоча б один оператор, який присвоює імені функції деякий вираз.

Приклад: Порахувати суму двох чисел.
Program Dem_fun;
Var x1,x2,x:Real;
Function Fsum(a,b:Real):Real;
Begin
  Fsum:=a+b
End;
Begin
  Write (‘вв.2 числа’)
  Read(x1, x2);
  X:=Fsum(x1,x2);
  Write (x1,’+’,x2,’=’,x)
End.
Виклик функції користувача здійснюється аналогічно тому, як і виклик будь-якої функції   X:=Fsum(x1,x2).

Задача: по заданих дійсних значеннях x і y обчислити u=max(x+y,x*y), v=max(0.5,u).

Програма розв'язку цієї задачі з використанням функції:

Program Max3;
Var x,y,u,v:real;
Function Max(r1,r2:real):real;
Begin
 If r1>r2 then max:=r1 else max:=r2
End;
Begin
 Read(x,y);
 U:=Max(x+y,x*y);
 V:=Max(0.5,u);
 Writeln(u,v)
End.

Приклад. Скласти програму з використанням функцій та процедур з параметрами: порахувати суму елементів матриць a,b,c розміру 3´4, що містить дійсні елементи.

program PR2;
const m =3; n = 4;
type matr= array[1..3,1..4] of real;
var  a,b,c:matr; s1,s2,s3:real;

procedure Vvid(var d:matr);
var i, j: integer;
 begin
           for i: = 1 to 3 do
             for j: = 1 to 4 do
                 read(d[i, j]);
 end;

function SUM(d:matr):real;
var s:real;
begin s: =0;
    for i: = 1 to 3 do      
        for j: = 1 to 4 do
            s: = s + d[i, j];
    sum:=s;
 end;

begin  
      Vvid(a);  s1:=SUM(a); writeln (‘s1=’, s1);
      Vvid(b);  s2:=SUM(b); writeln (‘s2=’, s2);
      Vvid(c);  s3:=SUM(c); writeln (‘s3=’, s3);
end.

Підручник : ст. 206(Виклик з однієї процедури іншої),ст. 209, 211-212(функції), ст. 217=219(рекурсія).

Д./з. 1
1. Ввести вектори a,b,c з n дійсних елементів. Всі елементи, які належать проміжку [-5,5], замінити на максимальний елемент відповідного вектора. Вивести утворені вектори.Використати процедури.
2. Ввести ціле число x. Обчислити u = min(x,x2), v = min(0.2,u), використовуючи функції.
3. Ввести дійсні числа a,b,c. Якщо трикутник з такими сторонами існує, то знайти його площу (задати дві функції: для визначеня існування трикутника та знаходження площі). Підказка на ст.212.


Д./з. 2 (Використовуючи функції)
1. Порахувати середнє арифметичне додатніх елементів кожного з векторів a,b,c, які складаються з n дійсних елементів.
2. Порахувати кількість елементів, що належать проміжку [-6,6] кожного з векторів a,b,c, які складаються з n дійсних елементів. Також знайти максимальний елемент кожного з цих векторів.



Немає коментарів:

Дописати коментар