Які типи змінних використовують у мові pascal. Типи даних у Паскалі (змінні, константи), їх види та опис

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

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

PRED (X) - повертає попереднє значення порядкового типу (значення, яке відповідає порядковому номеру ORD (X) - 1), тобто.

ORD(PRED(X)) = ORD(X) - 1;

SUCC (X) - повертає таке значення порядкового типу, що відповідає порядковому номеру ORD (X) +1, тобто.

ORD(SUCC(X)) = ORD(X) + 1.

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

функція PRED(C) поверне значення "4", а функція SUCC(C) - значення "6".

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

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

Таблиця 4.1

З використанням процедур і з цілими параметрами слід керуватися «вкладеністю» типів, тобто. скрізь, де може використовуватися WORD, допускається використання BYTE (але не навпаки), в LONGINT «входить» INTEGER, який, у свою чергу, включає SHORTINT.

Перелік процедур і функцій, що застосовуються до цілих типів, наведено в табл.4.2. Літерами b, s, w, i, lпозначені вирази відповідно типу BYTE, SHORTINT, WORD, INTEGER та LONGINT, x - вираз будь-якого з цих типів; літери vb, vs, vw, vi, vl, vxпозначають змінні відповідних типів. У квадратних дужках зазначається необов'язковий параметр.

Таблиця 4.2

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

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

а: = 32767; (Максимально можливе значення типу INTEGER)

х: = а + 2; (Переповнення при обчисленні цього виразу !}

у:= LongInt(а)+2; (Переповнення немає після приведення змінної до більш потужного типу)

WriteLn(x:10:0, у:10:0)

В результаті прогону програми отримаємо

Логічний тип. Значеннями логічного типу може бути одна із попередньо оголошених констант FALSE (брехня) або TRUE (істина). Для них справедливі правила:

False< True;

succ (False) = True;

pred(True) = False.

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

for 1:= False to True do ....

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

Для кодування використовується код ASCII ( American Standard Code for Information Interchange- американський стандартний код обміну інформацією). Це 7-бітовий код, тобто. з його допомогою можна закодувати лише 128 символів у діапазоні від 0 до 127. У той же час у 8-бітному байті, відведеному для зберігання символу в Турбо Паскалі, можна закодувати вдвічі більше символів у діапазоні від 0 до 255. Перша половина символів ПК із кодами 0...127 відповідає стандарту ASCII (табл. 4.3). Друга половина символів з кодами 128...255 не обмежена жорсткими рамками стандарту і може змінюватися на ПК різних типів (додаток 2 наведено деякі поширені варіанти кодування цих символів).

Таблиця 4.3

Кодування символів відповідно до стандарту ASCII
Код Символ Код Символ Код Символ Код Символ
NUL BL ® "
ЗОН ! A a
STX " У b
ЕТХ # З з
EOT $ D d
ENQ % E e
АСК & F f
BEL " G g
BS ( H h
НТ ) I i
LF * J j
VT + k k
FF , L i
CR - M m
SO . N n
SI / Про
DEL p P
DC1 Q q
DC2 R r
DC3 S s
DC4 T t
NAK U u
SYN V V
ETB w w
CAN X X
EM У У
SUB : z z
ESC / [ {
FS < \ l
GS = ] }
RS > ^ ~
US ? - n

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

Символ Код Значення
BEL Дзвінок; виведення на екран цього символу супроводжується звуковим сигналом
НТ Горизонтальна табуляція; при виведенні на екран зміщує курсор у позицію, кратну 8 плюс 1 (9, 17, 25 і т.д.)
LF Переклад рядка; при виведенні його на екран усі наступні символи будуть виводитися, починаючи з тієї ж позиції, але на наступному рядку
VT Вертикальна табуляція; при виведенні на екран замінюється спеціальним знаком
FF Прогін сторінки; при виведенні на принтер формує сторінку, при виведенні на екран замінюється спеціальним знаком
CR Повернення каретки; вводиться натисканням клавіші Enter (при введенні за допомогою READ або READLN означає команду «Введення» і в буфер введення не поміщається; при виведенні означає команду «Продовжити виведення з початку поточного рядка»)
SUB Кінець файлу; вводиться із клавіатури натисканням Ctrl-Z; при виведенні замінюється спеціальним знаком
SSC Кінець роботи; вводиться з клавіатури натисканням клавіші ESC; при виведенні замінюється спеціальним знаком

До типу CHAR застосовні операції відносини, і навіть вбудовані функції: СНR(В) - функція типу CHAR; перетворює вираз типу BYTE на символ і повертає його своїм значенням;

