вівторок, 2 червня 2020 р.

Структура процедури мовою програмування Pascal



До цього моменту часу ми використовували з розділу описів тільки опис змінних і типів. На цьому занятті ми почнемо вивчати процедури. Структура процедури повторює структуру програми.

Зразок структурного програмування процедури(підпрограми)
procedure  <имя процедуры> (<параметри>);
label
   <розділ опису міток>;
const
   < розділ опису констант>;
type
   < розділ опису типів даних>;
var
   < розділ опису змінних>;

<процедури та функції >;
begin
   <основное тело процедуры>;
end;

Напишемо для прикладу просту програму з процедурою, що додає два числа.

Кодування мовою програмування Pascal;
program  pr1;
var
  a, b, c: integer;
procedure sum(x, y: integer; var z: integer);
begin
  z := x + y;
end;
begin
  write('Введіть два числа: ');
  readln(a, b);
  sum(a, b, c); {процедура викликається своїм іменем, яке ви написали після зарезервованого слова procedure в описі}
  writeln(c);
end.



Звернемося до прикладу, наведеного на малюнку вище. Зліва наведено фрагмент тексту основної програми, праворуч - процедура. Як тільки в тілі програми оголошується ім'я процедури з параметрами, виконання «головного» тіла припиняється, і управління обчислювальними процесами передається процедурі. Після виконання процедури здійснюється повернення на оператор основної програми, наступний за викликом процедури.

При описуванні процедури вказується список формальних параметрів. Кожен параметр є локальним по відношенню до описуваної процедури, до нього можна звертатися тільки в межах даної процедури (в нашому прикладі х, у, z - формальні параметри). Фактичні параметри - це параметри, які передаються процедурі при зверненні до неї (а, b, с - фактичні параметри). Число і тип формальних і фактичних параметрів повинні збігатися з точністю до їх слідування.
Іншими словами, передача параметрів за значенням. Копія фактичного параметра стає значенням відповідного формального параметра. Усередині процедури можна проводити будь-які дії з даними формальним параметром (допустимі для його типу), але ці зміни ніяк не відбиваються на значенні фактичного параметра, тобто яким він був до виклику процедури, то таким же і залишиться після завершення її роботи (х, у - параметри-значення).
Іншими словами, передача параметрів по посиланню. Це ті формальні параметри, перед якими стоїть ідентифікатор var. Передається адреса фактичного параметра (обов'язково змінної), після цього формальний параметр стає його синонімом. Будь-які операції з формальним параметром виконуються безпосередньо над фактичним параметром.
 Функція виглядає майже так само, як і процедура. Єдина відмінність в тому, що заголовок функції починається з ключового слова Function і закінчується типом повертаємого цією функцією значення.

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

Приклади кодування  допоміжної функції мовою програмування Pascal:

Program Zad1;
var
  a, b, c: integer;
function sum(x, y: integer): integer;
begin
  sum := x + y;
end;
begin
  readln(a, b);
  writeln(sum(a, b));
end.

Або так:

Program Zad2;
var
  a, b, c: integer;
function sum(x, y: integer): integer;
begin
  result := x + y;
end;
begin
  readln(a, b);
  writeln(sum(a, b));
end.



Завдання для самостійного опрацювання
Завдання 1. Закодувати процедуру PowerA3(A, B), що обчислює третю степінь(куб) числа А і  повертає її в змінній В(А - вхідні дані; В - вихідні дані, обидва змінні є дійсними числами). За допомогою цієї процедури знайти третю степінь для шести даних чисел.
Завдання 2. Закодувати процедуру Mean(X, Y, AMean, GMean), що обчислює середнє арифметичне  AMean = (X+Y)/2 і  середнє геометричне GMean = (X * Y)^0.5 двох додатних чисел Х та У  повертає її  змінним AMean і GMean відповідно,(Х, У - вхідні дані; Amean,GMean - вихідні дані, обидва змінні є дійсними числами). За допомогою цієї процедури знайти середнє арифметичне і середнє геометричне для пари даних чисел(А;В), (А;С), (А;К), якщо дані А,В,С,К.
Завдання 3. Закодувати процедуру TrianglePS(a, P, S), що по даній стороні рівностороннього трикутника обчислює його периметр P = 3*a, площу a*a *(3)^0.5, повертає її  змінним P та S відповідно,(а - вхідні дані; P та S - вихідні дані, обидва змінні є дійсними числами). За допомогою цієї процедури знайти площу та периметр трикутників для трійки сторін(А;А;А), (С;С;С), (В;В;В), якщо дані А,В,С.
Завдання 4. Закодувати процедуру AddRightDigit(Р, K), що доповнює до цілого додатного числа К праворуч цифру Р, повертає її  змінним P та S відповідно,(К, Р (від 0 до 9)- вхідні цілі дані; К - вихідні дані, обидва змінні є цілими числами). За допомогою цієї процедури доповнити до даного числа К праворуч спочатку цифру Р1 а потім доповнити праворуч цифру Р2. Вивести результат кожного обновлення даного  числа.
Завдання 5. Закодувати процедуру AddRightDigit(Р, K), що доповнює до цілого додатного числа К ліворуч цифру Р, повертає її  змінним P та S відповідно,(К, Р (від 0 до 9)- вхідні цілі дані; К - вихідні дані, обидва змінні є цілими числами). За допомогою цієї процедури доповнити до даного числа К ліворуч спочатку цифру Р1 а потім доповнити ліворуч цифру Р2. Вивести результат кожного обновлення даного  числа.

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

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