Процедури та функції у паскалі презентація. Процедури та функції у Паскалі. Рекурсія Підпрограми Часто завдання потрібно повторити певну послідовність операторів у різних частинах програми. ІІІ. Пояснення нового матеріалу

19.11.2020 Цікаве

Мета уроку

освітня

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

виховна

  • виховати акуратність, увагу, організованість;
  • культура обчислювальних навичок;

розвиваюча

  • розвинути логічне мислення, алгоритмічну культуру учнів;
  • розвинути знання та вміння складати та налагоджувати підпрограми мовою Паскаль.

Учні повинні:

  • знати правила запису процедур без параметрів та з параметрами;
  • знати правила запису функцій;
  • вміти застосовувати процедури та функції під час вирішення простих завдань.

Хід уроку

I. Орг. момент

ІІ. Вступ. Актуальність

Видати завдання на листочках ( Додаток 1 ). Знайти повтори.

Іноді в різних місцях програми доводиться виконувати практично ті самі послідовності дій з різними вихідними даними. Такі послідовності дій можна оформити як так званих підпрограм (Від англ, subroutine) -згрупувати оператори в блок, до якого можна звернутися на ім'я, причому неодноразово.

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

Підпрограми поділяються на процедури та функції.

Вбудовані (стандартні) процедури та функції є частиноюмови і можуть викликатися на ім'я без попереднього опису.Наприклад , abs, sqrt, ln, sin…- функції (повертають результат), readln, write… – процедури (не повертають результат). Їх наявність значно полегшує розробку прикладних програм. Однак у більшості випадків деякі специфічнідля цієї програми дії не знаходять прямих аналогів у бібліотеках Turbo Pascal, і тоді програмісту доводиться розробляти свої нестандартніпроцедури та функції.

ІІІ. Пояснення нового матеріалу

Процедури користувача пишуться самимпрограмістом відповідно до синтаксису мови в розділ опису підпрограм.

Структура процедури повторює структуру програми, це "програма в мініатюрі" - вона також представлена ​​заголовком та тілом.

Заголовок складається із зарезервованого слова procedure, ідентифікатора (імені)процедури.

VAR … // розділ опису змінних головної програми

procedure Ім'яПроцедури;

//Тіло головної програми

Виклик процедури для подальшого виконання записується у тілі головної програми.

приклад 1. Програма обчислення площі та периметра.

Переваги підпрограм:

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

приклад 2. Користувач вводить дві сторони трьох прямокутників. Вивести їх площу.

Можна вирішити завдання так:

for i:=1 to 3 do

writeln('Введіть a та b:');

writeln ( 'Площа = ', a * b);

Хорошим стилем програмування є використання процедур. Необхідна процедура, яка обчислюватиме площу прямокутника. Ось як схематично виглядатиме головна програма:

обчислення

обчислення

обчислення

Процедура тексту вже є (див. приклад1). Створимо другу процедуру, яка обчислює площу. Але для того, щоб обчислити S, треба знати 2 сторони, тому процедурі треба показати які сторони вона повинна перемножувати.

procedure pl (c, d: integer);

writeln( 'площа прямокутника зі сторонами ',c, ' ',d, '=',S);

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

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

Фактичні параметри повинні збігатися за типом та кількістю з формальними.

Отже, головна програма:

for i:=1 to 3 do

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

Складемо процедуру перевірки:

procedure error (f, g: integer);

if (f<0) or (g<0) then begin

writeln('сторони прямокутника не можуть бути негативними');

halt; // переривання програми

Підсумкова програма – Додаток 4

Отже формат процедури:

Procedure<имя>(Формальні параметри);

<операторы>;

приклад 3. Скласти програму обміну місцями двох чисел з=5 та d=7.

program obmenDan;

var c,d:integer;

procedure obmen (a, b: integer);

m:=a; a:=b; b:=m;

writeln ("Введіть 2 числа:");

writeln(c," ",d);

