Типи даних в Turbo Pascal

Тип работы:
Реферат
Предмет:
Программирование


Узнать стоимость

Детальная информация о работе

Выдержка из работы

Житомирський військовий інститут

Національного авіаційного університету

Реферат

на тему:

Типи даних в Turbo Pascal

Житомир 2010

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

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

Класифікація типів даних

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

Прості типи даних

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

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

Реальні типи також мають кінцеве число значень, але їх кількість дуже велика, тому кожному з них зіставити ціле число просто неможливо.

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

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

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

ORD (Х) — порядковий номер значення;

PRED (X) — порядковий номер попереднього значення;

SUCE (X) — порядковий номер наступного значення;

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

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

Цілі типи

Опис:

Var < ім'я>: integer;

Тип

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

Довжина, байт

Byte

0…255

1

Word

0…65 535

2

Integer

-32 768…32 767

2

ShortInt

-128…127

1

LongInt

-2 147 483 648…2 147 483 647

4

Byte — довжина в байт;

Word — довжина в слово;

Integer — ціле;

ShortInt — коротке ціле;

LongInt — довге ціле.

Над цілими типами визначені операції: «+», «-», «*», div — цілочислове ділення.

При використані процедур і функцій з цілочисловими параметрами слід керуватися відповідністю діапазонів типів. Наприклад: integer входить в longint, byte < word і т.д.

Якщо в виразі використані різні типи, то вони приводяться до базового типу — min потужності цілого типу, який не містить результат. Наприклад, integer та shortint, базовим є integer.

Логічний тип (BOOLEAN)

Значенням цього типу може бути одна з двох констант FALSE або TRUE.

Для них справедливі правила:

ORD (FALSE) = 0;

ORD (TRUE) = 1;

FALSE < TRUE.

Крім того є 4 стандартні логічні операції:

AND — логічний добуток (*);

OR — логічна сума;

XOR — сума по модулю «2»;

NOT — логічне заперечення (унарна операція).

Наприклад:

А = TRUE; not A=B

B = FALSEnot B=A

A and B=B A or B=A A xor B=A

A and A=A (TRUE) B or A=A B xor A=A

B and A=B A or A=A A xor A=B

B and B=B B or B=B (FALSE) B xor B=B

Опис:

Var < ім'я>: boolean;

Символьний тип (CHAR)

(character — символ).

Значення символьного типу є множиною всіх символів ПК. Кожен символ має код у диапазоні 0…255, так званий ASCII (American Standard Code for Information Interchange). Для представлення символів використовують апострофи: `A', `B', '*', '"', …

Опис:

Var < ім'я>: char;

Символьні значення можна вводити, виводити, присвоювати, порівнювати (при порівнянні використовується порядковий номер коду ASCII).

Стандартні символьні функції:

СHR(код символу) — повертає відповідний символ;

ORD (S) — повертає код символу S.

Приклад:

var y: char;

begin

y: ='b';

writ

