Поможем написать учебную работу
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.

Предоплата всего

Подписываем
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Предоплата всего
Подписываем
Тема: Організація обміну даними між процедурами та функціями.
В розділі формальних параметрів перераховуються імена формальних параметрів, а потім називається їх тип. Таким чином, кожне опис формальних параметрів з точки зору синтаксису виглядає так само, як і опис змінних в розділі змінних. Перед деякими описами ставиться службове слово Var. Такі параметри називаються параметрами-змінними. Якщо перед описом службове слово Var не варто, це - параметри-значення.
Оператор процедури має вигляд:
< имя > або < имя > (< список фактичних параметрів >)
Приклад операторів процедури:
Picture
Power(( a + b )/2, 3, degree, root )
Integral ( 0, P/2, 1E-6, SUMMA)
Зверніть увагу на відповідність між заголовком процедури і оператором процедури. Між списками формальних і фактичних параметрів встановлено взаємно-однозначна відповідність, певну їх місцями в списках. Це відповідність ілюструється наступним прикладом:
Приклад. Розглянемо заголовок процедури і оператор цієї процедури:
Procedure Integral ( a, b, eps: real; var s: real );
Integral ( -Pi/2, Pi/2, 1E-6, summa );
Відповідність:
Формальний параметр Фактичний параметр
Значение a Выражение - Pi/2
Значение b Выражение Pi/2
Значение eps Данное 1E-6
Переменная s Переменная Summa
Як було зазначено вище, параметри бувають 2-х видів: параметри-значення та параметри-змінні. Якщо перед описом параметрів ніякого службового слова ні, мова йде про параметри-значеннях. Перед описом параметрів-змінних ставиться службове слово Var. При зверненні до процедури (в процесі виконання оператора процедури) формальним параметрам-значенням присвоюються значення відповідних фактичних параметрів, а замість імен формальних параметрів-змінних підставляються відповідні фактичні параметри-імена змінних, а потім виповнюється підпрограма, описана процедурою.
Якщо х1, х2 ,..., хn - фактичні параметри-змінні, відповідні формальним параметрам-змінним v1, ... , Vn, то x1, x2, ..., xn повинні бути різними. Фактичними параметрами-значеннями можуть бути вирази або дані відповідних типів.
Розглянемо приклад:
Приклад. Програма обчислює координати точки (x0, y0) при послідовних поворотах і паралельних перенесення системи координат.
Program Coordinates;
Const Pi = 3.141592;
Var Alfa, Beta : Real;
x0, y0, x1, y1, x2, y2 : Real;
x, y : Real;
Procedure Rotate(x, y, Fi: Real; var u, v: Real );
var cosFi, sinFi : Real; { локальные переменные }
begin
Fi := Fi*Pi/180 ;
cosFi := Cos(Fi); sinFi := Sin(Fi);
{ параметры x, y защищены от глобальных переменных x, y }
u := x * cosFi - y * sinFi ;
v := x * sinFi + y * cosFi
end ;
Procedure Move(x, y, a, b : Real; var u, v: Real);
begin
u := x + a ; v := y + b
end;
begin
Read (x0, y0); Read (Alfa);
Rotate(x0, f0, alfa, x, y);
Read (x1, y1);
Move(x, y, x1, y1, x, y);
Read (Beta);
Rotate(x, y, Beta, x, y);
Read ( x2, y2 );
Move(x, y, x2, y2, x, y);
Writeln (================================);
Writeln (абсцисса точки : , х);
Writeln (ордината точки : , y);
end.
Параметри-значення використовуються для передачі даних у процедуру. Це означає, що для параметра-значення на час виконання процедури резервується пам'ять, розмір якої визначений типом параметра і яка заповнюється при виклику процедури. Таким чином, використання параметрів-значень при передачі даних великого об'єму може призвести до невиправданих витрат часу процесора й адресовані пам'яті.
Нехай, наприклад, мінлива A типу Sequence - масив з 1000 дійсних чисел і Procedure MaxMin (X: Sequence; var Max, Min: Real) - пошук максимального і мінімального елементів масиву X. Тоді при зверненні до процедури MaxMin за допомогою оператора MaxMin (A, Sup, Inf) компілятор виділить пам'ять (6 - 10 байт на кожен елемент масиву - всього 6000 - 10000 байт) і здійснить 1000 циклів пересилання чисел з A в X. Якщо ж параметр X визначити як параметр-змінну: Procedure MaxMin (var X: Sequence; var Max, Min: Real) ні пам'яті, ні пересилань не знадобиться.
Параметри константи.
Ці параметри подібні параметрами значень за тим винятком, що їх значення не можна змінювати в підпрограмі. Їх не можна також передавати (усередині підпрограми) іншим підпрограми як параметри змінні. Разом з тим, коли передається посилання на об'єкт (як параметр константа), властивості об'єкта модифіковані можна.
Використання параметрів констант дозволяє компілятору оптимізувати код для строкових і структурних параметрів. Крім того, це забезпечує також захист від ненавмисному передачі параметра другий підпрограмі як параметр змінної.
Вихідні параметри.
Ці параметри (out parameters), подібно параметрам змінним, також передаються по посиланню. Разом з тим початкове значення вихідного параметра ігнорується, так як він призначений тільки для повернення результату. Наприклад,
procedure GetInfo (out Info: SomeRecordType);
Оператор
процедуры
Имя
процедури
(
)
Фактичний
параметр
,