Після запуску програми видно, що змінилися місцями формальні параметри (у процедурі), а фактичні (які використовуються у лавній програмі) – не змінилися. Розглянемо малюнок, на якому наведено частину оперативної пам'яті:

1) при виклику процедури obmen з двома параметрами 5 і 7, змінні a і b поміщаються також числа 5 і 7 відповідно:

3) але у змінних c і d дані змінилися, т.к. вони знаходяться в інших осередках пам'яті.

Для того, щоб змінні c і d, a і b посилалися на одні й ті ж осередки пам'яті (якщо зміняться значення a і b, то зміняться значення c, d) необхідно при описі формальних параметрів, перед потрібними змінними додати слово VAR:

procedure obmen (var a, b: integer);

Змініть програму obmenDan:

Помилка через var. Числа – константи, які не можна змінювати у процедурі.

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

procedure circle (r:real);

Процедура має повертати результат:

procedure circle (r:real; var S:real);

readln(a, e);

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

Найчастіше у Паскалі замість процедур використовують функції (підпрограми, які щось повертають).

Функція аналогічна процедурі, але є дві відмінності.

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

Наприклад, sqr(x) – зведе до квадрата значення х і поверне до точки виклику обчислене значення квадрата числа х: y:=sqr(x);

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

Function<имя>(формальні параметри):<тип результата>;

<операторы>;

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

Приклад 5. Переробимо завдання про площу кола.

function circle (r:real): real;

a:=circle(5); (ОБОВ'ЯЗКОВО привласнюємо)

Приклад 6. Знайти 1! +2! + ... + N!

Використовуємо функцію знаходження факторіалу, тому що подаємо на вхід і отримуємо результат.

function fact (a:integer): integer;

for i:=1 to a do

У рядку fact: = fact * I;

компілятор знайде помилку, тому що fact повинна викликатися з параметрами. Тому обов'язково вводять додаткову змінну, яку поміщають результат. А потім у змінну fact надають цей результат:

program factorial;

var sum, n, j: integer;

function fact (a: integer): integer;

var i,d: integer;

for i:=1 to a do

for j:=1 to n do

sum:=sum+fact(j);

IV. Підсумок уроку

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

V. Домашнє завдання

Розв'язати завдання (писемно):

  1. Скласти процедуру, яка у введеному рядку замінює усі літери a на *.
  2. Надано дві пропозиції. Знайти загальну кількість букв "н" у них. (Визначити функцію розрахунку кількості букв “н” у реченні.)


Підпрограми в Turbo Pascal


  • Підпрограма це іменована логічно закінчена група команд, яку можна викликати для виконання будь-яку кількість разів з різних місць програми.

Причини використання підпрограм

  • спростити розробку великих програм методом декомпозиції (поділу) завдання на кілька підзавдань;
  • велика наочність програми;
  • економія пам'яті

Види підпрограм

процедури

функції

  • Процедура– це незалежна іменована частина програми, призначена до виконання конкретних действий.

Процедури без параметрів

  • Формат запису :

procedure ;

end ;

  • Усі змінні, які використовуються у процедурах без параметрів, описуються в основній програмі (модулі Var).

приклад . Скласти програму знаходження об'єму циліндра.

Program cylinder;

Var R, H, V: real;

Procedure Input; (Процедура введення даних)

Writeln ('введіть значення радіусу');

writeln ('введіть значення висоти');

Procedure formula; { процедура обчислення обсягу }

V: =PI*sqr(R)*H;

Procedure Output; (Процедура виведення результатів)

writeln ('V=',V);


Процедури c параметрами

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

Процедури c параметрами

  • Глобальні змінні

приклад .

Program zadacha;

Var a, b: integer;

Procedure lokal;

Var a, x: char; Для процедури lokal:

begin змінна x – локальна змінна

a:=’! '; (Програма не може змінити її значення)

b: = b +1; змінна b – глобальна змінна

end; (Всі зміни значення цієї змінної у процедурі

BEGIN зберігаються і після виходу із процедури)

b:=100; змінна a в основній програмі цілого типу,

lokal; а у процедурі – символьного типу. Змінна а

writeln ('a =', a); цілого типу недоступна у процедурі lokal.

writeln ('b=',b);

Результат виконання програми: а = 0; b = 101.


); begin; end; " width="640"

Передача параметрів у Turbo Pascal

  • 1. Передача параметрів за значенням
  • Параметри-значення змінні, описані після імені процедури у круглих дужках. Перед ними відсутнє службове слово Var.
  • Формат запису :

procedure (:

змінної);

end ;


  • формальними параметрами .
  • фактичними параметрами .

приклад .

Program parameter;

Var m, n: integer;

Procedure summa (a, b: integer);

writeln ('S=',S);

summa (m,n); або summa (100,10);

Змінні a і b є формальними параметрами, а змінні m і n - Фактичними. Значення фактичних параметрів m =100 і n =10 передаються формальним параметрам a і b .

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


; Var змінної:); begin; end; " width="640"

Передача параметрів у Turbo Pascal

  • 2. Передача параметрів на ім'я
  • Параметри-змінні змінні, описані після імені процедури у круглих дужках та перед якими записано службове слово Var .
  • Формат запису :

procedure (:

змінної; Var

змінною:);

end ;



b then min: = b; якщо min c then min:= c; end; BEGIN writeln ('введіть три числа'); readln (a1, b1, c1); writeln (' введіть три числа'); readln (a2, b2, c2); minimum (a1, b1, c1, min1); minimum (a2, b2, c2, min2); S: = min1 + min 2; writeln ('S=', S); END. приклад. Дано дві трійки чисел: a 1, b 1, c 1 і a 2, b 2, c 2. Знайти значення суми: S=min (a1, b1, c1) + min (a2, b2, c2) " width=" 640"

Var a1, b1, c1, a2, b2, c2, min1, min2, S: real;

Procedure minimum (a, b, c: real; Var min: real);

якщо min b then min:= b;

якщо min c then min:= c;

writeln ('введіть три числа');

readln (a1, b1, c1);

writeln (' введіть три числа');

readln (a2, b2, c2);

minimum (a1, b1, c1, min1);

minimum (a2, b2, c2, min2);

S: = min1 + min 2;

writeln ('S=', S);

приклад. Дано дві трійки чисел: a 1, b 1, c 1 і a 2, b 2, c 2. Знайти значення суми: S = min (a1, b1, c1) + min (a2, b2, c2)


Функція- Це підпрограма, результатом роботи якої є певне значення.

  • Формат запису :