eln (`y: '; pred (y): 5, y: 5, succ (y): 5);

end. {Результат на екрані: y: a b c}

Тип переліку

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

type

season = (winter, spring, summer, outumn);

Значенням присвоюються порядкові номери: 0,1,2,3…255.

Наприклад: ord (summer) = 2.

Значення можуть бути тільки іменними. Їх можна присвоювати і порівнювати, але не можна вводити і виводити операторами READ і WRITE.

Приклад:

type

season = (win, spr, sum, out);

var

b: byte;

c: season;

begin

readln (b);

c:= season (b);

case c of

win: writeln (`winter');

spr: writeln (`spring');

sum: writeln (`summer');

out: writeln (`outumn');

end

end.

Тип — діапазон

Визначається як інтервал значень базового типу (раніш визначеного), яким може бути будь-який порядковий тип:

< ім'я> = < min значення>. <max значення> ;

Приклад:

type

day = 1. 31;

month = 1. 12;

letter = `A'. 'Z';

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

а) — це один символ (без пробілу);

б) ліва границя не повинна перевищувати праву;

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

Реальний тип

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

Тип

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

Число цифр

Довжина байт

Single

1. 5Е-45…3,4Е38

7…8

4

Real

2,9Е-39…1,7Е38

11…12

6

Double

5Е-324…1,7Е308

15…16

8

Extended

3,4Е-4932…1,1Е4932

19…20

10

Comp

1Е-20…1Е20

19…20

8

Реальні типи можна зобразити з фіксованою і плаваючою комами: (17. 38) (1738Е-2)

Для прискорення обчислень, можна переопреділяти тип REAL:

type

real = double; або

type

real = extended;

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

Round — округляє real до ближнього цілого;

Trunc — усікає real шляхом відкидання дробної частини.

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

Масиви — тип даних, який складається з фіксованої кількості елементів одного типу.

Опис масиву можна виконувати як у розділі TYPE, так і VAR.

TYPE < ім'я масиву> = ARRAY[діапазон] OF < тип компонент>.

(ідентифікатор)(тип індексу)(базовий тип)

Тип індексу (діапазон) — будь-який порядковий тип, зокрема LongInt. Тип компонент — будь-який тип ТР, або інший масив.

Приклад:

type

M1 = array [1. 100] of real;

Mat2 = array [1. 10] of array [1. 20] of integer;

var

vector: M1;

Arr1, Arr2: Mat2;

Інакше

var < ідентефікатор>: array [діапазон] of < тип>;

Приклад:

var vector: array [1. 100] of real;

Над змінними масивів можна виконувати операції присвоювання і порівняння.

Арифметичні дії, введення та виведення не можна виконувати над послідовностями, але можна над їх окремими елементами.

Елемент масиву виділяється конкретним значенням індексу. Наприклад:

var X: array [0. 99] of real;

Тоді Х[0] — перший елемент, Х[1] — другий і т.д. Масив може бути одномірним, двомірним і т.д. Наприклад:

var mat2: array [1. 10,1. 20] of integer;

Компоненти масиву позначаються: Mat2 [1,3]; Mat2 [5,8] … Так і організовується доступ до елементів двомірних масивів.

Приклад:

Введення значень у масив М.

var M: array [ 1. 10 ] of integer;

i: integer;

begin

i := 0;

repeat

i := i+1;

read (M [ i ])

until i = 10

end.

Обчислити значення функції Yi=(a+b+xi)/2, якщо, а і b — фіксовані значення; x={3,8,12,20,25}, i=1,N.

var

A, B: real;

i, N: integer;

X, Y: array [1. 5] of real;

begin

read (A, B, N);

for i := 1 to N do

begin

read (X [i]);

Y [i] := (A + B + X[i])/2;

write (Y [i]);

end

end.

3). Введення одномірного масиву і виведення у вигляді:

а) вектора-рядка;

б) вектора-стовпчика.

a) var M: array [1. 10] of real;

i: integer;

begin

i := 0;

repeat

i := i + 1;

reat (M [i]);

until i =10;

for i := 1 to 10 do

write (X [i]: 5: 2,'');

end.

b) var

M: array [1. 10] of real;

i: integer;

begin

i := 0;

repeat

i := i + 1;

read (M [i]);

until i =10;

for i := 1 to 10 do

writeln (X [i]: 5: 2);

end.

Стандартні модулі ТР. Їх призначення

Модуль — це окремо транслюєма програмна одиниця.

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

USES < ім'я модуля>

Основна частина засобів ТР розташована в стандартних модулях, які поставляються разом з компілятором.

Існує вісім стандартних модулів: SYSTEM, DOS, CRT, PRINTER, GRAPH, OVERLAY, TURBO3, GRAPH3.

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

Модуль DOS — призначений для забезпечення інтерфейса з програмами ОС.

Модуль CRT — містить засоби керування дисплеєм в текстовому режимі, клавіатурою, динаміком. За допомогою його процедур можна змінювати колір, створювати вікна, звукові тона.

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

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

Модуль OVERLAY — розбиває великі програми на сегменти перекриття (оверлейні сегменти), які використовують загальну область пам’яті.

