Термінова допомога студентам
Дипломи, курсові, реферати, контрольні...

Основные поняття алгоритмічного языка

РефератДопомога в написанніДізнатися вартістьмоєї роботи

Функція FilePos (var f): Longint повертає поточну позицію у файлі f. Позиція в файлі — це номер умовної кордону. Для відкритого файла поточної позицією буде кордон зі номером 0. Це значит, які можна записати чи прочитати блок з номером 1. Після читання чи записи першого блоку поточна позиція переміститься на межу з номером 1, і можна буде потрапити звертатися до ьлоку з номером 2. Після інтения… Читати ще >

Основные поняття алгоритмічного языка (реферат, курсова, диплом, контрольна)

Основні поняття алгоритмічного языка.

1. Про З М Про У М И Є П Про М Я Т І Я.

А Л Р Про Р І Т М І Ч Є З До Про Р Про Я З И До А.

СКЛАД МОВИ. Звичайний розмовну мову складається з чотирьох основних елементів: символів, слів, словосполучень і від пропозицій. Алгоритмический мову містить подібні елементи, лише слова називають элементарными конструкціями, словосочетания-выражениями, предложения-операторами. Символи, елементарні конструкції, вислови й оператори становлять ієрархічну структуру, оскільки елементарні конструкции утворюються з послідовності символів, выражения-это последовательность елементарних конструкцій і символів, а оператор-последовательность висловів, елементарних конструкцій і символов.

ОПИС МОВИ є опис чотирьох названих елементів. Опис символів залежить від перерахування допустимих символів мови. Під описом елементарних конструкцій розуміють правила їх образования.

Опис выражений-это правила освіти будь-яких висловів, мають зміст у даному мові. Опис операторів складається з розгляду всіх типів операторів, допустимих у мові. Опис кожного елемента мови задається його СИНТАКСИСОМ і СЕМАНТИКОЮ. Синтаксичні определения встановлюють правила побудови елементів мови. Семантика определяет зміст і правила використання тих елементів мови, котрим було дано синтаксичні определения.

СИМВОЛИ языка-это основні неподільні знаки, в термінах яких пішутся все тексти на языке.

ЕЛЕМЕНТАРНІ КОНСТРУКЦІЇце мінімальні одиниці мови, мають самостійний сенс. Вони з основних символів языка.

ВИРАЗ в алгоритмическом мові складається з елементарних конструкций і символів, воно задає правило обчислення деякого значения.

ОПЕРАТОР задає повне опис деякого дії, яке необходимо виконати. Для описи складного дії може знадобитися група операторів. І тут оператори об'єднують у СОСТАВНОЙ.

ОПЕРАТОР чи БЛОК.

Дії, задані операторами, виконуються над ДАНИМИ. Предложения алгоритмічного мови, у яких даються інформацію про типах даних, називаються ОПИСАМИ чи неисполняемыми операторами.

Об'єднана єдиним алгоритмом сукупність описів і операторів утворює ПРОГРАМУ на алгоритмическом языке.

У процесі вивчення алгоритмічного мови необхідно відрізняти авгоритмический мову від мови, з допомогою якого здійснюється опис досліджуваного алгоритмічного мови. Зазвичай изучаемый мову называют просто мовою, а мову, в термінах якого дається опис досліджуваного мови — МЕТАЯЗЫКОМ.

Синтаксичні визначення може бути задано формальними абоформальним способами. Існують три формальних способа:

— металингвистическая символіка, звана Бэкуса-Наура формулами;

— синтаксичні диаграммы;

— скобочные конструкции.

Ми з наступному викладі користуватимемося неформальним способом.

2. Про З М Про У М И Є З І М У Про Л Ы.

Основні символи языка-буквы, цифри і спеціальні символы-составляют його алфавіт. ТУРБО ПАСКАЛЬ включає наступний набір основних символов:

1) 26 латинських малих літер і 26 латинських прописних букв:

A B З D E F G H I J K L M N O P Q R P. S T U V W X Y Z a b з d e f g h і j k l m n o p q r p. s t u v w x y z.

2) _ подчеркивание.

3) 10 цифр:

0 1 2 3 4 5 6 7 8 9.

4) знаки операций:

+ - * / = < > = := @.

5) ограничители:

., «() [ ] (. .) { } (* *).: ;

6) спецификаторы:

^ # $.

7) службові (зарезервовані) слова:

ABSOLUTE EXPORTS LIBRARY SET.

ASSEMBLER EXTERNAL MOD SHL.

AND FAR NAME SHR.

ARRAY FILE NIL STRING.

ASM FOR NEAR THEN.

ASSEMBLER FORWARD NOT TO.

BEGIN FUNCTION OBJECT TYPE.

CASE GOTO OF UNIT.

CONST IF OR UNTIL.

CONSTRUCTOR IMPLEMENTATION PACKED USES.

DESTRUCTOR IN PRIVATE VAR.

DIVX INDEX PROCEDURE VIRTUAL.

DO INHERITED PROGRAM WHILE.

DOWNTO INLINE PUBLIC WITH.

ELSE INTERFACE RECORD XOR.

END INTERRUPT REPEAT.

EXPORT LABEL RESIDENT.

Крім названих, в набір основних символів входить прогалину. Пробілі не можна використовувати всередині здвоєних символів і зарезервованийных слов.

3. Еге Л Є М Є М Т, А Р М И Є До Про М З Т Р У До Ц І И.

Елементарні конструкції мови ПАСКАЛЬ містять у собі імена, числа і строки.

Імена (ідентифікатори) називають елементи мови — константи, мітки, типи, перемінні, процедури, функції, модулі, об'єкти. Ім'я — це селледовательность літер і цифр, начинающаяся з літери. У іменах може івкористуватися символ _ підкреслення. Ім'я може містити довільне кількість символів, але значущими є 63 символа.

Не дозволяється у мові ПАСКАЛЬ використовувати як імен служебные слова стандартні імена, якими названі стандартні константы, типи, процедури, функції і файлы.

Заради покращання наочності програми у ній можуть уставлятися пробілы. По крайнього заходу один прогалину потрібно вставити між двома послідовними іменами, числами чи службовими і стандартними именами. Прогалини не можна використовувати всередині імен та чисел.

Приклади імен мови ПАСКАЛЬ:

A b12 r1m SIGMA gamma I8086.

Числа у мові ПАСКАЛЬ зазвичай записуються в десяткової системі числення. Вони може бути цілими і дійсними. Позитивний знак числа то, можливо опущений. Цілі числа записуються у вигляді без десяткової точки, например:

217 -45 8954 +483.

Справжні числа записуються у вигляді з десяткової точкою чи формі з допомогою десяткового порядку, який змальовується буквою Е:

28.6 0.65 -0.018 4.0 5Е12 -1.72Е9 73.1Е-16.

ПАСКАЛЬ допускає запис цілих чисел і фрагментів дійсних чисел у вигляді з порядком в шестнадцатиричной системі счисления:

$7 °F $ 40 $ABC0.

Рядки у мові ПАСКАЛЬ — це послідовність символів, записаноная між апострофами. Якщо рядку як змістовного цимвола необхідно вжити сам апостроф, слід записати два апострофа. Приклади строк:

" РЯДОК «» STRING «» ПРОГРАМА «» АТ «» ЮТАНТ «.

4. До Про М Ц Є П Ц І Я Т І П А.

Д Л Я Д, А М М И Х.

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

Після обробітку даних на ЕОМ така класифікація ще більше важлива. У кожному алгоритмическом мові кожна константа, змінна, вираз чи функція бувають певного типа.

У мові ПАСКАЛЬ існує правило: тип явно поставив у описі перемінної чи функції, яке передує їх використанню. Концепция типу мови ПАСКАЛЬ має такі основні свойства:

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

— тип значення, задаваемого константою, перемінної чи вираженням, можна визначити з їхньої виду чи описанию;

— кожна операція чи функція вимагає аргументів фіксованого типа видає результат фіксованого типа.

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

Тип определяет:

— можливі значення змінних, констант, функцій, висловів, приналежних до цього типу;

— внутрішню форму уявлення даних в ЭВМ;

— операції, і функції, що потенційно можуть виконуватися над величинами, які належать до цього типу.

Обов’язкове опис типу призводить до надмірних з тексту программ, але таке надмірність є важливим допоміжним средством розробки програм, тож сприймається як необхідне властивість сучасних алгоритмічних мов високого рівня. У мові ПАСКАЛЬ існують скалярні і структуровані типи данных.

До cкалярным типам ставляться стандартні типи і типи, определяемые пользователем.

Стандартні типи включають цілі, справжні, символьний, логічні і адресний типи. Типи, зумовлені користувачем, — перечисляемый і интервальный.

Структуровані типи мають чотири різновиду: масиви, множества, запису і файлы.

Крім названих, TURBO PASCAL включає решта 2 типу — процедурный і объектный.

Групу скалярних типів можна назвати порядкові типи, які характеризуються такими свойствами:

— всіх можливих значення порядкового типу є обмежений упорядкований множество;

— до будь-якого порядковому типу можна застосовувати стандартна функція Ord, що як результату повертає порядковый номер конкретного значення даному типе;

— до будь-якого порядковому типу можна буде застосувати стандартні функції Pred і Succ, які повертають попереднє і підущее значення соответственно;

— до будь-якого порядковому типу можна буде застосувати стандартні функции Low і High, які повертають найменше і найбільше значення величин даного типа.

У мові ПАСКАЛЬ запроваджені поняття еквівалентності і сумісності типов.

Два типу Т1 і Т2 є еквівалентними (ідентичними), якщо виконується з двох условий:

— Т1 і Т2 є одним і те ім'я типа;

— тип Т2 описаний із використанням типу Т1 з допомогою рівності чи послідовності рівностей. Например:

