Типи даних у Паскалі. Цілі числа у паскалі

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

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

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

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

Тип змінної визначає, які дані можна зберігати у пов'язаній з нею комірці пам'яті.

Змінні типу integerможуть бути пов'язані тільки з цілими значеннями зазвичай в діапазоні від -32768 до 32767. Pascal є інші цілочисленні типи (byte, longint).

Змінні типу realзберігають речові (дрібні) числа.

Змінна булевського(логічного) типу (boolean) може приймати лише два значення - true(1, правда) або false(0, брехня).

Символьний тип (char)може приймати значення певної впорядкованої послідовності символів.

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

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

Все вищеописане – це найпростіші типи даних. Але бувають і складні структуровані, які базуються на простих типах.

Масив- Це структура, що займає в пам'яті єдину область і що складається з фіксованого числа компонентів одного типу.

Рядкиє послідовністю символів. Причому кількість цих символів не може перевищувати 255 включно. Таке обмеження є характерною рисою Pascal.

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

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

Файлидля Pascal є послідовності однотипних даних, які зберігаються на пристроях зовнішньої пам'яті (наприклад, жорсткому диску).

Поняття такого типу даних як покажчикпов'язане з динамічним зберіганням даних у пам'яті комп'ютера. Часто використання динамічних типів даних є ефективнішим у програмуванні, ніж статичних.

На занятті розглядаються основні стандартні типи даних Паскаль, поняття змінної і константи; пояснюється, як працювати з арифметичними операціями

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

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

Розглянемо найпоширеніші в Pascal типи даних.

Цілочисленні типи даних Паскаль

Тип Діапазон Необхідна пам'ять (байт)
byte 0..255 1
shortint -128..127 1
integer -32768.. 32767 2
слово 0..65535 2
longint -2147483648..2147483647 4

Потрібно мати на увазі, що при написанні програм у паскалі integer(у перекладі з англ. ціле) є найчастіше використовуваним, оскільки діапазон значень найбільш потрібний. Якщо потрібний ширший діапазон, використовується longint(long integer, у перекладі з англ. довге ціле). Тип byteу Паскалі використовується, коли немає необхідності працювати з негативними значеннями, те саме стосується і типу слово(тільки діапазон значень тут значно більший).

Приклади того, як описуються (оголошуються) змінні в Паскалі:

program a1; var x,y:integer; (цілочисленний тип) myname:string; (рядковий тип) begin x:=1; y:=x+16; myname:="Петро"; writeln ("ім'я: ",myname, ", вік: ", y) end.

Результат:
ім'я: Петр, вік: 17

Коментарі в Паскалі

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

Завдання 3.Населення Москви дорівнює а = 9000000 жителів. Населення Нью-Васюків дорівнює b = 1000 мешканців. Напишіть програму, яка визначає різницю серед мешканців між двома містами. Використовуйте змінні величини

Речові типи даних Паскаль

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

Тип Діапазон Необхідна пам'ять (байт)
real 2.9*10E-39.. 1.7*10E38 6
single 1.5*10 E-45.. 3.4*10E38 4
double 5*10E-324.. 1.7*10E308 8
extended 1.9*10E-4951.. 1.1*10E4932 10

Тип real у Паскалі — найчастіше використовуваний із речових типів.

Вище були представлені прості типи даних Паскаль, до яких відносяться:

  • Порядкові
  • Цілі
  • Логічні
  • Символьні
  • Перераховані
  • Інтервальні
  • Речові

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

  • у форматі використовується або одне число, що означає кількість позицій, що відводяться на цю кількість в експоненційній формі;
  • p:=1234.6789; Writeln(p:6:2); (1234.68)

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

    Константи у Паскалі

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

    Оголошення константи в Паскалі відбувається до оголошення змінних (до службового слова var) і виглядає так:

    Приклад опису константи в Паскалі:

    1 2 3 4 5 6 const x = 17; var myname: string; begin myname: = "Петро"; writeln ("ім'я:", myname, ", вік:", х) end.

    const x = 17; var myname:string; begin myname:="Петро"; writeln ("ім'я: ",myname, ", вік: ", x) end.

    «Гарний» виведення цілих та речових чисел

    Для того щоб після виведення значень змінних залишалися відступи, щоб значення не «зливались» один з одним, прийнято через двокрапку вказувати скільки символів потрібно передбачити для виведення значення:


    Арифметичні операції у Паскалі

    Порядок виконання операцій

    1. обчислення виразів у дужках;
    2. множення, розподіл, div, mod зліва направо;
    3. додавання та віднімання зліва направо.

    Стандартні арифметичні процедури та функції Pascal

    Тут варто детальніше зупинитися на деяких арифметичних операціях.

    • Операція inc у Паскалі, що вимовляється як інкремент, це стандартна процедура pascal, яка означає збільшення на одиницю.
    • Приклад операції inc:

      x:=1; inc(x); (Збільшує x на 1, тобто. x=2) writeln (х)

      Більше складне використання процедури inc:
      Inc(x,n) де x - порядкового типу, n - цілого типу; процедура inc збільшує х на n.

    • Аналогічно працює процедура Dec у Паскалі: Dec(x) – зменшує x на 1 (декремент) або Dec(x,n) – зменшує x на n.
    • Оператор abs є модулем числа. Працює так:
    • a: = - 9; b: = abs(a); (b = 9)

      a:=-9; b:=abs(a); (b = 9)

    • Оператор div в паскалі часто використовується, так як цілий ряд завдань пов'язаний з дією поділ націло.
    • Залишок від поділу або оператор mod pascal теж незамінний при вирішенні ряду завдань.
    • Заслуговує на увагу стандартна функція odd Паскаля, яка визначає, чи є ціле число непарним. Т. е. повертає true (істина) для непарних чисел, false (брехня) для парних чисел.
    • Приклад використання функції odd:

      var x:integer; begin x:=3; writeln(sqr(x)); (Відповідь 9) end.

    • Операція зведення у ступінь у Паскалівідсутня як така. Але для того, щоб звести в ступінь число можна використовувати функцію exp.
    • Формула така: exp(ln(a)*n) , де - число, n - ступінь (а> 0).

      Однак у компіляторі pascal abc зведення у ступінь здійснюється значно простіше:

      var x:integer; begin x:=9; writeln(sqrt(x)); (Відповідь 3) end.

    Завдання 4.Відомі розміри сірникової коробки: висота — 12.41 см., ширина — 8 см., товщина — 5 см. Обчислити площу основи коробки та її об'єм
    (S = ширина * товщина, V = площа * висота)

    Завдання 5.У зоопарку три слони та досить багато кроликів, причому кількість кроликів часто змінюється. Слону належить з'їдати за добу сто морквин, а кролику — дві. Щоранку служитель зоопарку повідомляє комп'ютера кількість кроликів. Комп'ютер у відповідь повинен повідомити служителю загальну кількість морквин, які сьогодні потрібно згодувати кроликам і слонам.

    Завдання 6.Відомо що xкг цукерок коштує aкарбованців. Визначте, скільки коштує yкг цих цукерок, а також скільки кілограм цукерок можна купити на kкарбованців. Усі значення вводить користувач.

    Найпростішим числовим типом даних Паскале є цілі типи, призначені для зберігання цілих чисел. Цілі числа у Паскалі прийнято ділити на два типи: зі знаком та без знака. Числа зі знаком – це цілий тип, до якого входять як позитивні, і негативні числа, без знака – лише позитивні.

    Нижче наведено дві таблиці з цілими типами. Спочатку випишемо типи цілих чисел зі знаком:


    ТипБайтДіапазон значень
    shortint1 -128 ... 127
    smallint2 -32768 ... 32767
    integer, longint4 -2147483648 ... 2147483647
    int648 -9223372036854775808 ... 9223372036854775807

    А це цілочисленні типи без знака:


    ТипБайтДіапазон значень
    byte1 0 ... 255
    слово2 0 ... 65535
    longword, cardinal4 0 ... 4294967295
    uint648 0 ... 18446744073709551615

    Як видно, у першій колонці стоїть назва типу, у другій – кількість байт, яку займає в пам'яті числами цього типу, у третій – відповідно діапазон можливих значень. У числах зі знаком є ​​два типи – integer та longint (буквально «цілий» та «довгий цілий»), які є синонімами. Тобто ви можете у розділі описів використовувати як одну назву, так і іншу.

    Аналогічно у другій таблиці (невід'ємні цілі числа в Паскалі) є також два цілих типу-синоніма розміром 4 байти – longword і cardinal , тому використовуйте або одне, або інше.

    Ще можна помітити, що й числа першої таблиці умовно перенести праву частину щодо нуля (зрушити інтервал вправо те щоб мінімальним числом виявився 0), ми отримаємо інтервали цілих чисел другої таблиці, що у відповідних рядках. Так, якщо в 1-байтовому типі shortint до лівої та правої меж додати 128, то отримаємо тип byte (0..255); якщо в 2-байтовому типі smallint до меж додати 32768, то отримаємо відповідний 2-байтовий тип без знака word (0..65535) і т.д.

    Все це трапляється тому, що в цілих типах без знака числа можуть бути розділені рівно надвоє: половина чисел - в негативну частину, половина - в позитивну. А чому тоді в числах зі знаком ліва межа за абсолютною величиною на 1 більша за правий кордон? - Запитайте ви. Наприклад, у типі shortint мінімум -128, тоді як максимум всього 127 (по модулю на 1 менше). А це тому, що до правої частини входить також і 0, і про це треба знати і пам'ятати.

    То навіщо цілі числа в Паскалі ділити на стільки типів? Чому не обійтися, наприклад, найбільшим з цілих типів у PascalABC.Net і Free Pascal – int64 – це майже 9 з половиною квінтильйонів (!) як з мінусом, так і з плюсом? І з простої банальної (?) причини – економія пам'яті. Якщо вам треба скласти два невеликі однобайтові позитивні числа (0..255), а ви ці числа описали як int64 (8 байт), то на це пішло в 8 разів більше пам'яті. А якщо програма велика та змінних багато, то економія пам'яті встає дуже різко. Причому немає сенсу використовувати цілі типи зі знаком, якщо в задачі йдеться про такі величини, як довжина, маса, відстань, час тощо.

    У розділі сайту Задачник Абрамяна (підрозділ Integer) поспостерігайте за використанням різних цілих типів у Паскалі.

    Федеральне агентство з освіти

    Реферат

    «ТИПИ ДАНИХ У ПАСКАЛІ»

    1. Типи даних

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

    Взагалі мова Object Pascal характеризується розгалуженою структурою типів даних (рис. 1.1). У мові передбачений механізм створення нових типів, завдяки чому загальна кількість використовуваних у програмі типів може бути як завгодно більшою.

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

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

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

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

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

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

    1.1 Прості типи

    До простих типів належать порядкові, речові типи та тип дата-час.

    Порядкові типивідрізняються тим, що кожен із них має кінцеву кількість можливих значень. Ці значення можна певним чином упорядкувати (звідси назва типів) і, отже, з кожним з них можна зіставити деяке ціле число - порядковий номер значення.

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

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

    1.1.1 Порядкові типи

    До порядкових типів відносяться цілі, логічні, символьний, перелічуваний і тип-діапазон. До кожного їх застосовна функція Ord(x), яка повертає порядковий номер значення виразу X.


    Мал. 1.1 – Структура типів даних

    Для цілихтипів функція ord(x) повертає саме значення х, тобто Ord(X) = х для х, що належить будь-кому ціломутипу. Застосування Ord(x) до логічному , символьному та перерахованомутипу дає позитивне ціле число в діапазоні від 0 до 1 ( логічний тип), від 0 до 255 ( символьний), від 0 до 65535 ( перерахований). Тип-діапазонзберігає всі властивості базового порядкового типу, тому результат застосування щодо нього функції ord(х) залежить від властивостей цього.

    До порядкових типів можна також застосовувати функції:

    pred(x)- Повертає попереднє значення порядкового типу (значення, яке відповідає порядковому номеру ord(х) -1, тобто оrd(рred(х)) = оrd(х) - 1;

    succ (х)- Повертає наступне значення порядкового типу, яке відповідає порядковому номеру ord(х) +1, тобто оrd(Succ(х)) = оrd(х) + 1.

    Наприклад, якщо у програмі визначено змінну

    функція PRED(с) поверне символ "4", а функція SUCC(с) - символ "6".

    Якщо уявити будь-який порядковий тип як упорядковане безліч значень, що зростають ліворуч і займають на числовій осі деякий відрізок, то функція pred(x) не визначена для лівого, a succ (х) - для правого кінця цього відрізка.

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

    Таблиця 1.1 - Цілі типи

    Назва Довжина, байт Діапазон значень
    Cardinal 4 0. .. 2 147 483 647
    Byte 1 0...255
    Shortint 1 -128...+127
    Smallint 2 -32 768...+32 767
    Word 2 0...65 535
    Integer 4
    Longint 4 -2 147 483 648...+2 147 483 647
    Int64 8 -9*1018...+9*1018
    LongWord 4 0. . .4 294 967 295

    Типи LongWordі Int64вперше введені у версії 4, а типи Smallintі Cardinalвідсутні у Delphi 1. Тип integerдля цієї версії займає 2 байти і має діапазон значень від -32768 до +32767, тобто збігається з Smallint .

    З використанням процедур і з цілими параметрами слід керуватися “вкладеністю” типів, тобто. скрізь, де можна використовувати слово, допускається використання Byte(але не навпаки), в Longint"входить" Smallint, який, у свою чергу, включає в себе Shortint .

    Перелік процедур і функцій, що застосовуються до цілих типів, наведено в табл. 1.2. Літерами b, s, w, i, l позначені вирази відповідно до типу Byte , Shortint, Word, Integer та Longint ,

    х - вираз будь-якого з цих типів; літери vb, vs, vw, vi, vl, vx позначають змінні відповідних типів. У квадратних дужках зазначається необов'язковий параметр.

    Таблиця 1.2 - Стандартні процедури та функції, що застосовуються до цілих типів

    Звернення Тип результату Дія
    abs(x) x Повертає модуль x
    chr(b) Char Повертає символ за його кодом
    dec (vx [, i]) - Зменшує значення vx на i, а за відсутності i - на 1
    inc(vx[,i]) - Збільшує значення vx на i, а за відсутності i-на 1
    Hi(w) Byte Повертає старший бант аргументу
    Hi(I) Те саме Повертає третій за рахунком байт
    Lo(i) Повертає молодший байт аргументу
    Lo(w) Те саме
    odd(l) Boolean Повертає True, якщо аргумент-непарне число
    Random(w) Як у параметра Повертає псевдовипадкове число, рівномірно розподілене в діапазоні 0...(w-l)
    sqr(x) X Повертає квадрат аргументу
    swap(i) Integer Змінює місцями байти у слові
    swap (w) Word Теж

    При діях з цілими числами тип результату буде відповідати типу операндів, а якщо операнди відносяться до різних цілих типів - загального типу, який включає обидва операнда. Наприклад, при діях з shortintі словозагальним буде тип integer. У стандартному налаштуванні компілятор Delphi не виробляє код, який здійснює контроль за можливою перевіркою виходу значення з допустимого діапазону, що може призвести до непорозумінь.

    Логічні типи . До логічних відносяться типи Boolean, ByteBool, Bool, wordBoolі LongBool. У стандартному Паскалі визначено лише тип BooleanІнші логічні типи введені в Object Pascal для сумісності з Windows: типи Booleanі ByteBoolзаймають по одному байту кожен, Boolі WordBool- по 2 байти, LongBool- 4 байти. Значеннями логічного типу може бути одна із попередньо оголошених констант False (брехня) або True (істина).

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

    Ord (True) = +1, тоді як для інших типів ( Bool, WordBoolі т.д.)

    Ord (True) = -1, тому такого роду оператори слід використовувати з обережністю! Наприклад, для версії Delphi 6 оператор showMessage (" --- "), що виконується, в наступному циклі forне буде виконано жодного разу:

    for L:= False to True do

    ShowMessage ("--);

    Якщо замінити тип параметра циклу L у попередньому прикладі на Boolean, цикл працюватиме і повідомлення двічі з'явиться на екрані. [Для версії Delphi 1 і 2 ord (True) =+1 для будь-якого логічного типу.]

    Символьний тип . Значення символьного типу є безліч всіх символів ПК. Кожному символу приписується ціле число 0...255. Це число є кодом внутрішнього уявлення символу, його повертає функція ord.

    Для кодування в Windows використовується код ANSI (названий на ім'я American National Standard Institute - американського інституту стандартизації, що запропонував цей код). Перша половина символів ПК із кодами 0...127 відповідає таблиці 1.3. Друга половина символів із кодами 128...255 змінюється для різних шрифтів. Стандартні Windows-шрифти Arial Cyr, Courier New Cyr та Times New Roman для представлення символів кирилиці (без літер "е" та "Е") використовують останні 64 коди (від 192 до 256): "А"... "Я" кодуються значеннями 192..223, "а"... "я" - 224...255. Символи “Е” та “е” мають відповідно коди 168 та 184.

    Таблиця 1.3 - Кодування символів відповідно до стандарту ANSI

    Код Символ Код. Символ Код. Символ Код Символ
    0 NUL 32 BL 64 @ 96 "
    1 ЗОН 33 ! 65 А 97 а
    2 STX 34 66 У 98 b
    3 ЕТХ 35 # 67 З 99 з
    4 EOT 36 $ 68 D 100 d
    5 ENQ 37 % 69 Е 101 е
    6 ACK 38 & 70 F 102 f
    7 BEL 39 " 71 G 103 д
    8" BS 40 ( 72 Н 104 h
    9 HT 41 ) 73 I 105 i
    10 LF 42 * 74 J 106 j
    11 VT 43 + 75 До 107 k
    12 FF 44 F 76 L 108 1
    13 CR 45 - 77 М 109 m
    14 SO 46 78 N 110 n
    15 SI 47 / 79 0 111 о
    16 DEL 48 0 80 Р 112 P
    17 DC1 49 1 81 Q 113 q
    18 DC2 50 2 82 R 114 r
    19 DC3 51 3 83 S 115 s
    20 DC 4 52 4 84 Т 116 t
    21 NAK 53 5 85 U 117 u
    22 SYN 54 6 86 V 118 v
    23 ETB 55 7 87 W 119 W
    24 CAN 56 8 88 х 120 x
    25 EM 57 9 89 Y 121 У
    26 SUB 58 : 90 Z .122 z
    27 ESC 59 ; 91 t 123 {
    28 FS 60 < 92 \ 124 1
    29 GS 61 = 93 ] 125 }
    30 RS 62 > 94 Л 126 ~
    31 US 63 F 95 127 r

    Символи з кодами 0...31 відносяться до службових кодів. Якщо ці коди використовуються в тексті програми, вони вважаються пробілами.

    ЛЕКЦІЯ 2

    Основи програмування.

    Введення у Pascal. Типи даних. Операції.

    Алфавіт мовиPascal

    Будь-яка природна мова складається з таких елементів, як символи, слова, словосполучення, речення. У мові програмування є аналогічні елементи: символи, слова, висловлювання (словосполучення), оператори (пропозиції).

    Слова утворюються із сукупності символів. Вирази - це групи слів, а оператори - це комбінації слів та виразів. Символи мови - є елементарні знаки (літери), які використовуються для складання текстів. Так от набір цих символів і утворює алфавіт мови.

    Алфавіт мови Pascal складається з:

    1.великих і малих літер латинського алфавіту, куди входять такі символи:

    A B C D E F G H I J K L M N O P Q R S T U V W X Y Z - великі літери;

    A b c d e f g h i j k l m n o p q r s t u v w x y z - малі літери;

    2. десяткові арабські цифри: 0 1 2 3 4 5 6 7 8 9;

    3. шістнадцяткові цифри (будуються з десяткових цифр і літер від A до F);

    4. 32 великі та малі літери російського алфавіту;

    5. спеціальні символи:

    Комбінації спеціальних символів можуть утворювати складові символи:

    : = привласнення;

    < >не дорівнює;

    >= більше чи одно;

    <= меньше или равно;

    Діапазон значень;

    (* *) або ( )- коментар.

    Структура Pascal-програми

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

    Будь-яка Pascal-програма може складатися з наступних блоків (квадратними дужками тут і надалі помічені необов'язкові частини):

    program<имя_программы>;

    [uses<имена_подключаемых_модулей>;]

    [ label<список_меток>;]

    [ const<имя_константы> = <значение_константы>;]

    [type<имя_типа> = <определение_типа>;]

    [var<имя_переменной> : <тип_переменной>;]

    [ procedure<имя_процедуры> <описание_процедуры>;]

    [ Function<имя_функции> <описание_функции>;]

    begin (початок основного тіла програми)

    <операторы>

    end. (* Кінець основного тіла програми *)

    Пізніші версії компіляторів мови Pascal вже не вимагають вказувати назву програми, тобто рядок program<имя_программы>; можна опустити. Але це можливо тільки в тому випадку, якщо вся програма міститься в одному файловому модулі. Якщо ж програма складається з кількох самостійних шматків - модулів, кожен з них повинен мати заголовок (program або unit).

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

    Компілятори мови Pascal не розрізняють малі та великі літери, а пробільні символи ігнорують, тому текст програми можна структурувати так, щоб читати та налагоджувати його було найбільш зручно.

    Директиви компілятора

    Рядок, що починається символами ($, є не коментарем, а директивою компілятора - спеціальною командою, від якої залежить процес компіляції та виконання програми. Директиви ми розглядатимемо в тих розділах, до яких вони відносяться "за змістом".

    Наприклад, рядок ($I-,Q+) відключає контроль правильності введення-виведення, але включає контроль переповнення при обчисленнях.

    Ідентифікатори

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

    Ви можете давати програмним об'єктам будь-які імена, але необхідно, щоб вони відрізнялися від зарезервованих слів, що використовуються мовою Pascal, тому що компілятор все одно не прийматиме змінні з "чужими" іменами.

    Наведемо список найпоширеніших зарезервованих слів:

    array implementation shl

    case interface string

    const label then

    file pointer uses

    far procedure var

    for program while

    forward record with

    function repeat xor

    Змінні та типи даних

    Змінна - це програмний об'єкт, значення якого може змінюватися у процесі роботи програми.

    Тип даних - це характеристика діапазону значень, які можуть набувати змінних, що відносяться до цього типу даних.

    Усі змінні, що використовуються в програмі, повинні бути описані в спеціальному розділі var за наступним шаблоном:

    var<имя_переменной_1> [, <имя_переменной_2, _>] : <имя_типа_1>;

    <имя_переменной_3> [, <имя_переменной_4, _>] : <имя_типа_2>;

    Мова Pascal має великий набір різноманітних типів даних, проте зараз ми вкажемо лише деякі з них. Про всі типи даних ми поговоримо далі.

    Константи

    Константа – це об'єкт, значення якого відоме ще до початку роботи програми.

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

    У мові Pascal існує три види констант:

    Нейменовані константи (цифри та числа, символи та рядки, множини);

    Іменовані нетипізовані константи;

    Іменовані типізовані константи.

    Нейменовані константи

    Неіменовані константи немає імен, і тому їх потрібно описувати.

    Тип неіменованої константи визначається автоматично, за замовчуванням:

    Будь-яка послідовність цифр (можливо, що попереджується знаком "-" або "+" або розбивається однією точкою) сприймається компілятором як неназвана константа - число (ціле або речове);

    Будь-яка послідовність символів, укладена в апострофи, сприймається як неназвана константа - рядок;

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

    Крім того, існують дві спеціальні константи true і false, що належать до логічного типу даних.

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

    real2: = 12.075 + х;

    string4:="abc" + string44;

    set5: = * set55;

    boolean6: = true;

    Нетипізовані константи

    Іменовані константи, як випливає з їхньої назви, повинні мати ім'я. Отже, ці імена необхідно повідомити компілятор, тобто описати в спеціальному розділі const.

    Якщо не вказувати тип константи, то на її вигляд компілятор сам визначить, до якого (базового) типу її віднести. Будь-яку вже описану константу можна використовувати при оголошенні інших констант, змінних та типів даних. Ось кілька прикладів опису нетипізованих іменованих констант:

    Типізовані константи

    Типізовані іменовані константи є змінними(!) з початковим значенням, яке на момент старту програми вже відоме. Отже, по-перше, типізовані константи не можна використовувати визначення інших констант, типів даних і змінних, а по-друге, їх значення можна змінювати у процесі роботи програми.

    Опис типизованих констант провадиться за наступним шаблоном:

    const<имя_константы> : <тип_константы> = <начальное_значение>;

    З наведених нижче прикладів видно, як це зробити:

    const n: integer = -10;

    b: boolean = true;

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

    Типи даних мови Pascal

    Компілятори Pascal вимагають, щоб дані про обсяг пам'яті, необхідної для роботи програми, були надані до початку її роботи. Для цього в розділі опису змінних (var) потрібно перерахувати всі змінні, що використовуються у програмі. Крім того, необхідно також повідомити компілятор, скільки пам'яті кожна з цих змінних буде займати.

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

    Для зручності програмістів у мові Pascal існує безліч стандартних типів даних і плюс до того можливість створювати нові типи даних на основі вже наявних (стандартних або знову-таки визначених самим програмістом), які називаються конструйовані.

    Поділ на базові та конструйовані типи даних у мові Pascal показано в таблиці:

    Порядкові (дискретні) типи даних

    Адресні типи даних

    Структуровані типи даних

    Арифметичні типи даних

    Базові типи даних

    Логічний

    Символьний

    Речові

    Нетипізі

    ванний покажчик

    Типи, що конструюються

    Перерахований

    week = (su, mo, tu, we, th, fr, sa);

    Типізований покажчик

    Масив array

    Рядок string

    Запис record

    Процедурний

    Об'єктний

    Інтервал (діапазон)

    Типи даних, що конструюються програмістом

    Порядкові типи даних

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

    1. Кожному елементу порядкового типу можна порівняти унікальний (порядковий) номер. Нумерація значень починається із нуля. Виняток - типи даних shortint, integer і longint. Їхня нумерація збігається зі значеннями елементів.

    2. Крім того, на елементах будь-якого порядкового типу визначено порядок (в математичному сенсі цього слова), який залежить від нумерації. Таким чином, для будь-яких двох елементів порядкового типу можна точно сказати, який із них менший, а який – більше.

    Стандартні підпрограми, що обробляють порядкові типи даних

    Тільки для величин порядкових типів визначено такі функції та процедури:

    1.Функція ord(x) повертає порядковий номер значення змінної x (щодо типу, якого належить змінна х).

    2.Функція pred(x) повертає значення, що передує х (до першого елемента типу не застосовується).

    3.Функція succ(x) повертає значення, наступне за х (до останнього елемента типу не застосовується).

    4.Процедура inc(x) повертає значення, наступне за х (для арифметичних типів даних це еквівалентно оператору x:=x+1).

    5.Процедура inc(x,k) повертає k-е значення, наступне за х (для арифметичних типів даних це еквівалентно оператору x:=x+k).

    6.Процедура dec(x) повертає значення, що передує х (для арифметичних типів даних це еквівалентно оператору x:=x-1).

    7.Процедура dec(x,k) повертає k-e значення, що передує х (для арифметичних типів даних це еквівалентно оператору x:=x-k).

    На перший погляд здається, що результат застосування процедури inc(x) повністю збігається з результатом застосування функції succ(x). Однак різниця між ними проявляється на межах допустимого діапазону. Функція succ(x) не застосовується до максимального елемента типу, а ось процедура inc(x) не видасть жодної помилки, але, діючи за правилами машинного додавання, додасть чергову одиницю до номера елемента. Номер, звичайно ж, вийде за межі діапазону та за рахунок усічення перетвориться на номер мінімального значення діапазону. Виходить, що процедури inc() і dec() сприймають будь-який порядковий тип ніби "замкнутим у кільце": відразу після останнього знову йде перше значення.

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

    type sixteen = 0..15;

    спроба додати 1 до 15 призведе до наступного результату:

    Початкова одиниця буде відсічена, тому вийде, що inc(15)=0.

    Аналогічна ситуація на нижній межі допустимого діапазону довільного порядкового типу даних спостерігається для процедури dec(x) та функції pred(x):

    dec(min_element)= max_element

    Типи даних, що належать до порядкових

    1. Логічний тип boolean має два значення: false та true, і для них виконуються такі рівності:

    ord(false)=0, ord(true)=1, false

    pred(true)=false, succ(false)=true,

    inc(true)=false, inc(false)=true,

    dec (true) = false, dec (false) = true.

    2. До символьного типу char входить 256 символів розширеної таблиці ASCII (наприклад, "a", "b", "я", "7", "#"). Номер символу, що повертається функцією ord(), збігається із номером цього символу в таблиці ASCII.

    3. Цілочисленні типи даних зведемо до таблиці:

    Тип даних

    Кількість байтів

    Діапазон

    2147483648..2147483647

    4. Типи даних, що перераховуються, задаються в розділі type явним перерахуванням їх елементів. Наприклад:

    type week =(sun,mon,tue,wed,thu,fri,sat)

    Нагадаємо, що для цього типу даних:

    inc(sat) = sun, dec(sun) = sat.

    5. Інтервальні типи даних задаються лише межами діапазону. Наприклад:

    type month = 1..12;

    budni=mon..fri;

    6. Типи даних, що конструюються програмістом, описуються в розділі type за наступним шаблоном:

    type<имя_типа> = <описание_типа>;

    Наприклад:

    type lat_bukvy = "a".."z", "A".."Z";

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

    type int = integer;

    можна трохи скоротити текст програми.

    Речові типи даних

    Ці типи даних є арифметичними, але не порядковими.

    Тип даних

    Кількість байтів

    Діапазон (абсолютної величини)

    1.5*10-45..3.4*1038

    2.9*10-39..1.7*1038

    5.0*10-324..1.7*10308

    3.4*10-4932..1.1*104932

    Типи даних, що конструюються

    Ці типи даних (разом з певними для них операціями) ми розглядатимемо далі протягом декількох лекцій.

    Операції та вирази

    Арифметичні операції

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

    Примітка: Усі наведені нижче операції (за винятком унарних "-" і not) вимагають двох операндів.

    1. Логічні операції (and – логічне І, or – логічне АБО, not – логічне НЕ, xor – що виключає АБО) застосовні лише до значень типу boolean. Їх результатом також є величини типу boolean. Наведемо таблиці значень цих операцій:

    true false true

    false false false

    true false false

    2. Операції порівняння (=,<>, >, <, <=, >=) застосовні до всіх базових типів. Їх результатами також є значення типу boolean.

    3. Операції цілочисленної арифметики можна застосовувати лише до цілих типів. Їхній результат - ціле число, тип якого залежить від типів операндів.

    a div b - розподіл а на b націло (не потрібно, напевно, нагадувати, що розподіл на 0 заборонено, тому в таких випадках операція видає помилку). Результат належатиме до типу даних, загальному для тих типів, до яких належать операнди.

    Наприклад, (shortint div byte = integer). Пояснити це можна так: integer - це мінімальний тип, підмножина якого є одночасно і byte, і shortint.

    a mod b - взяття залишку при розподілі на b націло. Тип результату, як і попередньому випадку, визначається типами операндов, а 0 є забороненим значенням для b. На відміну від математичної операції mod, результатом якої є невід'ємне число, знак результату " програмістської " операції mod визначається знаком її першого операнда. Отже, якщо у математиці (-2 mod 5)=3, то ми (-2 mod 5)= -2.

    a shl k - зсув значення а на k бітів вліво (це еквівалентно множенню значення змінної на 2k). Результат операції матиме той самий тип, як і перший її операнд (а).

    a shr k - зрушення значення на k бітів вправо (це еквівалентно поділу значення змінної але в 2k націло). Результат операції матиме той самий тип, як і перший її операнд (а).

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

    4. Операції загальної арифметики (+, -, *, /) застосовні до всіх арифметичних типів. Їх результат належить до типу даних, загальному обох операндов (виняток становить лише операція дробового поділу /, результат якої завжди належить до речовинного типу даних).

    Інші операції

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

    #, in, +, *, : див. лекцію 5 «Символи. Рядки. Безліч»

    @, ^ : див. лекцію 7 «Адреси та покажчики»

    Стандартні арифметичні функції

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

    Функція

    Опис

    Тип аргументу

    Тип результату

    Абсолютне значення (модуль) числа

    Арифметичний

    Збігається з типом аргументу

    Арктангенс (у радіанах)

    Арифметичний

    Речовий

    Косинус (у радіанах)

    Арифметичний

    Речовий

    Експонента (ex)

    Арифметичний

    Речовий

    Взяття дробової частини числа

    Арифметичний

    Речовий

    Взяття цілої частини числа

    Арифметичний

    Речовий

    Натуральний логарифм (на підставі e)

    Арифметичний

    Речовий

    Перевірка непарності числа

    Значення числа

    Речовий

    Округлення до найближчого цілого

    Арифметичний

    Округлення "вниз" - до найближчого меншого цілого

    Арифметичний

    Сінус (у радіанах)

    Арифметичний

    Речовий

    Зведення у квадрат

    Арифметичний

    Речовий

    Вилучення квадратного кореня

    Арифметичний

    Речовий

    Арифметичні вирази

    Усі арифметичні операції можна поєднувати одна з одною - звісно, ​​з урахуванням допустимих їх операндов типів даних.

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

    Приклади арифметичних виразів:

    (x<0) and (y>0) - вираз, результат якого належить до типу boolean;

    z shl abs(k) - другим операндом є виклик стандартної функції;

    (x mod k) + min (a, b) + trunc (z) - поєднання арифметичних операцій та викликів функцій;

    odd(round(x/abs(x))) - "багатоповерховий" вираз.

    Порядок обчислень

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

    Таблиця 2.1. Пріоритети (для всіх) операцій мови Pascal