Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторна робота№1 информатика.doc
Скачиваний:
2
Добавлен:
01.05.2025
Размер:
67.58 Кб
Скачать

Опис констант

Розділ опису іменованих констант починається зі службового слова const, після якого йдуть елементи опису виду

     ім'я константи = значення;

або      ім'я константи: тип = значення;

наприклад:      const

       Pi = 3.14;

       Count = 10;

       Name = 'Mike';

       DigitsSet = ['0 '.. '9'];

       Arr: array [1 .. 5] of integer = (1,3,5,7,9);

       Rec: record name: string; age: integer end = (name: 'Іванов'; age: 23);

       Arr2: array [1 .. 2,1 .. 2] of real = ((1,2), (3,4));

Опис тегів

Розділ опису міток починається з зарезервованого слова label, після якого слідує список міток, що перераховуються через кому. В якості міток можуть бути використані ідентифікатори і позитивні цілі числа:      label a1, l2, 777777;

Опис типів

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

     ім'я типу = тип;

наприклад,

     type

       myint = integer;

       arr10 = array [1 .. 10] of integer;

       pinteger = ^ integer;

       A = class

         i: integer;

         constructor Create (ii: integer);

         begin

           i: = ii;

         end;

       end;

При описі рекурсивних структур даних покажчик на тип може фігурувати раніше опису самого типу у визначенні іншого типу:      type

       PNode = ^ TNode;

       TNode = record

         data: integer;

         next: PNode;

       end;

При цьому важливо, щоб визначення обох типів перебували в одному розділі type.

На відміну від Delphi Object Pascal наступний рекурсивний опис вірний:

     type

       TNode = record

         data: integer;

         next: ^ TNode;

       end;

Зазначимо, що для посилальних типів (класів) дозволяється опис поля з типом, що збігається з типом поточного класу:

     type

       Node = class

         data: integer;

         next: Node;

       end;

Опис процедур і функцій

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

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

Опис процедури має вигляд:

    procedure ім'я ( список формальних параметрів) ;

    розділ описів

    begin       оператори     end ;

Опис функції має вигляд :

    function ім'я ( список формальних параметрів) : тип значення ;

    розділ описів

    begin       оператори     end ;

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

Список формальних параметрів разом з оточуючими дужками може бути відсутнім. Він складається з однієї або декількох секцій , розділених символом " ; " . Кожна секція складається зі списку змінних , що перераховуються через кому , після якого йдуть двокрапка і тип . Кожна секція може передувати ключовим словом var або const , що вказує на те , що параметри передаються за посиланням ( см.п. Параметри процедур і функцій). Тип формального параметра повинен бути або ім'ям , або динамічним масивом , або безліччю , або процедурної змінної ( для останніх трьох типів має місце структурна еквівалентність типів).

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

    procedure DoAdd ( a , b : real ; var res : real ) ;

    begin       res : = a + b ;

    end ;

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

наприклад:     function Add ( a , b : real ) : real ;

    begin       Add : = a + b ;

    end ;

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

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

    function MinElement ( a : array of real ) : real ;

    var x : real ;

    begin       Result : = real.MaxValue ;

      foreach x in a do

        if x < Result then

          Result : = x ;

    end ;

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

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