UPCASE(CH) – функція типу CHAR; повертає прописну букву, якщо СН -рядкова латинська буква, інакше повертає сам символ СН, наприклад:

cl:= UpCase("s") ;

c2:= UpCase ("Ф");

WriteLn(cl," ",c2)

Так як функція UPCASE не обробляє кирилицю, в результаті цього прогону

програми на екран буде видано

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

colors = (red, white, blue);

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

Тип Місяць = (січ, лютий, березень, квітень, травень, червень, липень, серпень, сен, окт, ного, дек);

місяць: Тип Місяць;

if місяць = серп then WriteLn("Добре б поїхати до моря!");

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

TypeMonth=(jan,feb,mar,may,jun,jul,aug,sep,oct,nov,dec);

місяць: TypeMonth;

if month = aug then WriteLn("Добре б поїхати до моря!");

Відповідність між значеннями типу, що перераховується, і порядковими номерами цих значень встановлюється порядком перерахування: перше значення в списку отримує порядковий номер 0, друге - 1 і т.д. Максимальна потужність типу, що перераховується, становить 65536 значень, тому фактично перерахований тип задає деяке підмножина цілого типу WORD і може розглядатися як компактне оголошення відразу групи цілих констант зі значеннями О, 1 і т.д.

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

colors = (black, red, white);

ordenal = (one, two, three);

days = (monday, tuesday, Wednesday);

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

ord(black)=0, ..., ord(white)=2,

ord(one)=0, ...ord(three)=2,

ord(monday)=0, ...ord(Wednesday)=2.

Однак, якщо визначено змінні

col:colors; num:ordenal;

то допустимі оператори

num: = succ (two);

day:= pred(tuesday);

але неприпустимі

Як уже згадувалося, між значеннями типу, що перераховується, і безліччю цілих чисел існує однозначна відповідність, що задається функцією ORD(X). У Турбо Паскалі допускається і зворотне перетворення: будь-який вираз типу WORD можна перетворити на значення типу, що перераховується, якщо тільки значення цілочисленного виразу не перевищує потужне1™ перелічуваного типу. Таке перетворення досягається застосуванням автоматично оголошеної функції з ім'ям типу, що перераховується (див. п. 4.4). Наприклад, для розглянутого вище оголошення типів еквівалентні такі присвоєння:

col:= colors(0);

Зрозуміло, привласнення

буде неприпустимим.

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

col: (black, white, green);

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

<мин.знач.>..<макс.знач.>

Тут<мин.знач. >- Мінімальне значення типу-діапазону;

<макс.знач.>- максимальне значення.

Наприклад:

digit = "0".. "9";

Тип-діапазон необов'язково описувати в розділі TYPE, а можна вказувати безпосередньо при оголошенні змінної, наприклад:

Ichr: "A".."Z";.

При визначенні типу-діапазону слід керуватися такими правилами:

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

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

WeekEnd = sa.. su;

то ORD(W) поверне значення 5 , тоді як PRED(W) призведе до помилки.

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

НIGН(Х) - повертає максимальне значення типу-діапазону, до якого належить змінна X;

LOW(X) -повертає мінімальне значення типу-діапазону.

Наступна коротка програма виведе на екран рядок

WriteLn(Low(k),"..",High(k))

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

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

Математично це записується так:

(-1) s × M × B E , де s – знак, B-основа, E – порядок, а M – мантиса.

Підстава визначає систему числення розрядів. Математично доведено, що числа з плаваючою комою з базою B=2 (двійкове уявлення) найбільш стійкі до помилок округлення, тому на практиці зустрічаються тільки бази 2 і, рідше, 10. Для подальшого викладу завжди будемо вважати B=2, і формула числа с плаваючою комою матиме вигляд:

(-1) s × M × 2 E

Що таке мантиса та порядок? Мантіса- Це ціле число фіксованої довжини, яке представляє старші розряди дійсного числа. Допустимо наша мантиса складається з трьох біт (| M | = 3). Візьмемо, наприклад, число «5», яке в двійковій системі дорівнюватиме 101 2 . Старший біт відповідає 2 2 = 4, середній (який ми дорівнює нулю) 2 1 =2, а молодший 2 0 =1. Порядок- Це ступінь бази (двійки) старшого розряду. У разі E=2. Такі числа зручно записувати в так званому «науковому» стандартному вигляді, наприклад, «1.01e+2». Відразу видно, що мантиса складається із трьох знаків, а порядок дорівнює двом.