type.

T1 = Integer;

T2 = T1;

T3 = T2;

Менш суворі обмеження визначено сумісністю типів. Напризаходів, типи є сумісними, если:

— вони эквивалентны;

— є обидва або цілими, або действительными;

— один тип — интервальный, інший — його базовый;

— обидва интервальные із загальним базовим; один тип — строковый, інший — символьный.

У ТУРБО ПАСКАЛЬ обмеження на сумісність типів можна обминути з допомогою приведення типів. Приведення типів дозволяє розглядати те ж величину у пам’яті ЕОМ як приналежну різним типам.

І тому використовується конструкция.

Имя_Типа (переменная чи значение).

Напрмер,.

Integer («Z »).

є значення коду символу «Z «в двухбайтном поставшилении цілого числа, а.

Byte (534).

дасть значення 22, оскільки ціла кількість 534 має тип Word і занимает два байта, а тип Byte цікавить одне байт, і під час приведення старший байт буде отброшен.

5. З Т, А М Д, А Р Т М И Є Т І П Ы.

Д, А М М И Х.

До стандартним ставляться цілі, справжні, логічні, символьний і адресний типы.

ЦІЛІ типи визначають константи, перемінні і функції, значення яких реалізуються безліччю цілих чисел, допустимих у цій ЭВМ.

тип діапазон значень необхідна память.

__________________________________________________________.

Shortint -128. 127 1 байт.

Integer -32 768. 32 767 2 байта.

Longint -2 147 483 648. 2 147 483 647 4 байта.

Byte 0. 255 1 байт.

Word 0. 65 535 2 байта.

__________________________________________________________.

Над цілими операндами можна виконувати такі арифметичні операції: складання, віднімання, множення, розподіл, отримання залишку від розподілу. Знаки цих операций:

+ - * divx mod.

Результат арифметичній операції над цілими операндами є величину цілого типу. Результат здійснення операції розподілу цілих величин є ціла частину приватного. Результат здійснення операції отримання залишку від розподілу — залишок від розподілу цілих. Например:

17 divx 2 = 8, 3 divx 5 = 0.

17 mod 2 = 1, 3 mod 5 = 3.

Операції відносини, застосовані до цілим операндам, дають результат логічного типу TRUE чи FALSE (істина чи нахабна брехня).

У мові ПАСКАЛЬ є такі операції відносини: рівність =, нерівність, більше або одно >=, менше, або одно, менше < .

До аргументів цілого типу застосовні такі стандартні (вмонтованийные) функції, результат виконання яких має тип:

Abs (X), Sqr (X), Succ (X), Pred (X),.

і який визначають відповідно абсолютне значення Х, Х в квадрате, Х+1, Х-1.

Наступна група стандартних функцій для аргументу цілого типу такет дійсний результат:

Sin (X), Cos (X), ArcTan (X), Ln (X), Exp (X), Sqrt (X).

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

Результат виконання функції перевірки цілої величини на нечетность.

Odd (X) має значення істина, якщо аргумент непарний, і значення брехня, якщо аргумент четный:

X=5 Odd (X)=TRUE, X=4 Odd (X)=FALSE.

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

Inc (X) X:=X+1.

Inc (X, N) X:=X+N.

Dec (X) X:=X-1.

Dec (X, N) X:=X-N.

СПРАВЖНІ типи визначає ті дані, яка реалізується підмножиною дійсних чисел, допустимих у цій ЭВМ.

Тип Діапазон Кількість цифр Необхідна значень мантиси пам’ять (байт).

———————————————————————————————;

Real 2.9e-39. 1.7e+38 11 6.

Single 1.5e-45. 3.4e+38 7 4.

Double 5.0e-324. 1.7e+308 15 8.

Extended 3.4e-4932. 1.1e+4932 19 10.

Comp -9.2e+18. 9.2e+18 19 8.

———————————————————————————————;

Тип Real визначено у стандартному ПАСКАЛЕ і математичним сопроцессором не поддерживается.

Інші справжні типи визначено стандартом IEEE 457 і реализованы усім сучасних компьютерах.

Для їх використання за наявності співпроцесора або за роботі на.

ЕОМ типу 80 486 необхідно компілювати програму з ключем {$ N+}, а за відсутності співпроцесора — з ключами {$N-, E+}.

Тип Comp хоч і належить до дійсним типам, зберігає лише довгі цілі значения.

Над дійсними операндами можна виконувати такі арифметические операції, дають дійсний результат:

складання +, віднімання —, множення *, розподіл / .

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

Одне з операндов, що у цих операціях, то, можливо целым.

До дійсним аргументів застосовні функції, дають действительный результат:

Abs (X), Sqr (X), Sin (X), Cos (X), ArcTan (X), Ln (X), Exp (X),.

Sqrt (X), Frac (X), Int (X), Pi.

Функція Frac (X) повертає дробову частина X, функція Int (X) — цілу частина X.

Безаргументная функція Pi повертає значення числа Пі действительного типа.

До аргументів дійсного типу застосовні також функции.

Trunc (X) і Round (X),.

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

ЛОГІЧНИЙ тип (Boolean) визначає ті дані, що потенційно можуть принимать логічні значення TRUE і FALSE.

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

not and or xor.

Логічний тип визначено в такий спосіб, що FALSE < TRUE. Це позволяет застосовувати до булевским операндам усі фінансові операції отношения.

У ТУРБО ПАСКАЛЬ запроваджені ще різновиду логічного типа:

ByteBool, WordBool і LongBool, на які припадає у пам’яті ЕОМ один, дві, і чотири байта соответственно.

СИМВОЛЬНИЙ тип (Char) визначає впорядковану сукупність симвовилов, допустимих у цій ЕОМ. Значення символьній перемінної чи константи — це одне символ з припустимого набора.

Символьна константа може записуватися з тексту програми трьома способами:

— одностайно символ, укладений у апострофи, например:

" A «» a «» Ю «» ю " ;

— з допомогою конструкції виду #K, де K — код соответствущего символа, у своїй значення K мусить знаходитися межах 0.255;

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

До величинам символьного типу застосовні усі фінансові операції отношения.

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

Ord© Chr (K).

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

К-ом місці у традиційному наборі символів. Порядковий номер має тип.

До аргументів символьного типу застосовуються функції, які определяют попередній і подальший символы:

Pred© Succ©. Pred («F ») = «E »; Succ («Y ») = «Z » .

За відсутності попереднього чи наступного символів значення зіответствующих функцій не определено.

Для літер з інтервалу «a ». «z «застосовна функція UpCase©, котораю переводить ці літери у верхній регістр «A ». «Z » .

АДРЕСНИЙ тип (Pointer) визначає перемінні, що потенційно можуть содержати значення адрес даних чи фрагментів програми. Для зберігання адреси потрібні два слова (4 байта), одне з яких визначає сегмент, друге — смещение.

Фундаментальна обізнаність із адресними перемінними (покажчиками) розглядатиметься пізніше, зараз відзначимо, що з отримання значення адреси будь-якої перемінної введена унарная операція @.

6. До Про М З Т, А М Т Ы.

Тип констант у мові ПАСКАЛЬ визначається з їхньої виду: константи цілого типу — це цілі числа, які містять десяткової точки, константы дійсного типу — справжні числа, логічні константы — логічні значення TRUE і FALSE, символьні константи — або рядки у один символ, або конструкції виду #K чи ^K.

Мова ПАСКАЛЬ допускає використовувати синоніми для позначення констант, у разі текст програми містить розділ описи констант, наприклад: {}.

7. П Є Р Є М Є М М И Е.

І М І Ц І А Л І З, А Ц І Я П Є Р Є М Є М М И Х.

Тип змінних визначається користувачем розділ описи переменных:{}.

Нині у професійному програмуванні прийнято записувати імена змінних з допомогою так званої венгерсдідька лисого нотации.

Угорська нотація — цю угоду про найменуваннях змінних і державних функцій. Угоду широко використовується при програмуванні на язиках PASCAL, З і серед WINDOWS.

Угорська нотація полягає в наступних принципах:

— імена змінних та зняття функцій повинні містити префікс, описує їх тип;

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

Префікси записуються малими літерами, першу букву кожного слова — заголовна, префікси слова записуються або разом, або через цимвіл _ (подчеркивание).

Для мови PASCAL можуть бути рекомендовані такі префікси для скалярних змінних і функций:

Префікс Тип.

——————————- by Byte sh Shortint і Integer w Word l Longint r Real si Single d Double e Extended з Comp ch Char b Boolean p Pointer x, у координати символу чи крапки на экране.

Для величин структурованого типу можна використовувати слідующие префиксы:

a Array p. s String sz Stringz se Set re Record f File t Text.

Например:

rV, arVector[1.20], sName, iCount.

У откомпилированной програмі всім змінних відведено місце у пам’яті, та знайоме всім змінним надано нульові значения.

Для завдання початкових значень змінним (ініціалізації змінных) TURBO PASCAL дозволяє присвоювати початкові значення змінним одночасно з їхнім описом. І тому використовується конструкция.

ім'я перемінної: тип = значение;

що має бути розміщена розділ описи констант, например:

const rWeight: Real = 0.4;

8. У И Р, А Ж Є М І Я.

Вислів складається з констант, змінних, покажчиків функцій, знаків операцій та скобок. Вислів задає правило обчислення некоторого значення. Порядок обчислення визначається старшинством (приоритетом) його операцій. У мові ПАСКАЛЬ прийнято наступний пріоритет операций:

1. унарная операція not, унарный мінус -, взяття адреси @.

2. операції типу множення * / divx mod and shl shr.

3. операції типу складання + - or xor.

4. операції відносини = < > = in.

{}.

