Типи даних в 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…65535

2

Integer

-32768…32767

2

ShortInt

-128…127

1

LongInt

-2147483648…2147483647

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] … Так і організовується доступ до елементів двомірних масивів.

Приклад:

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

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

i : integer;

begin

i := 0;

repeat

i := i+1;

read ( M [ i ] )

until i = 10

end.

  1. Обчислити значення функції 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;

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

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

S: = ‘Приклад рядка’;

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

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

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

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

Приклад:

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

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

або

  1. var

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

Приклад:

const address = ‘пл. Соборна, 1’;

type line = string [125];

var

S1 : Line;

S2 : string;

S3 : string [50];

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

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

  1. line:= ‘ ’; {пустий рядок}

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

  1. 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). Інакше останні символи будуть відкинуті.

Приклади:

  1. st := ‘a’+’b’;

st := st + ‘c’;

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

  1. 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 містить 12345}

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.



Висновок

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

Додати в блог або на сайт

Цей текст може містити помилки.

Програмування, комп'ютери, інформатика і кібернетика | Реферат
65.3кб. | скачати


Схожі роботи:
Структуровані типи даних записи та множини Використання процедур та функції мови Turbo Pascal
Типи даних алгоритмічної мови TURBO Pascal Стандартні функції і оператори роботи з рядками
Обробка масивів даних у середовищі Turbo Pascal
Типи даних в Object Pascal
Основні відомості про алгоритмічну мову Turbo Pascal Графіка Pascal
Turbo Pascal
Оператори Turbo Pascal 7
Мова програмування Turbo Pascal
Процедури та функції в Turbo Pascal
© Усі права захищені
написати до нас