Допустимо ми хочемо отримати дробове число, використовуючи ті ж 3 біти мантиси. Ми можемо зробити це, якщо візьмемо, скажімо, E=1. Тоді наше число буде рівним

1.01e+1 = 1×2 1 +0×2 0 +1×2 -1 =2+0,5=2,5

Очевидно, що таким чином те саме число можна уявити по-різному. Розглянемо приклад із довжиною мантиси |M|=4. Число «2» можна представити у такому вигляді:

2 = 10 (у двійковій системі) = 1.000e+1 = 0.100e+2 = 0.010e+3.

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

Це заощаджує один біт (оскільки неявну одиницю не потрібно зберігати в пам'яті) і забезпечує унікальність уявлення числа. У прикладі «2» має єдине уявлення («1.000e+1»), а мантиса зберігається у пам'яті як «000», т.к. старша одиниця мається на увазі неявно. Але в нормалізованому поданні чисел виникає нова проблема – у такій формі неможливо уявити нуль.

  • Аналіз даних за допомогою команд Підбір параметра та Пошук рішення
  • Аналіз та інтерпретація даних експериментально-психологічного дослідження.
  • Аналіз вихідних даних. Технічні нормативи міської залізниці.
  • АНАЛІЗ ОТРИМАНИХ ДАНИХ. ПРИЙНЯТТЯ РІШЕННЯ ПРО ДОСИЛЬНІСТЬ АБО НЕДОСТАТНОСТІ ХАРАКТЕРИСТИК ВОДОПОСТАЧАННЯ ДЛЯ ПОТРІБ СИСТЕМИ ПОЛИВУ.
  • Апаратура лінії зв'язку: апаратура передачі, кінцеве обладнання, проміжна апаратура.

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

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

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

    Розглянемо найпоширеніші в 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кг цих цукерок, а також скільки кілограм цукерок можна купити на

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

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

    За способом подання та обробки типи даних бувають:

    • прості
    • структуровані
    • покажчики
    • об'єкти
    • процедури

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

    Цілочисленний тип

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

    Тип Діапазон Розмір у байтах
    shortint -128…127 1
    integer -32 768…32 767 2
    longint -2 147 483 648…2 147 483 647 4
    byte 0…255 1
    слово 0…65 535 2

    Оголосити цілісну змінну можна в розділі Var, наприклад:

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

    Речовий тип

    У Паскалі бувають такі речові типи даних:

    Тип Діапазон Пам'ять, байт Кількість цифр
    Real 2.9e-39 … 1.7e38 6 11-12
    Single 1.5e-45 … 3.4e38 4 7-8
    Double 5.0e-324 …1.7e308 8 15-16
    Extended 3.4e-4932 … 1.1e493 10 19-20
    Comp -9.2e63 … (9.2e63)-1 8 19-20

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

    sin(x) – синус;

    cos(x) – косинус;

    arctan(x) – арктангенс;

    ln(x) – натуральний логарифм;

    sqrt(x) – квадратний корінь;

    exp(x) – експонента;

    Логічний тип

    Змінна, що має логічний тип даних, може приймати всього два значення: true (істина) і false (брехня). Тут істині відповідає значення 1, а брехня тотожна нулю. Оголосити булеву змінну можна так:

    Над даними цього можуть виконуватися операції порівняння і логічні операції: not , and, or, xor.

    Символьний тип

    Символьний тип даних – це сукупність символів, які у тому чи іншому комп'ютері. Змінна цього типу приймає значення однієї з цих символів, займає у пам'яті комп'ютера 1 байт. Слово Charвизначає величину цього типу. Існує кілька способів записати символьну змінну (або константу):

    1. як одиночний символ, укладений апострофи: 'W', 'V', 'п';
    2. вказавши код символу, значення якого має бути в діапазоні від 0 до 255.
    3. за допомогою конструкції ^K, де K - код символу, що управляє. Значення K має бути на 64 більше за код відповідного керуючого символу.

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

    Succ(x)- Повертає наступний символ;

    Pred(x)- Повертає попередній символ;

    Ord(x)- Повертає значення коду символу;

    Chr(x)- повертає значення символу за його кодом;

    UpCase(x)- Переводить літери з інтервалу 'a'..'z' у верхній регістр.

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

    Рядковий тип

    Рядок у Паскалі є послідовністю символів ув'язнених в апострофи, і позначається словом String. Число символів (довжина рядка) має не перевищувати 255. Якщо довжину рядка не вказувати, він автоматично визначитися в 255 символів. Загальний вид оголошення рядкової змінної виглядає так:

    Var<имя_переменной>: string[<длина строки>];

    Кожен символ у рядку має свій індекс (номер). Індекс першого байта - 0, але в ньому зберігається не перший символ, а довжина всього рядка, з чого випливає, що змінна цього типу займатиме на 1 байт більше за кількість змінних у ній. Номер першого символу – 1, наприклад, якщо ми маємо рядок S = stroka, то S = s;. В одному з наступних уроків рядковий тип даних буде розглянуто докладніше.

    Тип даних, що перераховується

    Тип даних, що перераховується, являє собою деяку обмежену кількість ідентифікаторів. Ці ідентифікатори полягають у круглі дужки, і відокремлюються один від одного комами.

    Type Day = (Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday);

    Змінна A може приймати лише значення, визначені в розділі Type. Також можна оголосити змінну типу в розділі Var:

    Var A: (Monday, Tuesday);

    До цього типу застосовні операції відносини, у своїй заздалегідь виразно, що Monday

    Інтервальний тип даних

    Коли необхідно задати якийсь діапазон значень, то таких ситуаціях застосовується інтервальний тип даних. Для оголошення використовується конструкція m..n, де m- Мінімальне (початкове) значення, а n- максимально (кінцеве); тут m і n є константами, які можуть бути цілого, символьного, перерахованого чи логічного типу. Описуватися величини інтервального типу можуть як розділ типів, і у розділі описи змінних.

    Загальний вигляд:

    TYPE<имя_типа> = <мин. значение>..<макс. значение>;

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

    Реферат

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

    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) Завдання 6. Повертає модуль 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 y
    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 Завдання 6.
    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 відносяться до службових кодів. Якщо ці коди використовуються в тексті програми, вони вважаються пробілами.

    До типу charзастосовні операції відносини, а також вбудовані функції:

    Сhаr (в)- функція типу char; перетворює вираз у типу Byteу символ і повертає його своїм значенням;

    UpCase(CH)- функція типу char; повертає прописну букву, якщо сн - мала латинська буква, інакше повертає сам символ сн (для кирилиці повертає вихідний символ).

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

    colors = (red, white, blue);

    Застосування перелічуваних типів робить програми наочнішими.

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

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

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

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

    <мин.знач.>..<макс.знач.>

    Тут<мин. знач. >- Мінімальне значення типу-діапазону;<макс. знач. >- максимальне значення.

    Тип-діапазон не обов'язково описувати в розділі type, а можна вказувати безпосередньо під час оголошення змінної.

    При визначенні типу-діапазону слід керуватися такими правилами:

    два символи ".." розглядаються як один символ, тому між ними неприпустимі прогалини; ліва межа діапазону не повинна перевищувати його правий кордон.

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

    До стандартної бібліотеки Object Pascal включено дві функції, що підтримують роботу з типами-діапазонами:

    High(х)- повертає максимальне значення типу-діапазону, до якого належить змінна х;

    Low (х)- Повертає мінімальне значення типу-діапазону.

    1.1.2 Речові типи

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

    Таблиця 1.4 - Речові типи

    У попередніх версіях Delphi 1...3 тип Realзаймав 6 байт і мав діапазон значень від 29*10-39 до 17*1038. У версіях 4 і 5 цей тип еквівалентний типу Double. Якщо потрібно (з метою сумісності) використовувати 6-байтні Realпотрібно вказати директиву компілятора (SREALCOMPATIBILITY ON).

    Як очевидно з табл. 1.4, речовинне число Object Pascal займає від 4 до 10 суміжних байт і має наступну структуру в пам'яті ПК.

    Тут s – знаковий розряд числа; е – експоненційна частина; містить двійковий порядок; m – мантиса числа.

    Мантіса m має довжину від 23 (для single) до 63 (для Extended) двійкових розрядів, що забезпечує точність 7...8 для singleта 19...20 для Extendedдесяткових цифр. Десятична точка (кома) мається на увазі перед лівим (старшим) розрядом мантиси, але при діях з числом її положення зсувається вліво або вправо відповідно до двійкового порядку числа, що зберігається в експоненційній частині, тому дії над речовими числами називають арифметикою з плаваючою точкою (комою) .

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

    Особливе становище в Object Pascal займають типи compі Currency, які трактуються як речові числа з дробовими частинами фіксованої довжини: compдробова частина має довжину 0 розрядів, тобто просто відсутня, currencyдовжина дробової частини -4 десяткові розряди. Фактично обидва типи визначають велике ціле число зі знаком, що зберігає 19 ... 20 значних десяткових цифр (у внутрішньому поданні вони займають 8 суміжних байт). У той же час у виразах compі currencyповністю сумісні з будь-якими іншими речовими типами: над ними визначені всі речові операції, вони можуть використовуватися як аргументи математичних функцій і т. д. Найбільш сприятливою сферою застосування цих типів є бухгалтерські розрахунки.

    1.1.3 Тип дата-час

    Тип дата-час визначається стандартним ідентифікатором TDateTimeі призначений для одночасного зберігання та дати, та часу. У внутрішній виставі він займає 8 байт і подібно currencyє речове число з фіксованою дробовою частиною: у цілій частині числа зберігається дата, в дробовій - час. Дата визначається як кількість діб, що пройшли з 30 грудня 1899, а час - як частина доби, що пройшли з 0 годин, так що значення 36444,837 відповідає даті 11.10.1999 та часу 20:05. Кількість діб може бути і негативною, проте значення менші -693594 (відповідає даті 00.00.0000 від Різдва Христового) ігноруються функціями перетворення дати до рядкового типу.

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

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

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

    Будь-який із структурованих типів (а в Object Pascal їх чотири: масиви, записи, множини та файли) характеризується множинністю утворюють цей тип елементів. Кожен елемент, у свою чергу, може належати структурованому типу, що дозволяє говорити про можливу вкладеність типів. У Object Pascal допускається довільна глибина вкладеності типів, проте сумарна довжина будь-якого їх у внутрішньому поданні має перевищувати 2 Гбайт .

    З метою сумісності зі стандартним Паскалем Object Pascal дозволяється перед описом структурованого типу ставити зарезервоване слово packed, що наказує компілятору по можливості економити пам'ять, що відводиться під об'єкти структурованого типу; Однак компілятор практично ігнорує цю вказівку: "упаковка" даних в Object Pascal здійснюється автоматично скрізь, де це можливо.

    1.2.1 Масиви

    Масиви в Object Pascal багато в чому схожі на аналогічні типи даних в інших мовах програмування. Відмінна риса масивів у тому, що це їх компоненти суть дані одного типу (можливо, структурованого). Ці компоненти можна легко впорядкувати та забезпечити доступ до будь-якого з них простою вказівкою його порядкового номера.

    Опис типу масиву визначається наступним чином:

    <имя типа>= array [<сп.инд.типов>] of<тип>;

    Тут<имя типа>- правильний ідентифікатор; array, of- зарезервовані слова (масив, з);<сп.инд.типов>- список з одного або декількох індексних типів, розділених комами; квадратні дужки, що обрамляють перелік, - вимога синтаксису;<тип>- Будь-який тип Object Pascal.

    Як індексні типи в Object Pascal можна використовувати будь-які порядкові типи, що мають потужність не більше 2 Гбайт (т. е. крім LongWordі Int64)

    Глибина вкладеності структурованих типів взагалі, отже, і масивів - довільна, тому кількість елементів у списку індексних типів (розмірність масиву) не обмежена, проте сумарна довжина внутрішнього уявлення будь-якого масиву може бути більше 2 Гбайт. У пам'яті ПК елементи масиву йдуть один за одним так, що при переході від молодших адрес до старших найбільш швидко змінюється правий індекс масиву.

    У Object Pascal можна одним оператором присвоєння передати всі елементи одного масиву іншому масиву такого самого типу.

    1.2.2 Записи

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

    Структура оголошення типу запису така:

    <имятипа>= record<сп.полей>end;

    Тут<имя типа>- правильний ідентифікатор; record/end- Зарезервовані слова (запис, кінець);<сп.полей>- список полів; є послідовністю розділів запису, між якими ставиться крапка з комою.

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

    Пропозиція case ... of, Що відкриває варіантну частину, зовні схоже на відповідний оператор вибору, але насправді лише відіграє роль своєрідного службового слова, що означає початок варіантної частини. Саме тому наприкінці варіантної частини не слід ставити endяк пару до case...of. (Оскільки варіантна частина - завжди остання в записі, за нею все ж таки стоїть end, але лише як пара до record). Ключ вибору у реченні case…ofфактично ігнорується компілятором: єдина вимога до нього в Object Pascal полягає в тому, щоб ключ визначав деякий стандартний або попередньо оголошений порядковий тип.

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

    1.2.3 Безліч

    Безліч - Це набори однотипних логічно пов'язаних один з одним об'єктів. Характер зв'язків між об'єктами лише мається на увазі програмістом і не контролюється Object Pascal. Кількість елементів, що входять до множини, може змінюватися в межах від 0 до 256 (множина, яка не містить елементів, називається порожньою). Саме мінливістю кількості своїх елементів множини відрізняються від масивів та записів.

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

    Опис типу множини має вигляд:

    <имя типа>= set of<базовый тип>;

    Тут<имя типа>- правильний ідентифікатор; set, of- зарезервовані слова (безліч, з);<базовый тип>- базовий тип елементів множини, якою може використовуватися будь-який порядковий тип, крім Word, Integer, Longint, Int64 .

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

    Внутрішній пристрій множини такий, що кожному його елементу ставиться у відповідність один двійковий розряд (один біт); якщо елемент включений до множини, відповідний розряд має значення 1, в іншому випадку - 0. У той же час мінімальною одиницею пам'яті є один байт, що містить 8 біт, тому компілятор виділив множинам по одному байту, і в результаті потужність кожного стала рівною. 8 елементів. Максимальна потужність множини - 256 елементів. Для таких множин компілятор виділяє по 16 суміжних байт.

    І ще один експеримент: змініть діапазон базового типу на 1.256. Хоча потужність цього типу становить 256 елементів, при спробі компіляції програми компілятор повідомить про помилку. . Компілятор дозволяє використовувати як базовий тип цілочисленний тип-діапазон з мінімальним кордоном 0 і максимальною 255 або будь-який перерахований тип не більше ніж з 256 елементами (максимальна потужність типу - 65536 елементів).

    1.3 Рядки

    Для обробки текстів у Object Pascal використовуються такі типи:

    короткий рядок shortStringабо string [n]де n<= 255;

    довгий рядок string ;

    широкий рядок WideString ;

    нуль-термінальний рядок pchar .

    Загальним для цих типів є те, що кожен рядок трактується як одновимірний масив символів, кількість символів в якому може змінюватися в програмі, що працює: для string [n] довжина рядка змінюється від 0 до n, для stringі pchar- Від 0 до 2 Гбайт.

    У стандартному Паскалі використовуються лише короткі рядки String [n]. У пам'яті такому рядку виділяється n+i байт, перший байт містить поточну довжину рядка, а символи розташовуються, починаючи з 2-го за рахунком байта. Оскільки для довжини рядка в цьому випадку приділяється один байт, максимальна довжина короткого рядка не може перевищувати 255 символів. Для оголошення короткого рядка максимальної довжини призначено стандартний тип ShortString(еквівалент String).

    У Windows широко використовуються нуль-термінальні рядки, що є ланцюжками символів, обмежені символом #о. Максимальна довжина такого рядка лімітується лише доступною пам'яттю і може бути дуже великою.

    У 32-розрядних версіях Delphi введено новий тип string, що поєднує у собі зручності обох типів. Працюючи з цим типом пам'ять виділяється при необхідності (динамічно) і обмежена наявної програми доступною пам'яттю.

    1.4 Вказівники та динамічна пам'ять

    1.4.1 Динамічна пам'ять

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

    1.4.2 Вказівники

    Оперативна пам'ять ПК є сукупністю осередків для зберігання інформації - байтів, кожен із яких має власний номер. Ці номери називаються адресами, вони дозволяють звертатися до будь-якого байта пам'яті. Object Pascal надає у розпорядження програміста гнучке засіб управління динамічною пам'яттю - звані покажчики. Вказівник - це змінна, яка як своє значення містить адресу байта пам'яті. За допомогою покажчиків можна розміщувати в динамічній пам'яті будь-який із відомих у Object Pascal типів даних. Лише деякі з них ( Byte, Char, ShortInt, Boolean) займають у внутрішньому поданні один байт, інші - кілька суміжних. Тому насправді покажчик адресує лише перший байт даних.

    Як правило, вказівник пов'язується з деяким типом даних. Такі покажчики називатимемо типізованими. Для оголошення типізованого покажчика використовується ^, який поміщається перед відповідним типом.

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

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

    Як мовилося раніше, значеннями покажчиків є адреси змінних у пам'яті, тому слід очікувати, що значення одного покажчика можна передавати іншому. Насправді, це не зовсім так. У Object Pascal можна передавати значення тільки між покажчиками, пов'язаними з тим самим типом даних.

    1.4.3 Виділення та звільнення динамічної пам'яті

    Вся динамічна пам'ять у Object Pascal сприймається як суцільний масив байтів, що називається купою.

    Пам'ять під будь-яку змінну, що динамічно розміщується, виділяється процедурою New. Параметром звернення до цієї процедури є типізований покажчик. В результаті звернення покажчик набуває значення, що відповідає адресі, починаючи з якої можна розмістити дані. Значення, яке вказує покажчик, т. е. власне дані, розміщені у купі, позначаються значком ^, який ставиться відразу за покажчиком. Якщо за вказівником немає ^, то мається на увазі адресу, за якою розміщені дані. Має сенс ще раз задуматися над щойно сказаним: значенням будь-якого покажчика є адреса, а щоб вказати, що йдеться не про адресу, а про ті дані, які розміщені за цією адресою, за вказівником ставиться (іноді про це говорять як про розіменування вказівника).

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

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

    Dispose(pJ);

    Dispose(pR);

    повернуть до купи пам'ять, яка раніше була закріплена за покажчиками pJ і pR (див. вище).

    Зауважу, що процедура Dispose (pPtr) не змінює значення покажчика pPtr, лише повертає до купу пам'ять, раніше пов'язану з цим покажчиком. Однак повторне застосування процедури до вільного покажчика призведе до помилки періоду виконання. Вказівник, що звільнився, програміст може позначити зарезервованим словом nil.

    1.5 Псевдоніми типів

    Для будь-якого типу можна оголосити скільки завгодно псевдонімів. Наприклад:

    TMyInteger = Integer;

    Надалі псевдонім можна використовувати так само, як і базовий тип:

    Mylnt: TMyInteger;

    Mylnt: = 2 * Round (pi);

    Такі псевдоніми зазвичай використовуються підвищення наочності коду програми. Однак у Object Pascal можна оголошувати строго типізовані псевдоніми додаванням зарезервованого слова type перед ім'ям базового типу:

    TMyIntegerType = type Integer;

    MylntVar: TMyIntegerType;

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

    функція MylntFunc(APar: integer): Integer;

    то таке звернення до неї

    MylntFunc(MylntVar)

    буде розцінено компілятором як хибне.

    Строго типізовані псевдоніми змушують компілятор виробляти інформацію про тип етапу прогону програми (RTTI - Run-Time Type Information). Ця інформація зазвичай використовується середовищем Delphi для забезпечення функціонування різного роду редакторів.

    Знання та розуміння типів даних є невід'ємною частиною у програмуванні.

    В цьому уроці ми познайомимося з типами даних у мові програмування Turbo Pascal.

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

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

    Прості типи мови
    До простих типів відносяться порядкові, речовий, рядковий та адресний (покажчики) типи. Усі вони визначають тип лише одного окремого значення.

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

    Цілочисленні типи- позначають безліч цілих чисел у різних діапазонах. Є п'ять цілих типів, що відрізняються діапазоном допустимих значень і розміром займаної оперативної пам'яті. Цілочисленні типи позначаються ідентифікаторами: Byte, ShortInt, Word, Integer, LongInt; їх характеристики наведено у наступній таблиці.

    Значення цілих типів записуються у програмі звичним способом:
    123 4 -3 +345 -699
    Наявність десяткової точки запису цілого числа неприпустимо. Буде помилкою записати ціле число таким чином:
    123.0
    Крім звичної десяткової форми запису допускається запис цілих чисел у шістнадцятковому форматі, використовуючи префікс $, наприклад:
    $01AF $FF $1A $F0A1B
    Регістр літер A, B, …, F значення не має.

    Допустимі операції:

    • - привласнення;
    • - всі арифметичні: +, - ,*, /, div, mod (при звичайному розподілі [/] результат речовий!);
    • - Порівняння<, >, >=, <=, <>, =.
    Логічний тип (Boolean)- Складається всього з двох значень: False (хибно) і True (істинно). Слова False та True визначені в мові та є, по суті, логічними константами. Регістр літер у тому написанні несуттєвий: FALSE = false. Значення цього є результатом обчислень умовних і логічних висловів і беруть участь у різноманітних умовних операторах мови.
    Допустимі операції:
    • - привласнення;
    • - Порівняння:<, >, >=, <=, <>, =;
    • - логічні операції: NOT, OR, AND, XOR
    Символьний тип (Char)- це тип даних, які з одного символу (знака, літери, коду). Значенням типу Char може бути будь-який символ набору ASCII. Якщо символ має графічне уявлення, то програмі він записується ув'язненим в одиночні лапки (апострофи), наприклад:
    "ж" "s" "." "*" " "-(пробіл)
    Для представлення апострофа його зображення подвоюється: " " " " .
    Якщо символ не має графічного уявлення, наприклад, символ табуляції або символ повернення каретки, то можна скористатися еквівалентною формою запису символьного значення, що складається з префікса # і ASCII коду символу:
    #9 #32 #13
    Допустимі операції:
    • - привласнення;
    • - Порівняння:<, >, >=, <=, <>, =. Великим вважається той символ, який має більший номер ASCII.
    Рядковий тип (String, String[n])- цей тип даних визначає послідовності символів – рядки. Параметр n визначає максимальну кількість символів у рядку. Якщо не заданий, мається на увазі n=255. Значення типу «рядок» у програмі запивається як послідовність символів, укладених в одиночні лапки (апострофи), наприклад
    "Це текстовий рядок" "This is a string"
    "1234" - це теж рядок, не число
    "" - порожня стрічка

    Допустимі операції:
    • - привласнення;
    • - додавання (конкатенація, злиття); наприклад, S:= "Зима"+" "+"прийшла!";
    • - Порівняння:<, >, >=, <=, <>, =. Рядки вважаються рівними, якщо мають однакову довжину і посимвольно еквівалентні.
    Речові типи- позначають безліч дійсних чисел у різних діапазонах. Є п'ять речових типів, що відрізняються спектром припустимих значень і обсягом займаної оперативної пам'яті. Речові типи позначаються ідентифікаторами: Real, Single, Double, Extended, Comp; їх характеристики наведено у наступній таблиці.

    Тип Compхоч і відноситься до речових типів, насправді є цілочисленним з дуже великим діапазоном значень.
    Значення речових типів можуть записуватися в програмі декількома способами:
    1.456 0.000134 -120.0 65432
    +345 0 -45 127E+12
    -1.5E-5 -1.6E+12 5E4 0.002E-6

    Буде помилкою записати речове число наступним чином:
    .5 (правильно 0.5)
    12. (правильно 12.0 чи 12)

    Речовище у формі з плаваючою точкою (експоненційна форма) записується як пара
    <мантисса>Е<порядок>
    Таке позначення розуміється як «мантиса, помножена на десять у рівні, рівному порядку». Наприклад,
    -1.6E+12 відповідає -1.6·1012

    Допустимі операції:
    - привласнення;
    - всі арифметичні: +, -, *, /;
    - Порівняння:<, >, >=, <=, <>, =.

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

    Діапазон або (обмежений тип) не є визначеним типом мови (наприклад, Integer або Char) і тому йому не відповідає жодний ідентифікатор. Цей тип є користувачем, що вводиться. Використовуючи його ми можемо визначити новий тип, який міститиме значення лише з обмеженого піддіапазону якогось базового типу. Базовим типом може бути тільки цілий тип, тип Char (символьний) і будь-який з введених програмістом перерахованих типів.

    Для введення нового типу - діапазону - потрібно в блоці опису типів TYPE вказати ім'я типу і межі діапазону, що вводиться через спеціальний символ діапазону ".." (дві точки поспіль):
    TYPE
    Century = 1..21; (піддіапазон цілочисленного типу)
    CapsLetters = "А" .. "Я"; (піддіапазон з типу Char)

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

    До структурованих типів ставляться: масив, запис, безліч, файл та інших. Усі вони визначають тип (чи типи) деякої структури даних.

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

    Тип масив визначається конструкцією:
    Array [діапазон] of ТипЕлементів;

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

    TYPE Vector = array of Real; VAR V1: Vector;
    V2: array of Byte;

    Тут змінна V1 визначається з використанням описаного вище типу Vector; тип змінної V2 конструюється безпосередньо на етапі її опису.
    У якості типу елементів масиву можна також вказувати масив, утворюючи тим самим багатовимірні структури. Наприклад, опис двовимірної структури (матриці) буде виглядати наступним чином:
    VAR M1: array of array of Byte; Це ж можна записати набагато компактніше: VAR M2: array of Byte;

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

    Writeln(V1); (виведення на екран першого елемента масиву V1) readln(M2);(введення третього елемента другого рядка матриці М2)
    У цьому урок за типами даних закінчено, текст майже повністю скопіпастен (посилання буде нижче), т.к. я не бачу сенсу цей матеріал розповідати своїми словами. Якщо хоч трохи зрозуміла різниця між типами даних, це вже добре.

    mob_info