Типи даних у Turbo Pascal
Порядкові типи характеризуються кінцевим числом можливих значень. Ці значення можна упорядковувати (звідки і назва) будь-яким чином, так, що кожному з них можна зіставити деяке ціле число — порядковий номер значення. Для визначення рядкових даних використовується ідентифікатор STRING, за яким у квадратних дужках вказується максимальна довжина рядка. Якщо значення не вказане, то по замовченню… Читати ще >
Типи даних у 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 | ||
Word | 0…65 535 | ||
Integer | — 32 768…32 767 | ||
ShortInt | — 128…127 | ||
LongInt | — 2 147 483 648…2 147 483 647 | ||
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.
Тип — діапазон
Визначається як інтервал значень базового типу (раніш визначеного), яким може бути будь-який порядковий тип:
<ім'я> = значення>.<max значення>;
Приклад:
type
day = 1.31;
month = 1.12;
letter = `A'.'Z';
При визначенні типа-діпазона, слід користуватись правилами:
а) — це один символ (без пробілу);
б) ліва границя не повинна перевищувати праву;
в) ім'я повинно бути правильним ідентифікатором (починатись з букви, не співпадати зі службовими словами, тільки латинські букви, цифри та підкреслення).
Реальний тип
Позначає множину дійсних значень в різних діапазонах. ТР підтримує декілька реальних типів, характеристики яких представленні в таблиці:
Тип | Діапазон значень | Число цифр | Довжина байт | |
Single | 1.5Е-45…3,4Е38 | 7…8 | ||
Real | 2,9Е-39…1,7Е38 | 11…12 | ||
Double | 5Е-324…1,7Е308 | 15…16 | ||
Extended | 3,4Е-4932…1,1Е4932 | 19…20 | ||
Comp | 1Е-20…1Е20 | 19…20 | ||
Реальні типи можна зобразити з фіксованою і плаваючою комами: (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.
В приведеному прикладі змінна 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}
line: =`ABCD';
writeln (ORD (line)); {на екрані число 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.
Висновок
Таким чином над рядками можна виконувати операції присвоювання, порівняння, з'єднання (конкатенації), введення та виведення. Для цього використовують широкий набір процедур та функцій.