function (:

end ;

  • У тілі функції імені функції необхідно присвоїти результат її виконання.
  • При виклику функції її ім'я із зазначенням списку фактичних параметрів має бути включено до виразу як операнд.

Program вираження;

функція modul (a: real) : real;

writeln ('введіть значення змінної');

y:= modul (x-3) + modul (x+6);

writeln ('y=', y);

приклад . Обчислити значення виразу: y = | x-3 | + | x+6 |

8 клас. Програмування мовою ABC Pascal

Вчитель інформатики НІШ м. Уральська ФМН Зеленов Борис Олександрович


  • Учні використовують процедури та функції для вирішення завдань
  • Учні навчаються вирішувати об'ємні завдання, розкладаючи їх на дрібніші

  • Сформувати поняття про процедури та функції у мові програмування.

  • Учні знають поняття «процедури» та «функції», визначає формальні та фактичні параметри

Очікувані результати - Дескриптори:

1.Знає визначення «процедури»

2.Знає визначення «функції»

3.Визначає фактичні та формальні параметри

4.Розрізняє параметри значень та змінних

5.Знаходить звернення до процедури або функції програмного коду



Стандартний план Ельвіри

1. Прибрати папірці

2. Полити квіти

3. Помити парти

4. Витерти шибки

Кінець алгоритму

Як покращити організацію цього процесу?




Тема урока

Підпрограми:


Ішки бағдарлама

Підпрограма

Процедура

Процедура

Параметрлер

Корисні фрази:

Для передачі значень змінних процедуру (функцію) використовуються фактичні параметри …

Щоб описати процедуру, слід спочатку…., потім…


Поняття підпрограми

Визначення

Підпрограма- Це окрема функціонально незалежна частина програми.

Підпрограми

Процедури


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

  • Намалювати паркан, використовуючи мову програмування

У цьому завдання можна створити процедуру яка виконуватиме алгоритм малювання одного фрагмента (штакетника), а потім постійно звертатися до цієї процедури, змінюючи початкове положення пера


  • Опишіть як раціонально виконати малюнок ялинки серед програмування

  • Є самостійні фрагменти програм, оформлені особливим чином і мають власне ім'я.

Взаємодія основної програми та підпрограми



Блок-схема

  • Блок виклику підпрограми (процедури або функції)

Ім'я підпрограми (процедури чи функції)


Блок-схема


Опис процедури має вигляд:

procedureім'я (список формальних параметрів); розділ описів beginоператори end ;


Опис функції має вигляд:

functionім'я (список формальних параметрів): тип значення, що повертається;

розділ описів beginоператори end ;


Розміщення у програмі

Program ...;

//Розділ описів Uses, Const, Var, …

procedure A ;

begin ....... end ;

procedure B ;

begin ........ end ;

Function C ;

begin ........ end ;

//Основна програма

begin ........ end .


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

Процедури

Функції

Може мати кілька результатів або виконувати певну дію

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

Результатами може бути значення будь-якого типу масиви, рядки, числа тощо.

Результат може бути лише значенням типу real, integer чи char.

Команда виклику процедури – окрема команда, що використовується самостійно

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

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


b then max:=a else max:=b; MaxNumber:=max; end;" width="640"

Процедура чи функція?

MaxNumber(a,b: integer): integer;

var max: integer;

MaxNumber:=max;


b then max:=a else max:=b; end;" width="640"

Процедура чи функція?

MaxNumber(a,b: integer; var max: integer);

if ab then max:=a else max:=b;


Процедура чи функція?

ChangeColor(C1, C2: Word);

TextBackGround(C2)


Процедура чи функція?

Add(X, Y: Integer): Integer;


Фактичні

  • Вказуються у розділі основної програми

Формальні

  • Вказуються у підпрограмі
  • Вказуються у підпрограмі

Виклик процедури здійснюється оператором, який має наступний формат:

ім'я процедури (список фактичних параметрів);

  • Список фактичних параметрів- це їх перерахування через кому.

  • У стандарті мови Паскаль передача параметрів може здійснюватися двома способами - за значенням та посиланням. Параметри, що передаються за значенням, називають параметрами-значеннями, що передаються за посиланням - параметрами-змінними. Останні відрізняються тим, що у заголовку процедури (функції) їх ставиться службове слово var.

Передача параметрів. Формальні параметри

Змінні

Значення

Параметри за значенням

Формальні параметри

Змінні


Формальні параметри

Параметри за значенням

  • При першому способі (передача значення) значення фактичних параметрів копіюються у відповідні формальні параметри.

Процедура

Procedure Name (a, b: integer);

Основна програма

При зміні цих значень під час виконання процедури (функції) вихідні дані (фактичні параметри) не можуть змінитися


Var c, d: integer;

  • Під час передачі посилання всі зміни, що відбуваються в тілі процедури (функції) з формальними параметрами, призводять до негайних аналогічних змін відповідних їм фактичних параметрів.

Процедура

Procedure Name (a, b: integer, Var c: real);

Основна програма

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


Ви пишите:

1.Фактичні параметри ___________

Procedure Kvad(R: real; var S: real);

2. Формальні параметри ___________

3. Формальні параметри-значення __________

5.Ім'я процедури ___________

6.Звернення до процедури із програми _____________________


Інтерактивне завдання

http://www.bzfar.net/load/podprogrammy_procedury_i_funkcii_parametry/23-1-0-498


Ельвір староста класу. Їй належить скласти план виконання генерального прибирання у класі: прибрати папірці, полити квіти, помити парти, витерти шибки. Як краще організувати роботу? Допоможіть Ельвірі.


Просунутий план Ельвіри

Підпрограми:

Арсен – прибирає папірці

Мила – поливає квіти

Віталій – миє парти

Індіра – витирає шибки

1. Виконати Арсен

2. Виконати Міла

3. Виконати Віталій

4. Виконати Індіра

Кінець алгоритму


  • З якими новими структурами мови програмування ми сьогодні познайомились?
  • Назвіть вивчені параметри
  • Як передаються параметри процедури?

  • Конспект уроку
  • Знайти визначення: «Локальні змінні» та «Глобальні змінні»
  • Скласти дві задачі, у яких можна використовувати процедури чи функції.

  • Як ви визначили б тему уроку? (Придумайте свою назву)
  • Що, на вашу думку, ви маєте дізнатися на наступному уроці?

Зустрінемось

на наступному уроці!

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


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


Процедури та функції У мові Паскаль існує два види підпрограм: процедура (PROCEDURE) та функція (FUNCTION). Процедури та функції в Паскалі оголошуються в розділі опису розділу змінних. Program Ім'яПрограми; VAR … // Розділ опису змінних головної програми; procedure Ім'яПроцедури; var … begin … // Тіло процедури end; begin // Тіло головної програми end.


У функцій і процедур існують параметри (змінні, які передають якесь значення). Вони бувають двох видів: 1) Формальні – ті, що знаходяться в описі підпрограми 2) Фактичні – ті, що передаються з основної програми в функцію чи процедуру. Фактичні параметри повинні відповідати формальним за кількістю, порядком слідування та типом.




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


