Відкриті та замкнені процедури

Відповідно до способу зв'язування з основною програмою процедури ділять на відкриті та замкнені.

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

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

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


2)Сумісність типів

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

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

Два типи вважаються сумісними у виразах, якщо виконується хоча б одна з наступних умов:

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

Розглянемо декілька прикладів сумісності у виразах. В одному виразі можна використовувати дійсні та цілочислові операнди (1+2.5). Під час обчислення такого виразу спочатку цілочисловий операнд перетворюється на дійсний, а потім виконується зазначена операція над дійсними значеннями. Операнди можуть мати різні цілочислові типи. Якщо один операнд знаковий, а другий беззнаковий, обидва перетворюються до цілочислового знакового типу, якому можуть належати значення обох операндів і який вимагає найменшого обсягу оперативної пам'яті. Наприклад, операнди типів shortint і byte перетворюються на операнди типу integer, операнди типів shortint і word — на операнди типу longint. Якщо обидва операнди мають знакові цілочислові типи, або обидва мають беззнакові цілочислові типи, то операнд типу, що потребує меншого обсягу оперативної пам'яті, перетворюється на операнд типу, що вимагає більшого обсягу оперативної пам'яті (наприклад, операнд типу shortint перетворюється на операнд типу integer, операнд типу integer — на операнд типу longint, а операнд типу byte — на операнд типу word).

Під час виконання оператора присвоєння значення змінній обов'язково потрібно враховувати сумісність типів. Тип значення виразу є сумісним за присвоєнням із типом змінної, якій це значення надається, якщо виконується одна із таких умов:

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

Отже, у програмі дані одного типу можуть перетворюватися на дані іншого типу. Таке перетворення типів може бути явним або неявним. Явне перетворення типів здійснюється за допомогою вбудованих функцій, аргументи яких мають один тип, а значення, що вони їх повертають, мають інший тип (функції ord, trunc, round, chr, ptr). Також явне перетворення типів можна здійснити шляхом запису перед узятим у круглі дужки виразом, тип якого перетворюється, ідентифікатора типу, на який тип виразу потрібно перетворити, наприклад: byte(false), integer('X'), char(60)). Якщо змінна zz має тип byte, кожне з присвоєнь char(zz): = 'А' та zz:=byte('A') надасть цій змінній значення 65, а присвоєння shortint(zz):=-100 - значення 156 (максимальне значення типу byte дорівнює 255, вводиться значення -100, результат після перетворення типу становитиме 255 + 1 - 100 = 156).

У прикладі 2.10 демонструється принцип використання операцій явного перетворення типів. На рис. 2.9 наведено результати роботи програми ех2_5.

Приклад 2.10

program ex2_5;
var
intvar:integer;
symbolvar:char;
begin
writeln('Converting types');
writeln('Enter integer ');
readln(intvar);
writeln('byte(intvar)=',byte(intvar));
writeln('Enter character ');
readln(symbolvar);
writeln('integer(symbolvar)=',integer(symbolvar));
writeln('char(intvar+5)=',char(intvar+5));
writeln('byte(false)=',byte(false));
readln;
end.

Рис. 2.9. Результати роботи програми ех2_5. Перетворення типів

Демонстрація прикладу

Неявне перетворення типів здійснюється при використанні в одному виразі або в одному операторі присвоєння сумісних, але різних типів даних.

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

Натомість, якщо деяке ціле значення виходить за межі діапазону допустимих значень певного цілочислового типу, назвемо його Т, то перетворення типу цього значення на Гдо помилки не призведе, але частина бітів у двійковому записі даного значення буде відкинута. Наприклад, значення виразу byte (260) дорівнює 4, оскільки 4 — це значення молодшого байта двохбайтового числа 260.

Оператор присвоєння

Оператор присвоєння - це один із найчастіше використовуваних операторів у Pascal -програмах.

Він використовується для знаходження значення виразів, присвоєння змінним потрібних значень і ін. Формат оператора присвоєння: Змінна:= вираз; Наприклад X:= 5; Y:= sin(X)/ln(X) + exp(X); Не потрібно плутати оператор присвоєння (:=) з операцією порівняння (=), що використовується при перевірці умови, а також при описі констант (розділ const) та типів даних (розділ type).


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: