Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
34
Добавлен:
07.02.2016
Размер:
100.35 Кб
Скачать

Var x1: byte absolute d;

x2: word absolute d;

x3: longint absolute d;

begin

case sizeof(d)

1: writeln(‘ 1 байт’);

2: writeln(‘ 2 байта’);

4: writeln(‘ 4 байта’);

end;

end;

В описаній програмі використовується механізм absoluteвикористання пам’яті. Він допускає розміщення змінних у тій ділянці пам’яті, яка вже відведена для іншої змінної. Нехай в якомусь блоці описана змінна А. Опис змінної В виду

var B: t absolute A;

де Т – деякий тип, задає розміщення змінної В в тій же ділянці пам’яті, в якій вже розміщено змінну А.

У випадку такого опису нова область для нової змінної не відводиться. Крім того, змінні А та В можуть бути будь-яких типів, в тому числі і різних типів. Вони можуть займати різний об’єм пам’яті. Ніяких перевірок в цьому випадку не виконується. Можна вважати, що такий опис задає розміщення змінних А та В, починаючи з однієї адреси комірчин пам’яті. Таке суміщення пам’яті для різних змінних використовується для досягнення більшої ефективності об’єктного коду програми, і для уникнення використання громіздких операторів перетворення типу змінних у деяких випадках. Особливо це корисно при використанні нетипізованих змінних.

Крім локальних об’єктів розглядають також поняття глобальних об’єктів. Вони визначаються до опису підпрограми. Область дії глобальних об’єктів - вся програма, включаючи всі підпрограми. Для глобальних об’єктів не можна змінювати їх тип у підпрограмі. Але в програмі та в підпрограмі глобальні об’єкти можуть мати різне значення. Це може привести до помилки при виконанні програми. Такі помилки визначають ефект, який називають побічним (хвильовим). Виникає цей ефект, коли до таких змінних в підпрограмі використовують оператор присвоювання, або глобальний об’єкт використовують як параметр - змінну. Тому краще дуже обережно використовувати глобальні об’єкти при побудові підпрограм.

Функції.

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

function ім’я_функції(список_форм._параметрів: тип_форм._пар.):тип_функції;

розділ опису функції;

begin

розділ операторів функції

end;

Серед операторів функції обов’язковим є оператор присвоювання, в якому імені функції присвоюється кінцеве значення.

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

Приклад 3.1. Скласти функцію обчислення n!.

function fact(n:integer): longint;

Var y: longint;

i: integer;

begin

y:=1;

for i:=1 to n do

y:=y*i;

fact:=y;

end;

Приклад 3.2. Скласти функцію обчислення xk, де k- натуральний показник:

function st(x:real; k:integer): real;

var y: real;

i: integer;

begin

y:=1;

for i:=1 to k do

y:=y*x;

st:=y;

end;

А тепер ще декілька прикладів, які використовують функцію.

Приклад 3.3 Скласти функцію, яка знаходить мінімальне значення з двох заданих величин.

function min(a,b:real): real;

begin

if a>b then min:= b else min := a;

end;

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

function pr(n:integer): boolean;

var i: integer;

begin

pr:= true;

for i:=2 to n-1 do

if n mod i = 0 then pr:= false;

end;

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

Приклад 3.5.

Обчислити

Обчислення завершити, коли модуль наступного доданка буде менше за наперед задане е.

Для побудови програми використаємо функції обчислення факторіалу та степеня числа з натуральним показником:

{Опис глобальних змінних}

var x,y,e,a :real;

n: integer;

{Опис функції обчислення факторіалу k!}

function fact(k:integer): longint;

var g: longint;

i: integer;

begin

y:=1;

for i:=1 to k do

g:=g*i;

fact:=g;

end;

{Опис функції обчислення }

function st(x:real; k:integer): real;

var g: real;

i: integer;

begin

g:=1;

for i:=1 to k do

g:=g*x;

st:=g;

end;

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

begin

writeln(‘x,e’);

readln(x,e);

y:=0;

n:=1;

repeat

a:=st(-1,n-1)*st(x,n)/fact(3*n-1);

y:=y+a;

n:=n+1;

until abs(a)<e;

writeln(‘y=’,y:8:4);

end.

На цьому прикладі дуже чітко видно, що програма, в якій використовується функція, легко читається та аналізується. Так, в задачі два рази треба обчислити степінь чисел. Тому є сенс використати функцію, яка розроблена в прикладі 3.2. При цьому нам треба при виклику функції відповідно до завдання один раз використати замість параметру х значення –1, а другий раз значення х. Замість параметру k перший раз використовується значення показника n-1, а другий раз – значення показника n. У знаменнику використовуємо функцію знаходження факторіалу числа 3n-1. Текст самої програми не захаращений циклами. А самі функції можна взагалі описати в окремому файлі, а потім тільки викликати їх у заданий момент. Але про цю можливість ми поговоримо трохи пізніше.

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

Функція може не мати параметрів. Тоді після імені функції іде опис її типу. У мові Pascal передбачена можливість виклику функції як процедури, а не в будь-якому операторі. Це введення зроблено по аналогії з мовою С.

Соседние файлы в папке конспект лекцій 1 паск