
L12-a.ppt
- Количество слайдов: 26
Процедури і функції 1. Використання підпрограм у програмах складних задач. 2. Види підпрограм: функції та процедури. 3. Поняття формальних та фактичних параметрів. 4. Структура опису функції. 5. Підпрограми-процедури
Використання підпрограм у програмах складних задач Принцип модульності У модульній програмі окремі її частини, що призначені для рішення деяких задач, організовані у підпрограми. Якщо деякі дії в програмі потрібно виконувати багаторазово, їх доцільно оформити у вигляді окремої програми, яка називається підпрограмою. Підпрограма, записана користувачем, - це група операторів, до якої можна звертатись потрібну кількість разів з будь-якого місця основної програми.
Види підпрограм: функції та процедури Різниця між ними така: • - з функції в основну програму передається лише одне значення; - з процедури в основну програму можна повертати або одне, або кілька значень.
Поняття формальних та фактичних параметрів Формальні параметри – це змінні, які необхідні для запису виразів та операторів підпрограми-функції або підпрограми-процедури. Фактичні параметри – значення, які передаються у підпрограму-функцію або підпрограму-процедуру і підставляються замість формальних параметрів для проведення конкретних обчислень. ! Кількість та тип формальних параметрів має співпадати з кількістю та типом фактичних параметрів.
Структура опису функції Function <ім’я функції> (список формальних параметрів): тип результату; [Тіло функції] End; Список параметрів може бути відсутнім. Тіло функції по структурі аналогічно структурі програм, воно складається з: - опису локальних міток, констант, типів і змінних; - опису внутрішніх процедур та функцій; - операторів, серед яких є один, що присвоює імені функції значення результату.
! Отже, в тілі програми-функції обов’язково має стояти оператор присвоєння, в лівій частині якого вказується ім’я функції, а в правій знаходиться вираз, що визначає значення результату і передається в основну програму. Звернення до функції з основної програми здійснюється так: <Ім’я функції>(список фактичних параметрів);
Приклад 1. Обчислити кількість можливих виборів m елементів з n елементів, не враховуючи порядку і без повторень: Позначимо як: k- формальний параметр для обчислення k!, n, m, l - фактичні параметри, для яких буде обчислюватися факторіал, де l=n-m; C - результат обчислень.
Схема алгоритму функції обчислення PR(k) = k! Вхід P=1 i=2, k P=P*i PR=P Вихід
Схема алгоритму основної програми Початок n, m L = n-m C=PR(n)/(PR(m)*PR(L) C Кінець Блок звернення до функції PR
PROGRAM fun; var n, m, L: integer; c: real; {підпрограма-функція обчислення k!} Function PR(k: integer): integer; var i, p: integer; begin p: =1; for i: =2 to k do p: =p*i; PR: =p; end; begin {основна програма} read(n, m); L: =n-m; C: =PR(n)/(PR(m)*PR(L)); write(‘C=', C); end.
Приклад 2. Ввести значення X, Y та Z та обчислити вираз
Cхема алгоритму обчислення функції a + b + sin( a + b) SQ(a, b) = 2 2 Вхід SQ= a +b + sin( a + b ) 2 2 Вихід
Схема алгоритму основної програми ПОЧАТОК X, Y, Z W= SQ(X, Y)+SQ(Y, Z)+SQ(Z, X) W КІНЕЦЬ
program fnk; var x, y, z: real; w: real; Function Sq(a, b: real): real; begin Sq: =sqrt(a*a+b*b+sin(a+b)); end; begin readln(x, y, z); w: =sq(x, y)+sq(y, z)+sq(z, x); writeln('w=', w); end.
Підпрограми-процедури Procedure <ім’я процедури> (список формальних параметрів); [Тіло процедури] End; Список формальних параметрів - опис формальних параметрів (констант, змінних, типів). Тіло процедури містить: - опис локальних міток, констант, типів і змінних; - опис внутрішніх процедур та функцій; - оператори.
Звернення до процедури з основної програми виконується командою: <Ім’я процедури>(список фактичних параметрів); Для процедур визначаються : - глобальні змінні – такі змінні, які описуються в основній програмі, а використовуватись можуть як в основній програмі, так і в процедурі; - локальні змінні, які описуються і використовуються лише у процедурі.
Формальні параметри процедури поділяються на: - параметри-значення; - параметри-змінні. Параметри-значення – використовуються, коли в процедуру треба передати деяку величину, яка в процедурі не змінюється. Параметри-змінні - використовуються, коли процедура повинна повернути в основну програму один чи кілька результатів. Значення цього параметру в тілі процедури буде змінено.
Приклад 3. Обчислити кількість можливих виборів m елементів з n елементів, не враховуючи порядку і без повторень, величини
Процедура FACTOR(k, p) обчислення p=k! Вхід P=1 i=2, k P=P*i K-формальний параметр-значення, P- формальний параметр-змінна, i-локальна змінна Вихід
Основна програма Початок n, m L = n-m n, m, L=n-m - фактичні параметри для обчислення FACTOR(n, p 1) FACTOR(m, p 2) FACTOR(l, p 3) C=p 1/(p 2*p 3) C Кінець
program perestanovka; var n, m, l: integer; p 1, p 2, p 3: integer; c: real; {процедура обчисл. k!} Procedure FACTOR(k: integer; var p: integer); {тіло процедури} var i: integer; begin p: =1; for i: =2 to k do p: =p*i; end; {кінець тіла процедури} {початок основної програми} begin read(n, m); l: =n-m; FACTOR(n, p 1); FACTOR(m, p 2); FACTOR(l, p 3); c: =p 1/(p 2*p 3); write('c=', c); end.
Приклад 4. В кожному із заданих масивів A(20); B(15); C(10); D(15) визначити максимальний елемент та його номер. Позначимо як k 1 – кількість масивів, для того, щоб звернення до підпрограми здійснювати у циклі. Формальні параметри позначимо як: Х (k) – масив розмірністю k. Оскільки для підпрограми-процедури необхідно описувати масив, потрібно взяти формальний масив з максимальною розмірністю X(20). Max – максимальний елемент масиву; L – номер максимального елементу масиву. Фактичні параметри позначимо як: Maxel – максимальний елемент масиву NL – номер максимального елементу.
Підпрограма обчислення максимального елементу масиву PM(X, L, MAX) ВХІД K Розмірність масиву Х I = 1, K Xi MAX = X 1; L=1 I = 2, K ні Xi>MA X так MAX = Xi; L=i ВИХІД
Основна програма ПОЧАТОК Kl J = 1, Kl PМ(А, NL, MAXEL) MAXEL, N L КІНЕЦЬ
Program Maxl; const n=20; type mas=array[1. . n] of integer; var A: mas; j, kl, maxel, nl: integer; {початок процедури} procedure pm(x: mas; var l, max: integer); var k, i: integer; begin writeln('введіть розмірність масиву'); readln(k); writeln('введіть елементи масиву'); for i: =1 to k do readln(x[i]); max: =x[1]; l: =1; for i: =2 to k do if x[i]>max then begin max: =x[i]; l: =i; end; {кінець процедури}
{початок основної прогрaми} begin writeln('задайте кількість масивів'); readln(kl); for j: =1 to kl do begin pm(A, nl, maxel); writeln(‘максимальне значення введеного масиву =’, maxel, ’ з номером = ’, nl); end; end.