Приклад 1. Процедура без параметрів, яка друкує рядок із 60 зірочок. procedure pr; var i: integer; begin for i:=1 to 60 do write (* "); writeln; end; begin pr; end.


Приклад 2. Скласти програму обміну місцями двох чисел з=5 та d=7 program obmenDan; var c,d:integer; procedure obmen (a, b: integer); var m:integer; begin m:=a; a:=b; b:=m; writeln(a,b); end; begin writeln ("Введіть 2 числа:"); readln(c,d); obmen(c,d); writeln(c," ",d); end. с5 d 7 a 5 b 7 1) при виклику процедури obmen з двома параметрами 5 і 7, змінні a і b поміщаються також числа 5 і 7 відповідно: 2) далі в процедурі здійснюється перестановка значень осередків пам'яті a і b: с5 d 7 a 7 b 5 3) але змінних c і d дані не змінилися, т.к. вони знаходяться в інших осередках пам'яті


Для того щоб змінні c і d, a і b посилалися на ті самі клітинки пам'яті (якщо зміняться значення a і b, то зміняться значення і c, d) необхідно при описі формальних параметрів, перед потрібними змінними додати слово VAR: procedure obmen (var a, b: integer); с5 d 7 a b


Приклад 3. Дано 3 різних масиву цілих чисел (розмір кожного не перевищує 15). У кожному масиві знайти суму елементів та середньоарифметичне значення. program proc; var i, n, sum: integer; sr: real; procedure work (r:integer; var s:integer; var s1:real); var mas: array of integer; j: integer; begin s:=0; for j:=1 до r до початку 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; end.


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


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




Приклад 4. Написати підпрограму-функцію ступеня а x де a, х – будь-які числа. Скористаємося формулою: x = e x 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); (обчислення ступенів різних чисел та змінних) writeln (d, stp (5,3.5)); read (f, b, s, t); c: = stp (f, s) + stp (b, t); writeln (c); end.