Висловлювання входять до складу багатьох операторів мови ПАСКАЛЬ, і навіть може бути аргументами вбудованих функций.

9. Про П Є Р, А Т Про Р П Р І З У, А І У, А М І Я.

Тип перемінної і тип висловлювання мають співпадати крім випадку, когтак вираз належить до цілого типу, а змінна — до справдіму. У цьому відбувається перетворення значення вислови до дійсному типу.{}.

10. Про П Є Р, А Т Про Р И У У Про Д А.

І У И У Про Д А.

Розглянемо організацію введення та виведення даних із термінального вустройства. Термінальне пристрій — цей прилад, з яким працює користувач, зазвичай екран (дисплей) і клавиатура.

Для введення та виведення даних використовуються стандартні процедури введення та виведення Read і Write, які оперують стандартними послідовними файлами.

INPUT і OUTPUT.

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

Для введення вихідних даних використовуються оператори процедур ввода:

Read (A1,A2,…AK);

ReadLn (A1,A2,…AK);

ReadLn;

Перший реалізує читання До значень вихідних даних, і присваивание цих значень змінним А1, А2, …, АК. Другий оператор реалізує читання До значень вихідних даних, перепустку інших значений на початок наступній рядки, присвоювання лічених значень переменным А1, А2, …, АК. Третій оператор реалізує перепустку рядки івходных данных.

При введення вихідних даних відбувається перетворення із зовнішнього форми подання в внутрішню, котру визначаємо типом змінних. Перемінні, що утворюють список введення, можуть належати або до цілого, або до дійсному, або до символьному типам. Читання вихідних даних логічного типу у мові ПАСКАЛЬ недопустимо.

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

var rV, rS: Real; iW, iJ: Integer; chC, chD: Char;

Read (rV, rS, iW, iJ);

Read (chC, chD);

Значення вихідних даних можуть відокремлюватися друг від друга прогалинами і натисканням клавіш табуляції і Enter.

Для виведення результатів роботи програми на екран використовуються операторы:

Write (A1,A2,…AK);

WriteLn (A1,A2,…AK);

WriteLn;

Перший із цих операторів реалізує висновок значень змінних А1,.

А2,…, АК в рядок екрана. Другий оператор реалізує висновок значень змінних А1, А2, …, АК і до початку наступного рядки. Третій оператор реалізує перепустку рядки — і перехід до початку наступного строки.

Змінні, складові список виведення, можуть ставитися до цілого, дійсному, символьному чи булевскому типам. Як элемента списку виведення крім імен змінних можна використовувати вислови й строки.

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

Форма уявлення значень на полі виведення відповідає типу перемінних і висловів: величини цілого типу виводяться як цілі десятичные числа, дійсного типу — як справжні десяткові числа з десятковим порядком, символьного типу, і рядки — як цимволів, логічного типу — як логічних констант TRUE і FALSE.

Оператор виведення дозволяє поставити ширину поля виведення кожному за елемента списку виведення. І тут елемент списку виведення має вигляд А: К, где.

А — вираз чи рядок, До — вираз або константа цілого типа.

Якщо виведене значення посідає у полі виведення менше позицій, ніж До, та над цим значенням розташовуються прогалини. Якщо виведене значение не міститься у ширину поля До, то тут для цього значення буде отведено необхідну кількість позицій. Для величин дійсного типу елемент списку виведення може мати вид А: К:М, де, А — змінна чи выражение дійсного типу, До — ширина поля виведення, М — число цифр дробової частини виведеного значення. До і М — висловлювання чи константи цілого типу. І тут справжні значення виводяться у вигляді десяткового числа з фіксованою точкой.

Приклад записи операторів вывода:

.. .. .. .. .. .. var rA, rB: Real; iP, iQ: Integer; bR, bS: Boolean; chT, chV, chU, chW: Char;

.. .. .. .. ... .

WriteLn (rA, rB:10:2);

WriteLn (iP, iQ:8);

WriteLn (bR, bS:8);

WriteLn (chT, chV, chU, chW);

11. З Т Р У До Т У Р, А П Р Про Р Р, А М М Ы.

Програма мовою ПАСКАЛЬ складається з заголовка, розділів описів і розділу операторов.

Заголовок програми містить ім'я програми, например:

Program PRIM;

Описание можуть містити розділ подключаемых бібліотек (модулею), розділ описи міток, розділ описи констант, розділ описания типів, розділ описи змінних, розділ описи процедур і функций.

Розділ описи модулів визначається службовим словом USES і зтримає імена подключаемых модулів (бібліотек) як входять до складу системи TURBO PASCAL, і написаних користувачем. Розділ описи модулів має бути першим серед розділів описів. Імена модулів відделяются друг від друга запятыми:

uses CRT, Graph;

Будь-який оператор у програмі то, можливо помечен міткою. Як мітки використовуються довільні цілі без знака, містять трохи більше чотирьох цифр, або імена. Мітка ставиться перед оператором і відокремлюєся від цього двокрапкою. Усі мітки, використовувані у програмі, повинні прагнути бути перераховані розділ описи міток, например:

label 3, 471, 29, Quit;

Опис констант дозволяє вживати імена як синоніми констант, їх слід накинути у розділі описів констант:

const K= 1024; MAX= 16 384;

У розділі описи змінних необхідно визначити тип всіх переменных, які у программе:

var P, Q, R: Integer;

A, B: Char;

F1,F2: Boolean;

Опис типів, прцедур та зняття функцій буде розглянуто нижче. Отдельные розділи описів можуть відсутні, однак слід пам’ятати, що в.

ПАСКАЛЬ — програмі би мало бути обов’язково описані всі компоненти программы.

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

begin…end.

послідовність операторів. Оператори відокремлюються друг від друга символом ;.

Текст програми закінчується символом точка.

Крім описів і операторів ПАСКАЛЬ — програма може містити коментарі, які представляють довільну послідовникность символів, розташовану між що відкриває дужкою комментариев.

{ й закриває дужкою коментарів }.

Текст ПАСКАЛЬ — програми може містити ключі компіляції, которые дозволяють управляти режимом компіляції. Синтаксично ключі комупиляции записуються як коментарі. Ключ компіляції містить символ.

$ і букву-ключ з наступним знаком + (включити режим) чи — (выключить режим). Например:

{$E+} - эмулировать математичний сопроцессор;

{$F+} - формувати далекий тип виклику процедур і функций;

{$N+} - використовувати математичний сопроцессор;

{$R+} - перевіряти вихід поза межі диапазонов.

Деякі ключі компіляції можуть утримувати параметр, например:

{$I ім'я файла} - включити до тексту компилируемой програми названоный файл.

Приклад записи простий программы:

Program TRIANG; var A, B, З, P. S, P: Real; begin.

Read (A, B, C);

WriteLn (A, B, C);

P:=(A+B+C)/2;

S:=Sqrt (P*(P-A)*(P-B)*(P-C));

WriteLn («P.S= «, S:8:3) end.

12. Б І Т Про У, А Я, А Р І Ф М Є Т І До А.

Бітова чи поразрядная арифметика введена в TURBO PASCAL задля забезпечення можливості роботи з двоичными розрядами (бітами). Операции битовой арифметики застосовні лише у цілим типам.

Перша група операцій — логічні операції not, and, or і xor.

Операція not є одномісному, вона змінює кожен біт цілого числа на обратный.

Операції and, or і xor — двуместные, операнды операцій — цілі величини однаковою довжини. Операції виконуються попарно з усіх двоичными розрядами операндов.

Друга ж група операцій — це операції зсуву вліво shl і зсуву вправо shr:

I shl N.

I shr N.

Ці операції зрушують двійкову послідовність значення I вліво чи вправо на N двійкових розрядів. У цьому біти, минущі межі розрядної сітки, губляться, а звільнені двоичные розряди заповнячиются нулями. При зсуві вправо негативних значень звільнені розряди заповнюються единицами.

13. Про П Є Р, А Т Про Р П Є Р Є Х Про Д А.

Зазвичай оператори у програмі виконуються у порядку, у якому вони записані. Оператор переходу перериває природний порядок выполнения програми розвитку й вказує, що дальнйшее виконання має продолжатися, починаючи з оператора, позначеного міткою, яка вказана у операторе переходу. Приклад записи оператора перехода:

goto 218;

14. Еге Л Є М Є М Т И З Т Р У До Т У Р М Про Р О.

П Р Про Р Р, А М М І Р Про У, А М І Я.

Структуризованная програма (чи підпрограма) — це програма, що складалася з фіксованого безлічі базових конструкцій. Рассмотрим основні ухвали і способи освіти цих конструкцій в схемах алгоритмов.

{}.

З операцій, розвилок і злиттів будуються базові конструкції: следование, галуження, цикл. Застосовуючи лише три конструкції, можна реалізувати алгоритм рішення суду будь-якої задачи.

Конструкція, що є послідовне виконання двох чи більше операцій, називається следованием.

Конструкція, що складається з розвилки, двох операцій та злиття, называется ветвлением. Один із операцій може отсутствовать.

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

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

Довільну послідовність операцій можна видати за одну операцию.

Операція може бути будь-яким оператором мови ПАСКАЛЬ.

(простим чи складовим), або групою операторів, крім оператора переходу GOTO.

У мові ПАСКАЛЬ кількість базових конструкцій збільшено до шести, это:

— следование;

— ветвление;

— цикл з предусловием;

— цикл з постусловием;

— цикл з параметром;

— вариант.

Далі розглянемо, щоб ці базові конструкції реалізуються в языке.

ПАСКАЛЬ.

15. У З Л Про У М И Й Про П Є Р, А Т Про Р.

{}.

Умовний оператор у короткій формі працює за правилу: якщо сулевское вираз B істинно, то виконується оператор ОР1, далі виполняется оператор, наступний за умовним. Якщо булевское вираз B брехливо, він виконуватися оператор, наступний для цього умовним оператором.

16. Ц І До Л З П Р Є Д У З Л Про У І Є М{}.

17. Ц І До Л З П Про З Т У З Л Про У І Є М{}.

18. Ц І До Л З П, А Р, А М Є Т Р Про М{}.

19. Про П Є Р, А Т Про Р И З, А У Є Р Ш Є М І Я Ц І До Л А.

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

У версії ТУРБО ПАСКАЛЬ 7.0 визначено стандартні процедури Break и.

Continue. Процедура Break виконує безумовний вихід із циклу. Процедурепа Continue забезпечує перехід до початку нової ітерації цикла.

20. Про П Є Р, А Т Про Р У, А Р І А М Т А{}.

21. П Є Р Є Ч І З Л Я Є М И Й Т І П Д, А М М И Х.

Перечисляемый тип є обмежену впорядковану послідовність скалярних констант, складових даний тип. Значение кожної константи задається її ім'ям. Імена окремих констант відокремлюються друг від друга комами, а вся сукупність констант, составляющих даний перечисляемый тип, залежить від круглі скобки.

Програміст об'єднує до однієї групи відповідно до яким — або ознакою всю сукупність значень, складових перечисляемый тип.

Наприклад, перечисляемый тип Rainbow (РАДУГА) об'єднує скалярні значения.

RED, ORANGE, YELLOW, GREEN, LIGHT_BLUE, BLUE, VIOLET (КРАСНЫЙ,.

ПОМАРАНЧЕВИЙ, ЖОВТИЙ, ЗЕЛЕНИЙ, БЛАКИТНИЙ, СИНІЙ, ФІОЛЕТОВИЙ). Перечисляемый тип Traffic_Light (СВІТЛОФОР) об'єднує скалярні значення RED, YELLOW, GREEN (ЧЕРВОНИЙ, ЖОВТИЙ, ЗЕЛЕНЫЙ).

Перечисляемый тип описується розділ описи типів, який починається з службового слова type, например:

type.

Rainbow = (RED, ORANGE, YELLOW, GREEN, LIGHT_BLUE, BLUE, VIOLET);

Кожне значення є константою свого типу, і може принадлежати лише з що перераховуються типів, заданих у програмі. Например, перечисляемый тип Traffic_Light може бути визначено у однієї програмі з типом Rainbow, оскільки обидва типу містять однакові константы.

Опис змінних, які належать до скалярним типам, які объвиявлені розділ описи типів, проводиться за допомогою імен типов.

Например:

type Traffic_Light= (RED, YELLOW, GREEN); var Section: Traffic_Light;

Це означає, що змінна Section може приймати значення RED,.

YELLOW чи GREEN.

Змінні перечисляемого типу може бути описані у розділі описания змінних, например:

var Section: (RED, YELLOW, GREEN);

У цьому імена типів відсутні, а перемінні визначаються совокупностью значень, складових даний перечисляемый тип.

До змінним перечисляемого типу то, можливо застосуємо оператор присваивания:

Section:= YELLOW;

Упорядкована послідовність значень, складових перечисляемый тип, автоматично нумерується, починаючи з нуля далі через единицу. Звідси випливає, що перечисляемым змінним і константам могут бути застосовані операції взаємини спікера та стандартні функції Pred,.

Succ, Ord.

Змінні і константи перечисляемого типу неможливо знайти елементами списку введення чи вывода.

22. І М Т Є Р У, А Л И М И Й Т І П Д, А М М И Х.

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

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

{}.

Над перемінними, які належать до интервальному типу, можуть выполняться усі фінансові операції уживати все стандартні функції, які припустимі для відповідного базового типа.

З використанням програми интервальных типів даних може осуществляться контролю над тим, щоб значення змінних не виходили поза межі, запроваджені тих змінних описання интервального типа.

23. М, А З З І У Ы.

Масиви є обмежену впорядковану сукупність однотипних величин. Кожна окрема величина називається компонентом масиву. Тип компонент може бути будь-якою, що у мові ПАСКАЛЬ, крім файлового типу. Тип компонент називається базовим типом.

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

A[5] S[k+1] B[3,5].

Як індексу можна використовувати вираз. Тип індексів може лише интервальным чи перечисляемым. Справжній і цілий типи неприпустимі. Індекси интервального типу, котрій базовым є цілий тип, можуть приймати відвідувачів негативні, нульовий і позитивні значения.{}.

У операторной частини програми один масив то, можливо присвоєно іншому, якщо їх типи ідентичны, например:

R1:=Z.

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

{}.

Перший індекс визначає номер рядки, другий — номер столбца.

Двомірні масиви зберігаються у пам’яті ЕОМ по строкам.

Ініціалізація масивів (присвоєння початкових значень всім компонентам масивів) здійснюється двома способами.

Перший спосіб — з допомогою типізованих констант, например:

type Dim10= Array[1.10] of Real;

const raM10: Dim10 = (0, 2.1, 4, 5.65, 6.1, 6.7, 7.2, 8, 8.7, 9.3);

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

type Dim3x2= Array[1.3,1.2] of Integer;

const iaM3x2: Dim3x2= ((1, 2).

(3, 4).

(5, 6));

Другий спосіб ініціалізації - використання різновиду процедуры FillChar:

FillChar (var V; NBytes: Word; B: Byte);

Цю процедуру заповнює ділянку пам’яті однобайтовым значенням. Напризаходів, для скасування масиву A[1.10] of Real можна записать:

FillChar (A, 40, 0);

или.

FillChar (A, SizeOf (A), 0);

{}.

24. З Т Р Про До И.

Особливе місце у мові ПАСКАЛЬ займають масиви символів. Стандартный ПАСКАЛЬ допускає два способу зберігання символьних масивів в памяти ЕОМ: розпакований і упакований. Розпаковані масиви символів зберігаються у пам’яті ЕОМ за одним символу в машинному слові, упакованные.

— за одним символу в байте. При описі упакованого масиву симвовилов використовують службове слово PACKED, например:

var MAS: Packed Array[1.20] of Char;

Опис розпакованого масиву символів має вид:

var M: Array[1.20] of char;

Для перетворення символьного масиву з распакованной форми в упаковану і навпаки, з упакованої в распакованную, у мову ПАС;

КАЛЬ запроваджені дві чіткі стандартні функції Pack, UnPack.

Упакований масив символів утворює символьну рядок. Символьна рядок може або строковой константою, або строковой змініншої. Строковая константа, чи рядок, є сукупність символів, закладену в апострофи. Рядок — це елементарна конструкция мови ПАСКАЛЬ. Строковые константи можуть входити до складу виражений. Як це і числові константи, є підстави описані у розділі описи констант.

Строковые перемінні - це одномірні упаковані масиви симвовилов, для описи що у TURBO PASCAL запроваджено тип String.

Наприклад, якщо рядок містить до 30 символів, її тип буде опреділовий как.

type p. s= String[30];

Довжина рядки неспроможна утримувати більш, ніж 255 символов.

У TURBO PASCAL містять поняття рядки перемінної довжини, у разі її опис задається как.

type p. s= String;

Тип String без вказівки довжини сумісний з усіма типами строк.

Особливістю строковых змінних і те, що їм можна проращаться як до скалярним змінним, і до масивам. У другому случаї застосовується конструкція «змінна з індексом », що забезпечує доступом до окремим символів рядки. У цьому нижню межу идекса дорівнює 1. Окремий символ рядки сумісний із типом Char.

Ще ЕОМ рядок займає кількість байтів, на одиницю більше її довжини. Нульовий байт рядки містить її длину.

Для рядків визначено операції присвоювання, злиття (конкатенації) і сравнения.

Порівняйте рядків застосовуються усі фінансові операції відносини. Порівняння рядків відбувається посимвольно, починаючи з першого символу. Рядки рарны, якщо мають однакову довжину, і посимвольно эквивалентны.

Рядки може бути елементами списку введення — виведення, у своїй записывается ім'я рядки без индекса.

При введення строковых змінних кількість впроваджуються символів може бути меншою, ніж довжина рядки. І тут запроваджувані символи размещаются початку рядки, а решта байти заповнюються прогалинами. Есчи кількість впроваджуються символів перевищує довжину рядки, зайві символи отбрасываются.

Ініціалізація рядків може здійснюватися як за допомогою типизированных констант:

const sName: String[9]= «IBM PC/AT » ;

і з допомогою другий різновиду функції FillChar:

FillChar (var V; NBytes: Word; З: Char);

например:

FillChar (A, SizeOf (A), «0 »);

Робота зі рядками в TURBO PASCAL включені процедури і функции, що забезпечують редагування і перетворення строк.

{}.

25. П Р Про Ц Є Д У Р И І Ф У М До Ц І И.

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

Підпрограма — це послідовність операторів, які определьони і записані тільки одного місці програми, проте їх можна викликати до виконання з одній або кількох точок програми. Каждая підпрограма визначається унікальним ім'ям. У мові ПАСКАЛЬ существуют два типу підпрограм — процедури і функции.

Процедура й третя функція — це іменована послідовність описів і операторів. З використанням процедур чи функцій ПАСКАЛЬ — программа повинна містити текст процедури чи функції і звернення до процедуре чи функції. Тексти процедур та зняття функцій вкладаються у розділ описів процедур і функций.

{}.

Процедура може містити такі - ж розділи описів, як і ПАС;

КАЛЬ — програма, саме: розділи описи модулів, міток, констант, типів, змінних, процедур і функций.

{}.

ПЕРЕДАЧА ІМЕН ПРОЦЕДУР І ФУНКЦІЙ У ЯКІСТЬ ПАРАМЕТРІВ. Багато завданнях, особливо у завданнях обчислювальної математики, необхідно передавать імена процедур та зняття функцій як параметрів. І тому в.

TURBO PASCAL запроваджено новим типом даних — процедурний чи функциональный, залежно від цього, що описывается.

Опис процедурних і функціональних типів виробляється у розділі описи типів: type.

FuncType = Function (z: Real): Real;

ProcType = Procedure (a, b: Real; var x, y: Real);

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

Proc = Procedure;

Після оголошення процедурного чи функціонального типу може бути використовуватиме описи формальних параметрів — імен процедур і функций.

З іншого боку, необхідно написати ті реальні процедури чи функції, чиї імена передаватимуться як фактичні параметри. Ці процедуры і функції повинні компілюватися як дальньої адресації з ключем {$F+}.

Приклад. Скласти програму для обчислення певного інтеграла tk.

2t.

I= P. S———————- dt sqrt (1-sin2t) tn методом Сімпсона. Обчислення подинтегральной функції реалізувати з допомогою функції, чиє ім'я передається як параметр. Значення опреділеного інтеграла за такою формулою Сімпсона обчислюється по формуле:

ISimps=2*h/3*(0.5*F (A)+2*F (A+h)+F (A+2*h)+2*F (A+3*h)+…

+2*F (B-h)+0.5*F (B)).

де A і B — нижня і верхня кордону інтервалу интегрирования,.

N — число разбиений інтервалу інтегрування, h=(B-A)/N, причому N має бути четным.

Program INTEGRAL; type.

Func= function (x: Real): Real; var.

I, TN, TK: Real;

N:Integer;

{$F+}.

Function Q (t: Real): Real; begin.

Q:=2*t/Sqrt (1-Sin (2*t)); end;

{$F-}.

Procedure Simps (F:Func; a, b: Real; N: Integer; var INT: Real); var sum, h: Real; j: Integer; begin if Odd (N) then N:=N+1; h:=(b-a)/N; sum:=0.5*(F (a)+F (b)); for j:=1 to N-1 do sum:=sum+(j mod 2+1)*F (a+j*h);

INT:=2*h*sum/3 end; begin.

WriteLn («ВВЕДИ TN, TK, N »);

Read (TN, TK, N);

Simps (Q, TN, TK, N, I);

WriteLn («I= «, I:8:3) end.

{}.

26. Про П Є Р, А Т Про Р И У И Х Про Д А.

Для роботи програм, процедур та зняття функцій без випередительного переходу по міткам до закриваючому end в TURBO PASCAL запроваджені процедури Exit і Halt.

Виклик Exit завершує роботу свого програмного блоки і передає управління викликає програмі. Якщо Exit виконується в подпрограмме, то виконання цієї підпрограми припиниться, і далі выполняться наступний за викликом цієї підпрограми оператор. Якщо Exit виполняется в основну програму, вихід з неї буде еквівалентний нормальному завершению.

Виклик процедури Halt, хоч вона не перебувала, завершує роботу програми розвитку й передає управління операційній системе.

Процедура Halt має структуру Halt (n), де n — код повернення, доторый то, можливо проаналізовано операційній системою з допомогою доманды IF ERRORLEVEL. Значення n=0 відповідає нормальному довершенонию роботи програми. Виклик процедури Halt без параметра еквівалентний виклику Halt (0).

27. М Про Д У Л И.

Модуль (UNIT) в TURBO PASCAL — це певним чином оформлена библиотека підпрограм. Модуль на відміну програми може бути запущений виконання самостійно, може тільки брати участь у будівництві програм, тож інших модулей.

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

Модуль в TURBO PASCAL є окремо збережену і независимо компилируемую програмну единицу.

У випадку модуль — це сукупність програмних ресурсів, виділені на використання іншими програмами. Під програмными ресурсами розуміються будь-які елементи мови TURBO PASCAL: константи, типи, перемінні, підпрограми. Модуль сам не є виконуваної програмою, його елементи використовуються іншими программными единицами.

Усі програмні елементи модуля може бути розбитий на дві части:

— програмні елементи, призначені від використання іншими програмами чи модулями, такі елементи називають видимими поза модуля;

— програмні елементи, необхідні лише роботи самого модуля, їх називають невидимими чи скрытыми.

Відповідно до цим модуль, крім заголовка, містить дві основные частини, звані інтерфейсом і реализацией.

У випадку модуль має таку структуру:

unit; {заголовок модуля}.

interface.

{ опис видимих програмних елементів модуля }.

{ опис прихованих програмних елементів модуля }.

begin.

{ оператори ініціалізації елементів модуля } end.

У приватному разі модуль може містити частини реалізації і годинути ініціалізації, тоді структура модуля буде такой:

unit; {заголовок модуля}.

interface.

{ опис видимих програмних елементів модуля }.

implementation.

end.

Використання в модулях процедур та зняття функцій має особенности.

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

Інтерфейсна частина модуля містить лише видимі (доступні й інших програм, тож модулів) заголовки процедур та зняття функцій (без служебного слова forward). Повний текст процедури чи функції вміщують у частина реалізації, причому заголовок може утримувати список формальных параметров.

Вихідний текст модуля може бути откомпилирован з допомогою директивы Make підменю Compile і записано диск. Результатом компіляції модуля є файл з розширенням .TPU (Turbo Pascal Unit). Основне ім'я модуля береться з заголовка модуля.

Для підключення модуля до програми необхідно вказати його ім'я розділ описи модулів, например:

uses CRT, Graph;

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

Наприклад, нехай є модуль, у якому описана змінна К:

unit M; interface var K: Integer; implementation.

… end.

Нехай програма, яка використовує цей модуль, також має змінную К:

Program P; uses M; var K: Char; begin.

… end.

А, щоб у програмі P мати доступом до перемінної K з модуля M, що необхідно дати складене ім'я M.K.

Використання складових імен застосовується як до імен переменных, а всім іменам, описаним в интерфейсной частини модуля.

Рекурсивне використання модулів запрещено.

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

28. М М Про Ж Є З Т У А.

Поняття безлічі у мові ПАСКАЛЬ полягає в математичному баченні поняття безлічах: це обмежена сукупність різних елементів. Для побудови конкретного множинного типу використовуєся перечисляемый чи интервальный тип даних. Тип елементів, складляющих безліч, називається базовим типом.

Множинний тип описується з допомогою службових слів Set of, например:

type M= Set of B;

Тут М — множинний тип, У — базовий тип.

Приклад описи перемінної множинного типа:

type.

M= Set of «A ». «D »; var.

MS: M;

Належність змінних до множинному типу то, можливо определьону просто у розділі описи переменных:

var.

З: Set of 0.7;

Константи множинного типу записуються як закладеною у квадратні дужки послідовності елементів чи інтервалів базового типу, розділених комами, например:

[ «A », «З «] [0, 2, 7] [3, 7, 11.14].

Константа вида.

[ ].

означає порожній подмножество.

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

var P: 1.3;

Ця змінна може приймати три різних значення — або 1, або 2, або 3. Змінна Т множинного типа.

var T: Set of 1.3;

може приймати вісім різних значений:

[ ] [1,2].

[1] [1,3].

[2] [2,3].

[3] [1,2,3].

Порядок перерахування елементів базового типу в константи безразличен.

Значення перемінної множинного типу то, можливо поставлено конструкцией виду [T], де T — змінна базового типа.

До змінним і константам множинного типу застосовні операції присвоювання (:=), об'єднання (+), перетину (*) і вычитания (-):

[ «A », «B «] + [ «A », «D «] дасть [ «A », «B », «D «].

[ «A «] * [ «A », «B », «З «] дасть [ «A «].

[ «A », «B », «З «] - [ «A », «B «] дасть [ «З «].

Результат виконання операцій є величина множинного типа.

До множинним величинам застосовні операції: тотожність (=), нетотожність (), міститься у (=). Результат виконання операцій має логічний тип, например:

[ «A », «B «] = [ «A », «З «] дасть FALSE.

[ «A », «B «] [ «A », «З «] дасть TRUE.

[ «B «] = [ «A «] дасть FALSE.

Крім операцій до роботи з величинами множинного типу у мові ПАСКАЛЬ використовується операция.

in.

вивіряє приналежність елемента базового типу, стоїть зліва знака операції, безлічі, що стоїть праворуч від знака операції. Результат виконання цієї операції - булевский. Операція перевірки принадлежности елемента безлічі часто використовується замість операцій відносіння, например:

A in [ «A », «B «] дасть TRUE,.

2 in [1, 3, 6] дасть FALSE.

З використанням програми даних множинного типу виконання операцій відбувається над битовыми рядками даних. Кожному значенням множинного типу у пам’яті ЕОМ відповідає один двоїчний розряд. Наприклад, множество.

[ «A », «B », «З », «D «].

представлено у пам’яті ЕОМ битовой строкой.

1 1 1 1.

Підмножини цього безлічі представлені строками:

[ «A », «B », «D «] 1 1 0 1.

[ «B », «З «] 0 1 1 0.

[ «D «] 0 0 0 1.

Величини множинного типу неможливо знайти елементами списку ввотак — вывода.

У кожній конкретної реалізації транслятора з мови ПАСКАЛЬ количество елементів базового типу, у якому будується багато, ограничено. У TURBO PASCAL кількість базових елементів на повинен превышать 256.

Ініціалізація величин множинного типу проводиться за допомогою типізованих констант:

const seLit: Set of «A ». «D «= [];

Проілюструємо застосування даних множинного типу на примере.

Приклад. Скласти програму, яка виробляє і виводить на екран дисплея набори випадкових чисел для гри акторів-професіоналів у «Спортлото 5 з 36 » .

Для заповнення кожної картки спортлото необхідно одержати набір з п’яти псевдослучайных чисел. До цих числам пред’являються два требования:

— числа має перебувати буде в діапазоні 1.36;

— числа нічого не винні повторяться.

Program Lotto; var nb, k: Set of 1.36; kol, l, і, n: Integer; begin.

Randomize;

WriteLn («ВВЕДИ kol »);

ReadLn (kol); nb:=[1.36]; for i:=1 to kol do begin k:=[]; for l:=1 to 5 do begin repeat n:=Random (36) until (n in nb) and not (n in k); k:=k+[n];

Write (n:4) end;

WriteLn end end.

29. З, А П І З И.

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

Опис запис у мові ПАСКАЛЬ здійснюється з допомогою службового слова RECORD, за яким описуються компоненти записи. Завершується опис записи службовим словом END.

Наприклад, записник містить прізвища, ініціали і номери тілефона, тому окремий рядок в записнику зболені зручно у вигляді наступній записи:

type Row=Record.

FIO: String[20];

TEL: String[7] end; var str: Row;

Опис записів можливо, й без використання імені типу, напризаходів: var str: Record.

FIO: String[20];

TEL: String[7] end;

Звернення до запис у цілому допускається лише у операторах присваивания, де зліва і від знака присвоювання використовуються імена записів однакового типу. У інших випадках оперують отдельными полями записів. Щоб звернутися до окремої компоненті записи, що необхідно дати ім'я запису і через точку вказати ім'я потрібного поля, например:

str.FIO, str.TEL.

Таке ім'я називається складовим. Компонентом запису може з’явитися бути такж запис, у разі складене ім'я міститиме не на два, а більше имен.

Звернення до компонентами записів можна спростити, якщо воспользоваться оператором приєднання with.

Він дає змогу замінити складові імена, що характеризують кожне поле, просто на імена полів, а ім'я записи накинути у операторі присоединения:

with M do OP;

Тут М — ім'я записи, СР — оператор, простий чи составной.

Оператор СР є область дії оператора присоединения, не більше яких можна не використовувати складові имена.

Іноді вміст окремому записі залежить від значення однієї з її полів. У мові ПАСКАЛЬ допускається опис записи, що з спільної програми та варіантної частин. Варіантна частина задається з допомогою конструкции case P of,.

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

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

Тип поля Р можна вказати й у заголовку варіантної частини, например:

case P: Integer of.

Ініціалізація записів здійснюється з допомогою типізованих констант:

type.

RecType= Record x, y: Word; ch: Char; dim: Array[1.3] of Byte end;

const.

Rec: RecType= (x: 127; y: 255; ch: «A »; dim: (2, 4, 8));

{}.

30. Ф, А Й Л Ы.

Запровадження файлового типу у мову ПАСКАЛЬ викликано потребою забезпечити можливість роботи з периферійними (зовнішніми) устройствами.

ЕОМ, призначеними введення, виведення і збереження данных.

Файловий тип даних чи файл визначає впорядковану сукупність довільного числа однотипних компонент.

Загальне властивість масиву, числа й записи у тому, що його їх компонент визначено на етапі написання програми, тогі як кількість компонент файла з тексту програми не й то, можливо произвольным.

Поняття файла досить. Це то, можливо звичайний файл на диску, комунікаційний порт ЕОМ, пристрій друку, клавіатура й інші устройства.

Працюючи з файлами виконуються операції введення — виведення. Операція введення означає перепис даних із зовнішнього устрою (з вхідного файла) в основну пам’ять ЕОМ, операція виведення — це пересилання даних із основний пам’яті на зовнішнє пристрій (в вихідний файл).

Файли на зовнішніх пристроях часто називають фізичними файлами.

Їхні імена визначаються операційній системою. У програмах на языке.

Паскаль імена файлів задаються з допомогою рядків. Наприклад, ім'я файла на диску може мати вид:

" A: LAB1. DAT «.

" c: ABC150pr. pas «.

" lab3. pas " .

Операційна система MS-DOS робить особливого різницю між файлами на дисках і стрічках і пристроями ЕОМ і портами комунікацій. В.

TURBO PASCAL можна використовувати імена пристроїв і портів, определенні в MS-DOS, например:

" CON ", «LPT1 », «PRN », «COM1 », «AUX », «NUL » .

З файловій системою TURBO PASCAL пов’язано поняття буфера введення — виведення. Введення та виведення даних здійснюється через буфер. Буфер — це область у пам’яті, виділеної кожному за файла. При запис у файл всю інформацію спочатку направляють у буфер де він накопичується до того часу, поки обшир буфера нічого очікувати заповнений. Тільки після цьогорічних чи після спеціальної команди скидання відбувається передача даних на зовнішнє пристрій. Під час читання з файла дані спочатку зчитуються в буфер, причому даних зчитується й не так, скільки запитує, а скільки вміститься в буфер.

Механізм буферизации дозволяє швидше і ефективно обмениваться інформацією з зовнішніми устройствами.

Робота з файлами у програмі необхідно визначити файлову зміну. TURBO PASCAL підтримує три файлових типу: текстові файли, компонентные файли, бестиповые файлы.

Опис файлових змінних текстового типу здійснюється з поміццю службового слова Text, например:

var tStory: Text;

Опис компонентных файлів має вид:

var fComp: File of T;

де T — тип компоненти файла. Приклади описи файловій перемінної компонентного типа:

type M= array[1.500] of Longint;

var f1: File of Real; f2: File of Integer; fLi: File of M;

Бестиповые файли описуються з допомогою службового слова File:

var f: File;

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

TURBO PASCAL запроваждує низку процедур і державних функцій, застосовних для будь-яких типів файлів: Assign, Reset, Rewrite, Close, Rename, Erase, Eof,.

IOResult.

Процедура Assign (var f; FileName: String) пов’язує логічний файл f з фізичною файлом, повне ім'я якого поставлено в строке.

FileName.

Процедура Reset (var f) відкриває логічний файл f для підущего читання даних чи, кажуть, відкриває вхідний файл. Після успішного виконання процедури Reset файл готовий піти на читання потім із нього переклвого элемента.

Процедура Rewrite (var f) відкриває логічний файл f для післядующей записи даних (відкриває вихідний файл). Після успішного виполнения цієї процедури файл готовий піти на запис у нього першого элемента.

Процедура Close (var f) закриває відкритий доти логічний файл. Виклик процедури Close необхідний при завершенні роботи з файлом.

Якщо з якоїсь причини процедура Close нічого очікувати виконано, файл все ж таки буде створено осіб на зовнішньому устрої, але вміст останнього буфера до нього нічого очікувати перенесено. Для вхідних файлів використання оператора закриття файла необязательно.

Логічний функція EOF (var f): Boolean повертає значення TRUE, коли за читанні досягнуть кінець файла. Це означає, що вони прочитан останній елемент в файлі чи файл після відкриття виявився пуст.

Процедура Rename (var f; NewName: String) дозволяє перейменувати фізичний файл на диску, пов’язані з логічним файлом f. Переименование можливе після закриття файла.

Процедура Erase (var f) знищує фізичний файл на диску, доторый був із файловою перемінної f. Файл на момент виклику процедуры Erase може бути закрыт.

Функція IOResult: Integer повертає ціла кількість, відповідне коду останньої помилки введення — виведення. За нормального завершенні операції функція поверне значення 0. Значення функції IOResult необхідно присвоювати який — або перемінної, бо за кожному виклик функция обнуляє своє значення. Функція IOResult працює лише за выключенном режимі перевірок помилок введення — виведення чи з ключем компиляции {$I-}.

31. Т Є До З Т Про У И Є Ф, А Й Л Ы.

Особливе місце у мові ПАСКАЛЬ займають текстові файли, компоненти яких мають символьний тип. Для описи текстових файлів у мові визначено стандартний тип Тext:

var TF1, TF2: Text;

Текстові файли є послідовність рядків, а рядки — послідовність символів. Рядки мають зміну довжину, кожна рядок завершується ознакою кінця строки.

З ознакою кінця рядки пов’язана функція EOLn (var T: Text):Boolean, де Т — ім'я текстового файла. Ця функція приймає значення TRUE, якщо досягнуть кінець рядки, і значення FALSE, якщо кінець рядки не достигнут.

Для операцій над текстовими файлами, крім перелічених, определьони також оператори звернення до процедурам:

ReadLn (T) — пропускає рядок на початок следующей;

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

Робота з текстовими файлами введена розширена форма операторів введення та виведення. Оператор

Read (T, X1, X2,…XK).

еквівалентний групі операторов.

begin.

Read (T, X1);

Read (T, X2);

Read (T, XK) end;

Тут Т — текстовий файл, а перемінні Х1, Х2,…ХК може бути чибо перемінними цілого, дійсного чи символьного типу, або рядком. Під час читання значень змінних з файла вони перетворюються з текстового подання у машинное.

Оператор

Write (T, X1, X2,…XK).

еквівалентний групі операторов.

begin.

Write (T, X1);

Write (T, X2);

Write (T, XK) end;

Тут Т — також текстовий файл, але перемінні Х1, Х2,…ХК може бути цілого, дійсного, символьного, логічного типу чи стродідька лисого. При записи значень змінних в файл вони перетворюються з внутреннего подання у текстовый.

До текстовим файлам ставляться стандартні файли INPUT, OUTPUT.

Розглянуті раніше оператори введення — висновку є приватним случаєм операторів обміну з текстовими файлами, коли використовуються стандартные файли введення — виведення INPUT, OUTPUT.

Фундаментальна обізнаність із цими файлами має особенности:

— імена цих файлів до списків введення — виведення не указываются;

— застосування процедур Reset, Rewrite і Close до стандартним файлам введення — виведення запрещено;

— до роботи з файлами INPUT, OUTPUT введена різновид функции.

EOLn без параметров.

TURBO PASCAL вводить додаткові процедури і функції, застосовні лише у текстовим файлам, це SetTextBuf, Append, Flush, SeekEOLn,.

SeekEOF.

Процедура SetTextBuf (var f: Text; var Buf; BufSize: Word) служить збільшення чи зменшення буфера введення — виведення текстового файла f. Значення розміру буфера для текстових файлів за умовчанням равно.

128 байтам. Збільшення розміру буфера скорочує кількість інтерпретацій диску. Рекомендується змінювати разиер буфера до відкриття файла. Буфер файла розпочнеться з першого байта перемінної Buf. Розмір буфера задається в необов’язковому параметрі BufSize, і якщо цей параметр відсутствует, розмір буфера визначається довжиною перемінної Buf.

Процедура Append (var f: Text) служить для спеціального відкриття вихідних файлів. Вона застосовна до існуючих фізичним файлам і це відкриває з для дозаписи насамкінець файла.

Процедура Flush (var f: Text) застосовується до відкритих вихідним файлам. Вона примусово записує дані з буфера в файл независимо від рівня його заполнения.

Функція SeekEOLn (var f: Text): Boolean повертає значення True, якщо кінця рядки залишилися лише пробелы.

Функція SeekEOF (var f: Text): Boolean повертає значення True, якщо кінця файла залишились рядки, заповнені пробелами.

32. До Про М П Про М Є М Т М И Є Ф, А Й Л Ы.

Компонентний чи типизированный файл — це файл з оприлюдненими типом його компонент. Компонентные файли складаються з машинних представлений значень змінних, вони зберігають дані у тому вигляді, як і пам’яти ЭВМ.

Опис величин файлового типу має вид:

type M= File Of T;

де М — ім'я файлового типу, Т — тип компоненти. Например:

type.

FIO= String[20];

SPISOK=File of FIO; var.

STUD, PREP: SPISOK;

Тут STUD, PREP — імена файлів, компонентами яких є строки.

Опис файлів можна ставити розділ описи переменных:

var fsimv: File of Char; fr: File of Real;

Компонентами файла може бути все скалярні типи, та якщо з структурированных — масиви, безлічі, записи. Практично в усіх конкретних реалізаціях мови ПАСКАЛЬ конструкція «файл файлів «недопустима.

Усі операції над компонентными файлами виробляються з допомогою стандартних процедур:

Reset, Rewrite, Read, Write, Close.

Для введення — виведення використовуються процедуры:

Read (f, X);

Write (f, X);

де f — ім'я логічного файла, Х — або змінна, або масив, або рядок, або безліч, або запис з такою самою описом, яке має компонента файла.

Виконання процедури Read (f, X) полягає у читанні з уведенням зовнішнього вустройства однієї компоненти файла і запис їх у X. Повторне застосування процедури Read (f, X) забезпечить читання наступній компоненти файла і позапись їх у X.

Виконання процедури Write (f, X) полягає у записи X на зовнішнє вустройство як однієї компоненти. Повторне застосування цієї процедури забезпечить запис X як наступній компоненти файла.

Робота з компонентными файлами введена розширена форма операторов введення і вывода:

Read (f, X1, X2,…XK).

Write (f, X1, X2,…XK).

Тут f — компонентний файл, а перемінні Х1, Х2,…ХК повинен мати той самий тип, як і оголошений тип компонент файла f.

33. Б Є З Т І П Про У И Є Ф, А Й Л Ы.

Бестиповые файли дозволяють записувати на диск довільні ділянки пвмяти ЕОМ і зчитувати його з диска на згадку про. Операції обміну з бестиповыми файлами здійснюється з допомогою процедур BlokRead и.

BlockWrite. З іншого боку, вводиться розширена форма процедур Reset и.

Rewrite. У іншому принципи роботи залишаються так само, як і з комупонентными файлами.

Перед використанням логічний файл.

var f: File;

може бути пов’язані з фізичним з допомогою процедури Assign. Далі файл повинен бути відкритий для читання або заради записи процедурою Reset чи Rewrite, а по закінченні роботи закритий процедурою Close.

Відкриття файла довжина буфера встановлюється за умовчанням в 128 байт. TURBO PASCAL дозволяє змінити розмір буфера введення — виведення, навіщо слід відкривати файл розширеній записом процедур

Reset (var f: File; BufSize: Word).

или.

Rewrite (var f: File; BufSize: Word).

Параметр BufSize задає число байтів, зчитувальних з файла чиписываемых до нього впродовж одного звернення. Мінімальна значення BufSize — 1 байт, максимальне — 64 До байт.

Читання даних із бестипового файла здійснюється процедурой.

BlockRead (var f: File; var X; Count: Word; var QuantBlock: Word);

Цю процедуру здійснює впродовж одного звернення читання в зміну X кількості блоків, заданий параметром Count, у своїй довжина блоку дорівнює довжині буфера. Значення Count може бути менше 1. Тільки за звернення не можна прочитати більше, ніж 64 До байтов.

Необов’язковий параметр QuantBlock повертає число блоків (буферів), прочитаних поточної операцією BlockRead. Що стосується успішного завершення операції читання QuantBlock = Count, у разі аварійної ситуации параметр QuantBlock міститиме число вдало прочитаних блоків. Звідси випливає, що з допомогою параметра QuantBlock можна контролювати правильність здійснення операції чтения.

Запис даних в бестиповой файл виконується процедурой.

BlockWrite (var f: File; var X; Count: Word; var QuantBlock: Word);

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

Необов’язковий параметр QuantBlock повертає число блоків (буферів), записаних успішно поточної операцією BlockWrite.

34. П Про З Л Є Д Про У, А Т Є Л Т М И Й І П Р Я М Про Й.

Д Про З Т У П.

Сенс послідовного доступу у тому, що у кожен час доступне тільки одна компонента із усієї послідовникности. А, щоб звернутися (отримання доступу) до компоненті з номером До, необхідно переглянути з початку файла К-1 попередню компоненту. Після звернення до компоненті з номером До можна звертатися до компоненті з номером К+1. Звідси випливає, що згадані процеси формирования.

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

Розглянуті раніше кошти роботи з файлами забезпечують післядовательный доступ.

TURBO PASCAL дозволяє застосовувати до компонентным і бестиповым файлам, записаним на диск, спосіб прямого доступу. Прямий доступ ознасподівається можливість заздалегідь накинути у файлі блок, до якого застосована операція введення — виведення. Що стосується бестиповых файлів блок дорівнює розміру буфера, для компонентных файлів блок — це одна компонента файла.

Прямий доступ передбачає, що файл є лінійну послідовність блоків. Якщо файл містить n блоків, всі вони нумеруются від 1 через 1 до n. З іншого боку, вводиться поняття умовної границы між блоками, у своїй умовна кордон зі номером 0 розташована перед блоком з номером 1, кордон зі номером 1 розташована перед блокого з номером 2 і, нарешті, умовна кордон зі номером n перебуває після блоку з номером n.

Реалізація прямого доступу здійснюється з допомогою функцій і процедур FileSize, FilePos, Seek і Truncate.

Функція FileSize (var f): Longint повертає кількість блоків у відкритому файлі f.

Функція FilePos (var f): Longint повертає поточну позицію у файлі f. Позиція в файлі - це номер умовної кордону. Для відкритого файла поточної позицією буде кордон зі номером 0. Це значит, які можна записати чи прочитати блок з номером 1. Після читання чи записи першого блоку поточна позиція переміститься на межу з номером 1, і можна буде потрапити звертатися до ьлоку з номером 2. Після інтения останньої записи значення FilePos одно значенням FileSize.

Процедура Seek (var f; N: Longint) забезпечує призначення поточної позиції з файлі (позиціонування). У параметрі N може бути заданий номер умовної кордону, попередньої блоку, до якого производитися подальше звернення. Наприклад, щоб працювати з блоком 4, що необхідно дати значення N, однакову 3. Процедура Seek працює із відкритими файлами.

Процедура Truncate (var f) встановлює в поточної позиції признак кінця файла і видаляє (стирає) всі наступні блоки.

Приклад. Нехай на НМД є текстовий файл ID. DAT, який содержит числові значення дійсного типу дві вересня кожному рядку — значення аргументу і функції відповідно. Кількість пар чисел трохи більше 200. Скласти програму, який читає файл, значения аргументу і функції записує в одномірні масиви, підраховує їх кількість, виводить на екран дисплея і записує в файл компонентного типу RD.DAT.

Program F; var rArg, rF: Array[1.200] of Real; inf: Text; outf: File of Real; n, l: Integer; begin.

Assign (inf, «ID.DAT »);

Assign (outf, «RD.DAT »);

Reset (inf);

Rewrite (outf); n:=0; while not EOF (inf) do begin n:=n+1;

ReadLn (inf, rArg[n], rF[n]) end; for l:=1 to n do begin.

WriteLn (l:2,rArg[l]: 8:2,rF[l]:8:2);

Write (outf, rArg[l], rF[l]); end; close (outf) end.

35. У До, А З, А Т Є Л И.

Операційна система MS — DOS все адресуемое простір ділить на сегменти. Сегмент — це ділянку пам’яті розміром 64 До байт. Для задуния адреси необхідно визначити адресу початку сегмента зсув відносительно початку сегмента.

У TURBO PASCAL визначено адресний тип Pointer — покажчик. Переменные типу Pointer.

var p: Pointer;

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

Зміну типу покажчик можна описати іншим способом.

type NameType= ^T;

var p: NameType;

Тут p — змінна типу покажчик, що з типом Т з допомогою імені типу NameType. Описати зміну типу покажчик можна непосредственно розділ описи переменных:

var p: ^T;

Необхідно розрізняти зміну типу покажчик і зміну, яку цей покажчик посилається. Наприклад якщо p — посилання переменную типу Т, то p^ - позначення тій самій переменной.

Для змінних типу покажчик введено стандартне значення NIL, що означає, що покажчик не посилається ні з якому объекту.

Константа NIL використовується для будь-яких указателей.

Над покажчиками не визначено ніяких операцій, крім перевірки на рівність і неравенство.

Змінні типу покажчик можуть бути записані у частині оператору присвоювання, причому у правій частині може знаходитися чи функція визначення адреси Addr (X), або вираз @ X, де @ - унарная операція взяття адреси, X — ім'я перемінної будь-якого типу, зокрема процедурного.

Змінні типу покажчик неможливо знайти елементами списку введення — вывода.

36. Д І М, А М І Ч Є З До І Є П Є Р Є М Є М М И Е.

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

На відміну від такого типу статичних змінних програми, написаних мовою ПАСКАЛЬ, можна створити динамічні перемінні. Основное властивість динамічних змінних у тому, що вони создаються і пам’ять їм виділяється під час виконання программы.

Розміщуються динамічні перемінні в динамічної області памяти.

(heap — области).

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

Фундаментальна обізнаність із динамічної областю пам’яті в TURBO PASCAL реалізується з допомогою процедур і державних функцій New, Dispose, GetMem, FreeMem, Mark,.

Release, MaxAvail, MemAvail, SizeOf.

Процедура New (var p: Pointer) виділяє місце у динамічної проласти пам’яті розміщувати динамічної перемінної p^ і його адресу привласнює покажчику p.

Процедура Dispose (var p: Pointer) звільняє ділянку пам’яті, виділений розміщувати динамічної перемінної процедурою New, і значення покажчика p стає неопределенным.

Проуедура GetMem (var p: Pointer; size: Word) виділяє ділянку пам’яті в heap — області, привласнює адресу його початку покажчику p, розмір ділянки в байтах задається параметром size.

Процедура FreeMem (var p: Pointer; size: Word) звільняє учасструм пам’яті, адресу початку якого визначено покажчиком p, а розмір — параметром size. Значення покажчика p стає неопределенным.

Процедура Mark (var p: Pointer) записує в покажчик p адресу початку ділянки вільної динамічної пам’яті на даний момент її вызова.

Процедура Release (var p: Pointer) звільняє ділянку динамичесдідька лисого пам’яті, починаючи з адреси, записаного в покажчик p процедурой.

Mark, т-є, очищає ту динамічну пам’ять, що була зайнята після виклику процедури Mark.

Функція MaxAvail: Longint повертає довжину в байтах самого довгого вільного ділянки динамічної памяти.

Функція MemAvail: Longint повний обсяг вільної динамічної памяти в байтах.

Допоміжна функція SizeOf (X): Word повертає обсяг в бувайтах, яку він обіймав X, причому X може або ім'ям перемінної будь-якого типу, або ім'ям типа.

Розглянемо приклади роботи з указателями.

var p1, p2: ^Integer;

Тут p1 і p2 — покажчики чи пременные засланого типа.

p1:=NIL; p2:=NIL;

По виконанні цих операторів присвоювання покажчики p1 і p2 ні посилатися жодній конкретний объект.

New (p1); New (p2);

Процедура New (p1) виконує такі действия:

— у пам’яті ЕОМ виділяється ділянку розміщувати величини цілого типа;

— адресу цієї ділянки присвоюється перемінної p1:

р===== г=====.

¦ *—¦————->¦ ¦

L=====- L=====- p1 p1^.

Аналогічно, процедура New (p2) забезпечить виділення ділянки пам’яті, адресу якого «буде записаний у p2:

р===== г=====.

¦ *—¦————->¦ ¦

L=====- L=====- p2 p2^.

По виконанні операторів присваивания.

p1^:=2; p2^:=4;

в виділені ділянки пам’яті будуть записані значення 2 і 4 соответственно:

р===== г=====.

¦ *—¦————->¦ 2 ¦

L=====- L=====- p1 p1^.

р===== г=====.

¦ *—¦————->¦ 4 ¦

L=====- L=====- p2 p2^.

У виконання оператора присваивания.

p1^:=p2^;

у смугу пам’яті, який посилається покажчик p1, прописано значення 4:

р===== г=====.

¦ *—¦————->¦ 4 ¦

L=====- L=====- p1 p1^.

р===== г=====.

¦ *—¦————->¦ 4 ¦

L=====- L=====- p2 p2^.

По виконанні оператора присваивания.

p2:=p1;

обидва покажчика міститимуть адресу першого ділянки памяти:

р===== г=====.

¦ *—¦————->¦ 4 ¦

L=====- —->L=====- p1 ¦ p1^ p2^.

¦ р===== ¦

¦ *—¦———;

L=====- p2.

Змінні p1^, p2^ є динамічними, оскільки пам’ять їм виділяється у виконання програми з допомогою процедури New.

Динамічні перемінні можуть входити до складу висловів, например:

p1^:=p1^+8; Write («p1^= «, p1^:3);

Приклад. У виконання программы:

Program DemoPointer; var p1, p2,p3:^Integer; begin p1:=NIL; p2:=NIL; p3:=NIL;

New (p1); New (p2); New (p3); p1^:=2; p2^:=4; p3^:=p1^+Sqr (p2^); writeln («p1^= «, p1^:3, «p2^= «, p2^:3, «p3^= «, p3^:3); p1:=p2; writeln («p1^= «, p1^:3, «p2^= «, p2^:3) end.

на екран дисплея виведуть результаты:

p1^= 2 p2^= 4 p3^= 18 p1^= 4 p2^= 4.

37. Д І М, А М І Ч Є З До І Є З Т Р У До Т У Р Ы.

Д, А М М И Х.

Структуровані типи даних, такі, як масиви, безлічі, записи, є статичні структури, бо їх розміри незмінні протягом усього часу виконання программы.

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

Кожна компонента будь-який динамічної структури є запис, що містить по крайнього заходу два поля: одне полі типу указутель, а друге — розміщувати даних. У випадку запис може містити чимало, а кілька укзателей і кілька полів данных.

Поле даних то, можливо перемінної, масивом, безліччю чи записью.

Для подальшого розгляду уявімо окрему компоненту в віде: г=====.

¦ D ¦

¦=====¦

¦ p ¦

L=====- де полі p — покажчик; полі D — данные.

Опис цієї компоненти дамо наступним образом:

type.

Pointer = ^Comp;

Comp = record.

D:T; pNext: Pointer end;

тут T — тип данных.

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

38. З Т Є До И.

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

LIFO (Last-In, First-Out) ;

що поступив останнім, обслуговується первым.

Зазвичай над стеками виконується три операции:

— початкова формування стека (запис першої компоненты);

— додавання компоненти в стек;

— вибірка компоненти (удаление).

Щоб сформувати стека і з ним необхідно мати дві переменные типу покажчик, перша у тому числі визначає вершину стека, а друга — допоміжна. Нехай опис цих змінних має вид:

var pTop, pAux: Pointer;

де pTop — покажчик вершини стека; pAux — допоміжний указатель.

Початкова формування стека виконується такими операторами:

р===== г=====.

New (pTop); ¦ *—¦—- ¦ ¦

L=====- ¦ ¦=====¦ pTop L—>¦ ¦

L=====;

р===== р===== pTop^.pNext:=NIL; ¦ *—¦—- ¦ ¦

L=====- ¦ ¦=====¦ pTop L—>¦ NIL ¦

L=====;

р===== р===== pTop^.D:=D1; ¦ *—¦—- ¦ D1 ¦

L=====- ¦ ¦=====¦ pTop L—>¦ NIL ¦

L=====;

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

Додавання компоненти в стік призводится з допомогою вспомогательного указателя:

р===== р===== г=====.

New (pAux); ¦ *—¦—- ¦ ¦ ——¦—* ¦

L=====- ¦ ¦=====¦ ¦ L=====- pTop ¦ ¦ ¦¦ NIL ¦

L=====;

р===== р===== р===== pAux^.pNext:=pTop; ¦ *—¦—- ¦ ¦ ——¦—* ¦

L=====- ¦ ¦=====¦¦ NIL ¦¦ *—¦;

L=====- ¦

¦ р===== ¦

¦ D1 ¦ ¦

¦=====¦ ¦

¦ NIL ¦¦ ¦ pEnd.

L=====;

р===== р===== р===== pBegin^.pNext:=NIL; ¦ *—¦—- ¦ ¦ ¦ ¦

L=====- ¦ ¦=====¦ L=====- pBegin L—>¦ NIL ¦ pEnd.

L=====;

р===== р===== р===== pBegin^.D:=D1; ¦ *—¦—- ¦ D1 ¦ ¦ ¦

L=====- ¦ ¦=====¦ L=====- pBegin L—>¦ NIL ¦ pEnd.

L=====;

р===== р===== р===== pEnd:=pBegin; ¦ *—¦—- ¦ D1 ¦ ——¦—* ¦

L=====- ¦ ¦=====¦ ¦ L=====- pBegin L—>¦ NIL ¦¦ NIL ¦¦ *—¦———>¦ NIL ¦¦ *—¦———>¦ NIL ¦¦ *—¦—->¦ *—¦-…->¦ *—¦—->¦ NIL ¦¦ *-¦-…->¦ *-¦——>¦ *-¦-…->¦NIL¦¦ * ¦ ¦ *-¦-…->¦NIL¦¦-* ¦¦ *-¦-…->¦ *-¦- ¦ *-¦—->¦ *-¦-…->¦NIL¦

Показати весь текст
Заповнити форму поточною роботою