Модуль TURBO3 i GRAPH3 — для сумісності з версією ТР 3.0.

SYSTEM, CRT, DOS розміщені у файлі TURBO. TPL. GRAPH - окремий файл GRAPH. TPU.

Всі модулі крім SYSTEM стають доступними після їх підключення:

USES < ім'я модуля>.

Стандартні функції і оператори роботи з рядками

Символьні масиви

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

Розглянемо одномірні масиви, які складаються з елементів символьного типу (char). Наприклад:

var

S: array [ 1. 12] of char;

Паскаль містить деякі додаткові засоби роботи з такими масивами:

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

S: = `Приклад рядка';

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

Якщо необхідно задати апостроф, то його подвоюють {` «'}.

Допускають формування рядків з використанням десяткових кодів символів і спеціальних позначень: (#7#17C^A^B…)

Для символьних масивів допускають операцію «+» — конкатенації (зчеплення, поєднання). Смисл операції полягає у формуванні нового символьного масиву, кількість елементів якого дорівнює сумі розмірів масивів — операндів, а значення елементів — елементи масивів, які розміщюються послідовно один за одним.

Приклад:

var S1: array [1. 8] of char;

S2: array [1. 5] of char;

begin

S1 := 'рядковий';

S2 := 'масив';

writeln (S1+' '+S2); {результат на екрані: Рядковий масив}

end.

!Особливість: !

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

2. операція конкатенації для символьних масивів не допускається у правій частині присвоювання. Наприклад:

S := S1+' '+S2; {помилка}

У таких випадках необхідно використовувати рядки, тобто рядкові типи даних.

Визначення рядкового типу даних

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

При використанні у виразах рядок обмежується апострофами. Кількість символів в рядку (довжина рядка) може динамічно змінюватись від 0 до 255.

Для визначення рядкових даних використовується ідентифікатор STRING, за яким у квадратних дужках вказується максимальна довжина рядка. Якщо значення не вказане, то по замовченню довжина рядка встановлюється 255 байт.

Приклад:

Line: string [80];

Line 1: string;

Line 2: string [255].

В приведеному прикладі змінна Line може мати будь-яку послідовність символів (кожен з яких має стандартний тип char) довільної довжини в межах від 0 до 80 символів; Line1 і Line2 — від 0 до 255 символів.

Таким чином, важливіша різниця між рядками і символьними масивами, що рядки можуть динамічно змінювати свою довжину.

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

Рядкові дані також можна використовувати у програмі як константу.

Формат:

1. type

< ім'я типа > = string [max довжина рядка];

var

< ідентифікатор >: < ім'я типа > ;

або

2. var

< ідентифікатор >: string [max довжина рядка];

Приклад:

const address = `пл. Соборна, 1';

type line = string [125];

var

S1: Line;

S2: string;

S3: string [50];

Механізм динамічних рядків реалізований в мові Турбо-Паскаль достатньо просто. Для рядкових змінних пам’ять виділяється відповідно максимального значення, а використовується лише частина, яка реально зайнята символами рядка у даний час, тобто для N символів виділяється N+1 байт пам’яті, із яких N байт призначено для зберігання символів рядка, а 1 байт — для значення поточної довжини цього рядка:

Елементи рядка нумеруються цілими числами, починаючи з 1. Це іноді використовують для визначення поточної довжини рядка, наприклад:

line:= ` '; {пустий рядок}

writeln (ORD (line [0])); {на екрані число 0}

line: =`ABCD';

writeln (ORD (line [0])); {на екрані число 4}

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

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

var line: string [4];

begin

line := `дуже довгий рядок'; {на екрані: дуже}

writeln (line);

end.

Таким чином рядки можуть динамічно змінювати свою довжину.

Основні операції над рядковими даними

Над рядковими даними виконують такі операції:

1. присвоювання (: =);

2. введення (Read);

3. виведення (Write);

4. поєднання (зчеплення, конкатенації - «+»);

5. порівняння (відношення).

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

Операція конкатенації

Використовується для зчеплення декількох рядків в один, причому довжина результуючого рядка не повинна перевищувати 255 символів (або вказану довжину N). Інакше останні символи будуть відкинуті.

Приклади:

st := `a'+'b';

st := st + `c';

writeln (`st = `, st){результат st =abc}

var st: string [2];

begin

st: ='1' + `2' + `3';

writeln (st){на екрані 12}

end.

Операція порівняння (відношення)

Проводить порівняння двох рядкових операндів за допомогою стандартних операторів: =, < >, >, <, > =, <=.

Правила порівняння:

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

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

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

Приклади:

1) ` «` < `. 'TRUE

2) `A' > `1' TRUE

