русс | укр

Мови програмуванняВідео уроки php mysqlПаскальСіАсемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование


Linux Unix Алгоритмічні мови Архітектура мікроконтролерів Введення в розробку розподілених інформаційних систем Дискретна математика Інформаційне обслуговування користувачів Інформація та моделювання в управлінні виробництвом Комп'ютерна графіка Лекції


Шановні українці! Матеріал був перекладений з російської мови. Тому можуть бути незначні помикли...

Урок 7 — Процедури й функції в Паскале. Рекурсія

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

У мові Паскаль існує два види підпрограм: процедура (PROCEDURE ) і функція ( FUNCTION ). Процедури й функції в Паскале оголошуються в розділі описания за розділом змінних. У цьому уроці наведені приклади і завдання використання процедури і функцій, а також використання рекурсії в мові Паскаль. Параметри, записані у зверненні до підпрограм, називаються фактичними; параметри, зазначені в описі підпрограм - формальними. Фактичні параметри повинні відповідати формальним за кількістю, порядку проходження і типу. Параметри, оголошені в основний (головним) програмі, діють у будь-який підпрограмі і називаються глобальними. Параметри, оголошені в підпрограмі, діють тільки в цій підпрограмі і називаються локальними.

 

Процедури

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

Приклад 1. Процедура без параметрів, яка виводить рядок з 60 зірочок.

procedure pr;
var i : integer ;
begin
for i :=1 to 60 do write (‘ * "); writeln;
end.

Приклад 2. Процедура c параметрами.

Дано 3 різних масиву цілих чисел (розмір кожного не перевищує 15). У кожному масиві знайти суму елементів і середньоарифметичне значення.

program proc;
var i , n , sum: integer;
sr : real;
procedure work (r:integer; var s:integer; var s1:real); {процедура work}
var mas : array [1..15] of integer ; { оголошення масиву мas}
j : integer;
begin
s:=0;
for j:=1 to r do begin {введення елементів масиву mas}
write(" Vvedite element", - j,": ") ;
read (mas[j]);
s:=s+mas [j];
end;
s1:=s/r;
end;
begin { головна програма}
for i:=1 to 3 do begin
write ("Vvedite razmer ",i, " masiva: ");
readln(n);
work (n, sum, sr); {виклик процедури work}
writeln ("Summa elementov = ",sum);
writeln ("Srednearifmeticheskoe = ",sr:4:1);
end;
readln;
end.

Результат роботи програми:

У програмі тричі викликається процедура work, в якій формальні змінні r, s, s1 замінюються фактичними n, sum, sr. Процедура виконує введення елементів масиву, обчислює суму і середнє значення. Змінні s і s1 повертаються в головну програму, тому перед їх описом ставиться службове слово var. Локальні параметри mas, j діють лише в процедурі. Глобальні - i, n, sum, sr доступні у всій програмі.

 

Опції в Паскале

Набір вбудованих функцій в мові Паскаль досить широкий (ABS, SQR, TRUNC і т.д.). Якщо у програму включається нова, нестандартна функція, то її необхідно описати в тексті програми, після чого можна звертатися до неї з програми. Звернення до функції здійснюється в правій частині оператора присвоювання, з вказівкою імені функції та фактичних параметрів. Функція може мати власні локальні константи, типи, змінні, процедури і функції. Опис функцій в Паскале аналогічно опису процедур. Відмітні особливості функцій:

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

Приклад 3. Написати підпрограму-функцію ступеня аx, де a, х - будь-які числа. Скористаємося формулою: аx = ex ln a

program p2;
var f, b, s, t, c, d : real; { глобальні параметри}
function stp (a, x : real) : real;
var y : real; { локальні установки}
begin
y := exp (x * ln ( a)) ;
stp:= y;{присвоєння імені функції результату обчислень подпр-ми}
end; { опис функції закінчено }
begin {початок основної програми }
d:= stp (2.4, 5); {обчислення різних ступенів чисел і змінних }
writein (d, stp (5,3 .5));
read (f, b, s, t); c := stp (f, s)+stp (b, t);
writeln (c);
end.

Результат роботи програми:

 

Рекурсія

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

Приклад 4. Скласти рекурсивне функцію, яка обчислює факторіал числа n наступним чином: n! = 1 , якщо n= 1 і n!= ( n -1 )! · n , якщо n > 1

function f ( n : integer): integer;
begin
if n = 1 then f := 1 else f := n * f ( n -1 ); { функція f викликає саму себе}
end;

Переглядів: 1262

Повернутися взміст


Онлайн система числення Калькулятор онлайн звичайний Науковий калькулятор онлайн