Функції Підпрограма частина програми, оформлена у вигляді окремої синтаксичної конструкції та має ім'я (самостійний програмний блок), для вирішення окремих завдань. Опис процедури: procedure() (розділ виконання локальних імен) Begin (розділ виконання операторів) End; Опис функції: function(): тип; (розділ опису локальних імен) Begin (розділ операторів, що виконуються) := ; (Обов'язковий параметр) End; Виклик процедури: (); Виклик функції: = (); 1. У правій частині оператора присвоєння. 2. У виразі, що стоїть за умови оператора розгалуження. 3. У процедурі виведення, як наслідок роботи функції. Опис підпрограм Процедури


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


1 function f (n: integer): integer; begin if n = 1 then f:= 1 else f:= n * f (n -1); (функція f викликає сам "title="(!LANG:Приклад 5. Скласти рекурсивну функцію, що обчислює факторіал числа 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 викликає сам" class="link_thumb"> 19 !}Приклад 5. Скласти рекурсивну функцію, яка обчислює факторіал числа 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; 1 function f (n: integer): integer; begin if n = 1 then f:= 1 else f:= n * f (n -1); (функція f викликає сам"> 1 function f (n: integer): integer; begin if n = 1 then f: = 1 else f: = n * f (n -1); "> 1 function f (n: integer): integer; begin if n = 1 then f:= 1 else f:= n * f (n -1); (функція f викликає сам" title="(!LANG:Приклад 5. Скласти рекурсивну функцію, що обчислює факторіал числа n наступним чином: n!=1, якщо n=1 n!=(n-1)!· n, якщо n > 1 function n = 1 then f:= 1 else f:= n * f (n -1);(функція f викликає сам"> title="Приклад 5. Скласти рекурсивну функцію, яка обчислює факторіал числа 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 викликає сам"> !}



Рекурсія у ПаскаліВчитель: Тлехурай Ю.В. МОУ «Ліцей №8» Що ви бачите на картинах? Це явище в мистецтві називається рекурсією Щоб зрозуміти рекурсію, потрібно спочатку зрозуміти рекурсію. рекурсія – часткове визначення об'єкта через себе, визначення об'єкта з використанням раніше визначених. Науково висловлюючись: Рекурсія - метод визначення класу об'єктів чи методів попереднім завданням одного або кількох (зазвичай простих) його базових випадків чи методів, а потім завданням на їх основі правила побудови класу, що визначається. Пітер Дойч Пітер Дойч

Ітерація від людини.

Рекурсія – від Бога.

Рекурсія у фізиціРекурсія у мові та літературі Класичним прикладом нескінченної рекурсії є два поставлені один навпроти одного дзеркала: у них утворюються два коридори із загасаючих відбитків дзеркал. Іншим прикладом нескінченної рекурсії є ефект самозбудження (позитивної зворотнього зв'язку) у електронних схемпосиленняколи сигнал з виходу потрапляє на вхід, посилюється, знову потрапляє на вхід схеми і знову посилюється. Підсилювачі, котрим такий режим роботи є штатним, називаються автогенератори. Приклад рекурсивної словникової статті: «У попа був собака…» - типова рекурсія Декілька оповідань Станіслава Лема присвячені казусам при нескінченній рекурсії: Розповідь про сепульки («Зоряні щоденники Йона Тихого»), в якому герой послідовно переходить від статті про сепульки до статті про сепульки , звідти до статті про сепулькарії, в якій знову стоїть посилання до статті «сепульки» Розповідь про розумну машину, яка мала достатній розум і лінощі, щоб для вирішення поставленого завдання побудувати собі подібну, і доручити рішення їй (підсумком стала нескінченна рекурсія, коли кожна нова машина будувала собі подібну і передавала завдання їй). Рекурсія в програмуванні - це спосіб організації обчислювального процесу, у якому процедура чи функція під час виконання складових її операторів звертається сама себе. Для того, щоб таке звернення не було нескінченним, у тексті підпрограми має бути умова, для якої подальшого звернення не відбувається. таким чином, рекурсивне звернення може включатись лише в одну з гілок підпрограми. приклад. Обчислення факторіалу натурального числа Скласти рекурсивну функцію, яка обчислює факторіал числа n наступним чином: function f (n: integer): longint; begin if n = 1 then f:= 1 else f:= n * f(n -1); (функція fвикликає саму себе) end Програма на Паскалі, використовуючи рекурсію: Var n: integer; a: longint; функція factorial (n: integer): longint; begin if n = 1 then factorial:= 1 else factorial:= n * factorial (n -1); End; Begin Write('n='); Readln(n); A: = factorial (n); Write ('n!=',a); Readln; end. Леонардо Пізанський Фібоначчі

Числа Фібоначчі – це елементи числової послідовності

0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, …, в якій кожне наступне число дорівнює сумі двох попередніх.

Завдання: Вивести на екран ряд чисел Фібоначчі, що складається із n елементів. Опис змінних: n – кількість елементів низки; a, b – значення двох останніх елементів низки; c – буферна («запасна») змінна; i – лічильник. Алгоритм розв'язання задачі: 1. Отримати значення n. 2. Присвоїти a та b значення 0 і 1 відповідно (це перші числа ряду Фібоначчі). Вивести їх на екран. 3. Починаючи з 3-го елемента по n: a) виводити на екран суму a та b; b) зберегти значення змінної b у c; c) записати у b суму a та b; d) присвоїти a значення с. Програма мовою Паскаль використовуючи ітерацію: program Fibonacci; var a, b, c, i, n: integer; begin write("n = "); readln(n); a: = 0; write(a," "); b: = 1; write(b," "); for i:=3 to n do begin write(a+b," "); c:= b; b: = a + b; a:= c; end; readln; end. Програма мовою Паскаль використовуючи рекурсію:Рекурсивне визначення для обчислення чисел Фібоначчі має такий вигляд: Це визначення чисел Фібоначчі легко перетворити на рекурсивну функцію: function f(n: Integer) : longint; begin If n<= 1 Then f:= n else f:= f(n– 1) + f(n - 2); end; Program chislaFibonacci; var n,i: integer; a: longint; function fib (n: integer): longint; begin If n <= 1 Then fib:= n else fib:= fib(n– 1) + fib(n - 2); End; begin write(‘n=’); readln(n); for i:=0 to n do begin A:= fib (n); write (‘ ’,a); end; readln; end. Домашнее задание Написать программу нахождения НОД двух натуральных чисел, используя алгоритм Евклида и рекурсию Даны два натуральных числа аі b.Якщо а= b,то нід ( а,b) = а.Якщо а>b,то нід ( а,b)=нід ( а -b,b).Якщо а< b,то нід ( а,b)=нід ( а,b-а). Program noddxxіsel; var a, b: longint; function nod(a,b:longint): longint; begin If a = b Then nod : = a else if a> b then nod : = nod (a-b, b) else nod: = nod (a, b-a) End; begin write('a='); readln(a); write('b='); readln(b); A:= nod(a,b); write('nod=',a); readln; end. Завдання про Ханойські вежі. При цьому обов'язково повинні дотримуватися таких правил:

  • за один раз можна переміщувати лише один диск;
  • більший диск не можна розміщувати на меншому диску;
  • знятий диск необхідно надіти на будь-який шпиль перед тим, як буде знятий інший диск.
  • Працьовиті буддійські ченці день і ніч переносять диски зі шпиля на шпиль. Легенда стверджує, що коли ченці закінчать свою роботу, настане кінець світу. Можна було б підрахувати, що для вирішення задачі з 64 дисками потрібно 264-1 переміщень. Тому що стосується кінця світу, то він станеться через п'ять мільярдів століть, якщо вважати, що один диск переміщається за одну секунду. Втім, і завдання, і легенду для неї придумав у 1883 математик Едуард Люка з коледжу Сен-Луї.

На одному з трьох алмазних шпилів одягнено 64 круглі золоті диски. Диски мають різні радіуси і розташовані на шпилі в порядку зменшення радіусів від основи до вершини. Потрібно перенести диски з першого шпиля на другий, використовуючи за потреби і третій шпиль.

Завдання. Скласти рекурсивну програму, яка б вирішувала поставлене вище завдання про Ханойські вежі при кількості дисків, що дорівнює n (n = 1, 2, …). Рішення. Введемо імена для шпилів: a, b, c. Нехай hanoi(n,a,b,c)- потрібна функція, що повертає послідовність переміщень дисків з aна bз використанням cза вищеописаними правилами. При n=1 розв'язувати задачу ми вміємо. Необхідно просто зробити операцію “перемістити aна b”. Припустимо, ми вміємо вирішувати це завдання для n – 1 диска. Перемістимо n-1 диск з aна з. Далі, перемістимо один диск, що залишився з aна bі, нарешті, перемістимо n-1 диск з cна b. Вхідні дані: кількість дисків, що знаходяться на кілочку a; Вихідні дані: послідовність дій; Крок0: (визначення типу змінних); Крок1: (опис процедури hanoi, яка виводить послідовність дій); Крок1.1:(перемістити (n-1) дисків з кілочка a на кілочок b); Крок 1.2: (перемістити n-ий диск з a на c); Крок1.3:(перемістити (n-1) диск з b на c); (Кроки 1.2-1.3 виконуються рекурсивно); Крок2: (основна програма); Крок2.1: (введення кількості дисків); Крок2.2: (виклик процедури hanoi). Розв'язання задачі у Паскалі Program bahnya; var n: integer; a, b, c: char; procedure hanoi (n: integer; a, b, c: char); begin if n>0 then begin hanoi(n-1,a,c,b); writeln ("Peremestit disk so sterzhnya ",a,"na sterzhen" ",b); hanoi(n-1,c,b,a); end; end; n);a:="a";b:="b";c:="c";hanoi(n,a,c,b);readln;end. Домашнє завдання Написати програму обчислення ступеня з натуральним показником Дано: основа ступеня хПоказник ступеня до Якщо к = 0, тоді ступінь (к, х) = 1, інакше ступінь (к, х) = х · ступінь (к-1, х) Program stepen; var y: real; n: integer; function step(k:integer, x:real): real; begin If k = 0 Then step:= 1 else step:= x * step(k-1, x) End; begin write('vvedite osnovanie stepeni x='); readln(y); write('vvedite pokazatel stepeni k='); Readln(n); write('x v stepeni k=',step(n,y)); readln; end. Самостійна робота

  • Знайти суму цифр числа
  • Визначити, чи є задане натуральне число простим
  • Знайти першу цифру числа
  • Перекласти натуральне число з десяткової с. у двійкову
  • Знайти суму елементів цілісного масиву, що складається з 20 елементів
  • Поміняти місцями значення двох цілих чисел
  • Упорядкувати значення трьох змінних а, в, зу порядку їх зростання
  • Знайти кількість цифр у натуральному числі n
  • Знайти найбільше із трьох даних чисел
  • Знайти кількість позитивних чисел серед чотирьох А, В, С, Д
Відповіді самостійної роботи №2 Program prostoe; var n, m, s: integer; function prost(m, n:integer): boolean; begin If n = m Then prost:= true else prost:= (n mod m<>0) and prost (m+1, n); End; begin write('n='); Readln(n); M:=2; If prost(m,n) then write (n,'prostoechislo') Else write (n,'sostavnoe'); readln; end.

program perevod;

procedure dvd(n:longint);

If n >1 Then dvd (n div 2);

write (n mod 2);