3) `AB' = `A'FALSE

4) `ABC' > `AB'TRUE

5) `12' < '2'TRUE

Cтандартні засоби обробки рядків: процедури і функції

Функції:

1. CONCAT (S1,S2,…, SN) — функція типу STRING. Виконує послідовне поєднання рядків S1, S2,…, SN, кожен з яких є вираз рядкового типу (STRING). Результатом є рядок не більше 255 символів. Дана функція еквівалентна операції конкатенації: `S1' + `S2' + `S3'…

2. COPY (st: STRING; index: INTEGER; count: INTEGER): STRING або COPY (st, index, count).

Функція копіює (повертає) частину рядка, виділеного з рядка st, довжиною count символів, починаючи з символу під номером index.

3. LENGTH (st: STRING) функція типу INTEGER повертає довжину рядка.

4. POS (subst, st: STRING): BYTE. Функція шукає у рядку st рядок subst. Результатом є номер позиції, де рядок subst зустрічається перший раз. Якщо рядок subst не знайдено, то результатом буде 0 (нуль).

5. UPCASE (ch) — функція типу CHAR. Повертає для символьного виразу ch, яке повинно представляти собою рядкову (маленьку) латинську букву, відповідно їй велику букву. Якщо значенням функції ch є будь-який інший символ (в тому числі рядкова буква російського алфавіту), функція повертає його без змін.

Процедури:

1. DELETE (st: STRING; index, count: INTEGER) або DELETE (st, index, count) - процедура вилучає (знищує) count символів у рядку st починаючи з символу під номером index.

2. INSERT (subst: STRING; st: STRING; index: INTEGER) або INSERT (subst, st, index). — процедура вставляє рядок subst у рядок st, починаючи з символу під номером index.

3. STR (X [: width[:decimals]]; st: STRING) — процедура перетворює число Х (real або integer) в рядок символів st так, як це робить це робить процедура WRITELN перед виводом. Параметри width і decimals (якщо вони присутні, тобто дужки [ ] показують на необов’язковість цих параметрів) задають формат перетворення: загальну ширину поля для представлення числа Х (width) та кількість символів дрібної частини (decimals), якщо X: REAL.

4. VAL (st, x, code) — процедура перетворює рядок символів st в значення числової змінної X (визначеного типу). Параметр code = 0, якщо перетворення пройшло успішно, тоді X дорівнює результату перетворення. Якщо виявляється помилковий символ у рядку st, то значення Х не змінюється, а code дорівнює номеру позиції з помилковим символом.

!Особливість!: Недопустимими є пропуски (пробіли) праворуч числа у рядку st!

val (`123_ _', x, k){помилка, x — не змінюється, k=4 };

val (`_ _123', x, k){вірно, x=123, k=0 };

Приклади:

varx: real;

y: integer;

st, st1: string;

begin

st := concat (`12', `345'); {рядок st містить 12 345}

st1 := copy (st, 3, Length (st)-2); {st1 містить 345}

insert (`-', st1, 2); {рядок st1 містить 3−45}

delete (st, pos (`2', st), 3); {рядок st містить 15}

str (pi: 6: 2, st); {рядок st містить 3,14}

val (`3. 1415', x, y); {y містить 2, х без змін}

end.

Висновок

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

ПоказатьСвернуть
Заполнить форму текущей работой