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

Покажчики

Паскаль підтримує використання покажчиків (типізовані ^тип і нетипізовані pointer):

type a = ^ B; b = record x : Integer ; Y : Char ; Z : a; end ; var pointer_to_b : a;

Тут змінна pointer_to_b - покажчик на тип даних b, є записом. Тип типізованого покажчика може бути заданий перед оголошенням типу, на який він посилається. Цей виняток до правила, яке говорить, що будь-яка річ належна бути оголошена перед тим, як використовується. Введення цього винятку дозволило організовувати рекурентні визначення структур даних, у тому числі такі, як лінійні списки, стеки і черзі, включаючи покажчик на запис в описі цього запису (див. також: нульовий покажчик - nil).

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

Щоб створити новий запис і присвоїти значення 10 і символ A полям a і b в ній, необхідні наступні оператори:

new ( pointer_to_b ) ; {Виділення пам'яті вказівником} pointer_to_b ^. x : = 10 ; {Разименовиваніе покажчика та звернення до поля запису} pointer_to_b ^. y : = 'A' ; Pointer_to_b ^. z : = nil ; ... dispose ( pointer_to_b ) ; {Звільнення пам'яті з-під покажчика}

Для цілей звернення до полів записів і об'єктів можна також використовувати оператор with, як показано в прикладі:

new ( pointer_to_b ) ; With pointer_to_b ^ do begin x : = 10 ; Y : = 'A' ; Z : = nil end ; ... dispose ( pointer_to_b ) ;

Процедурний тип

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

type myfunc = function : string ; function func1 : string ; begin func1 : = 'Func N 1' end ; function func2 : string ; begin func2 : = 'Func N 2' end ; var fun : myfunc; begin fun : = @ Func1; writeln ( fun ) {Відбувається виклик функції func1} end .

Оператори управління виконанням програми

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

while a <> b do {Цикл з передумовою} writeln ( 'Очікування' ) ; if a> b then {Умовний оператор} writeln ( 'Умова виповнилося' ) else {Else-секція - може бути відсутнім} writeln ( 'Умова не виповнилося' ) ; for i : = 1 to 10 do {Ітераційний цикл} writeln ( 'Ітерація №' , i : 1 ) ; With a do {Оператор With - метод прискорення доступу до полів запису} begin l : = 1 ; K : = 2 ; P : =- 3 ; end ; repeat {Цикл з постусловіем} a : = a + 1 until a = 10 ; case i of {Умовний оператор множинного вибору} 0 : write ( 'Нуль' ) ; 1 : write ( 'Один' ) ; 2 : write ( 'Два' ) else write ( 'Невідоме число' ) {Else-секція - може бути відсутнім} end ;

В операторах while, for, if, case як виконуваного оператора може використовуватися блок. Така конструкція, що представляє собою звичайний оператор або блок, називається складним оператором.

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

assign ( inp , 'Text.txt' ) ; {$ I-} {Відключення режиму IO checking-генерації коду завершення програми у разі помилки введення-виведення} {(Для випадку, якщо файл не знайдено)} reset ( inp ) ; {$ I +} {Включення режиму IO checking} if IOresult = 0 then begin {Перевіряємо значення зміною ioresult (<> 0 в разі помилки вводу-виводу)} ... close ( inp ) ; end else writeln ( 'File not found' )

Існують директиви, аналогічні директивам препроцесора C / C + + ( $ifdef, $define, $include), вони обробляються компілятором в процесі компіляції.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]