Структура опису процедур і функцій до деякої міри схожа на структуру Паскаль-программы : у них також є заголовок, розділ описів і виконувана частина. Розділ описів містить ті ж підрозділи, що і розділ описів програми : опису констант, типів, міток, процедур, функцій, перменных. Виконувана частина містить власне оператори процедур.
Формат опису процедури має вигляд:
procedure ім'я процедури (формальні параметри); розділ описів процедуриbegin виконувана частина процедури end;
Формат опису функції :
function ім'я функції (формальні параметри) :тип результату; розділ описів функціїbegin виконувана частина функції end;
Формальні параметри в заголовку процедур і функцій записуються у виді:
var ім'я праметра : ім'я типу
і відділяються один від одного крапкою з комою. Ключове слово var може бути відсутнім (про це далі). Якщо параметри однотипні, то їх імена можна перераховувати через кому, вказуючи загальне для них ім'я типу. При описі параметрів можна використовувати тільки стандартні імена типів, або імена типів, визначені за допомогою команди type.Список формальних параметрів може бути відсутнім.
Виклик процедури робиться оператором, що має наступний формат :
ім'я процедури(список фактичних параметрів);
Список фактичних параметрів - це їх перерахування через кому. При виклику фактичні параметри як би підставляються замість формальних, таких, що стоять на тих же місцях в заголовку. Таким чином відбувається передача вхідних параметрів, потім виконуються оператори виконуваної частини процедури, після чого відбувається повернення в зухвалий блок. Передача вихідних параметрів відбувається безпосередньо під час роботи виконуваної частини.
Виклик функції в Турбо Паскаль може робитися аналогічним чином, крім того є можливість здійснити виклик усередині якого-небудь вираження. Зокрема ім'я функції може стояти в правій частині оператора привласнення, в розділі умов оператора if і так далі
Для передачі в зухвалий блок вихідного значення функції у виконуваній частині функції перед поверненням в зухвалий блок необхідно помістити наступну команду:
ім'я функції := результат;
При виклику процедур і функцій необхідно дотримувати следущие правила:
· кількість фактичних параметрів повинна співпадати з кількістю формальних;
· відповідні фактичні і формальні параметри повинні співпадати по порядку дотримання і за типом.
Помітимо, що імена формальних і фактичних параметрів можуть співпадати. Це не призводить до проблем, оскільки що відповідають їм змінні все одно будуть різні через те, що зберігаються в різних областях пам'яті. Крім того, усі формальні параметри є тимчасовими змінними - вони створюються у момент виклику підпрограми і знищуються у момент виходу з неї.
Розглянемо використання процедури на прикладі програми пошуку максимуму з двох цілих чисел.
var x, y, m, n: integer; procedure MaxNumber(a, b: integer; var max: integer);begin if a>b then max:=a else max:=b;end; begin write('Введіть x, y '); readln(x, y); MaxNumber(x, y, m); MaxNumber(2, x+y, n); writeln('m=', m', n=', n);end.
Аналогічне завдання, але вже з використанням функцій, можна вирішити так:
var x, y, m, n: integer; function MaxNumber(a, b: integer) : integer; var max: integer;begin if a>b then max:=a else max:=b; MaxNumber:= max;end; begin write('Введіть x, y '); readln(x, y); m:= MaxNumber(x, y); n:= MaxNumber(2, x+y); writeln('m=', m', n=', n);end.
A[I]:= Trunc(Random*101) - 50Write(A[I]VVV')
End
End.
З обробкою лінійних масивів пов'язана безліч завдань. Їх ми розглянемо на практичних заняттях.
Двовимірні і багатовимірні масиви
Уявіть собі таблицю, що складається з декількох рядків. Кожен рядок складається з декількох осередків. Тоді для точного визначення положення осередку нам потрібно буде знати не одно число (як у разі таблиці лінійної), а два: номер рядка і номер стовпця. Структура даних в мові Паскаль для зберігання такої таблиці називається двовимірним масивом. Описати такий масив можна двома способами:
VarA : Array [1.20] Of Array [1.30] Of Integer;
II. VarA : Array [1.20,1.30] Of Integer;
У обох випадках описаний двовимірний масив, що відповідає таблиці, що складається з 20 рядків і 30 стовпців. Приведені описи абсолютно рівноправні.
Окремий елемент двовимірного масиву адресується, природно, двома індексами. Наприклад, осередок, що знаходиться в 5-му рядку і 6-му стовпці називатиметься A[5][6] чи A[5,6].
Для ілюстрації способів роботи з двовимірними масивами вирішимо завдання: "Задати і роздрукувати масив 10X10, що складається з цілих випадкових чисел в інтервалі [1,100]. Знайти суму елементів, що лежать вище за головну діагональ".
При відліку, починаючи з лівого верхнього кута таблиці, головної рахуватимемо діагональ з лівого верхнього кута таблиці в правий нижній. При цьому виходить, що елементи, що лежать на головній діагоналі матимуть однакові індекси, а для елементів вище за головну діагональ номер стовпця завжди перевищуватиме номер рядка. Домовимося також спочатку вказувати номер рядка, а потім - номер стовпця.