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

Содержание

Слайд 2

Гл. 7. СТРУКТУРИРОВАННЫЕ ТИПЫ ДАННЫХ

Гл. 7. СТРУКТУРИРОВАННЫЕ ТИПЫ ДАННЫХ

Слайд 3

Гл. 7. СТРУКТУРИРОВАННЫЕ ТИПЫ ДАННЫХ Массивы – любой порядковый тип кроме

Гл. 7. СТРУКТУРИРОВАННЫЕ ТИПЫ ДАННЫХ

Массивы

<тип индекса> – любой порядковый тип кроме

LongInt и типов-диапазонов с базовым типом LongInt.

Массив - упорядоченная совокупность однотипных данных.

Type Vector = array [1..3] of Real; {тип индекса – тип-диапазон} Var R,V : Vector; или Var R,V : array [1..3] of Real;

Слайд 4

Гл. 7. СТРУКТУРИРОВАННЫЕ ТИПЫ ДАННЫХ массива – любой допустимый в Turbo

Гл. 7. СТРУКТУРИРОВАННЫЕ ТИПЫ ДАННЫХ

<тип элемента> массива – любой допустимый в

Turbo Pascal тип кроме файла (в том числе и другой массив).
Многомерные массивы:

Type Matrix = array [0..5] of array [-2..2] of array [Сhar] of Real; или Type Matrix = array [0..5,-2..2,Сhar] of Real;

Доступ к элементам массива: Var m : Matrix; N : Byte; Begin ... m[1,0,'d'] := 5.2; N := 2; m[N-1][0]['n'] := 6.3; ... End.

Слайд 5

Гл. 7. СТРУКТУРИРОВАННЫЕ ТИПЫ ДАННЫХ Присваивание массивов: Var a,b : array

Гл. 7. СТРУКТУРИРОВАННЫЕ ТИПЫ ДАННЫХ

Присваивание массивов: Var a,b : array [1..5] of

Real; Begin ... a := b; ... End. При большом числе элементов массива наступают ограничения, связанные с максимальным объемом памяти, отводимой под глобальные переменные – сегмент данных объемом 64 К. Var Dim100x200 = array [1..100,1..200] of Real {100х200х6 байт = 120 000 байт} При компиляции в режиме, задаваемым ключом {$R+}, будет проверяться принадлежность значения индекса объявленному диапазону, и в случае нарушения границ будет будет выдано сообщение об ошибке (Range check Error).
Слайд 6

Гл. 7. СТРУКТУРИРОВАННЫЕ ТИПЫ ДАННЫХ Записи Запись – структура данных, состоящая

Гл. 7. СТРУКТУРИРОВАННЫЕ ТИПЫ ДАННЫХ

Записи

Запись – структура данных, состоящая из фиксированного

числа разнотипных компонент, называемых полями записи.

Type Data = record X,Y : Integer; Z : Char end; Var D1,D2 : Data; Begin ... D1.X := 10; ... D2.Z := 'n'; ... D2 := D1; {присваивание записей} End.

Слайд 7

Гл. 7. СТРУКТУРИРОВАННЫЕ ТИПЫ ДАННЫХ Полем записи может быть другая запись

Гл. 7. СТРУКТУРИРОВАННЫЕ ТИПЫ ДАННЫХ

Полем записи может быть другая запись (вложенные

структуры): Var D : record X : Integer; R : record RX : Integer; RZ : Char end end; Begin ... D.R.RX := 2; ... End.
Слайд 8

Гл. 7. СТРУКТУРИРОВАННЫЕ ТИПЫ ДАННЫХ Оператор присоединения: with D do begin

Гл. 7. СТРУКТУРИРОВАННЫЕ ТИПЫ ДАННЫХ

Оператор присоединения:

with D do begin R.RX :=

2; with R do RZ := 'f'; end;
Слайд 9

Гл. 7. СТРУКТУРИРОВАННЫЕ ТИПЫ ДАННЫХ Множества Множество – это структурированный тип

Гл. 7. СТРУКТУРИРОВАННЫЕ ТИПЫ ДАННЫХ

Множества

Множество – это структурированный тип данных, представляющий

собой неупорядоченную совокупность неповторяющихся элементов. Количество элементов, входящих во множество, в Pascalabc не оговаривается, множество может быть и пустым.

Type TypeSet1 = set of Char; TypeSet2 = set of 0..9; VideoType = (Hercules,CGA,EGA,VGA,SVGA); TypeSet3 = set of VideoType;

<базовый тип> – любой порядковый тип .

Слайд 10

Гл. 7. СТРУКТУРИРОВАННЫЕ ТИПЫ ДАННЫХ Значением переменной множественного типа является множество,

Гл. 7. СТРУКТУРИРОВАННЫЕ ТИПЫ ДАННЫХ

Значением переменной множественного типа является множество, которое

определяется с помощью конструктора множества, представляющего собой перечисление элементов базового типа через запятую в квадратных скобках

Var Set1, Set2 : set of Byte; Set3 : set of 'a'..'f'; X : Integer; Begin ... Set1 := [3..10,12]; Set3 := ['a','d']; X := 5; Set1 := [X+2,4,9]; Set3 := []; Set2 := [9,7,9,4]; ... End.

Слайд 11

Гл. 7. СТРУКТУРИРОВАННЫЕ ТИПЫ ДАННЫХ Операции над множествами: Set1 = [0..3,6]

Гл. 7. СТРУКТУРИРОВАННЫЕ ТИПЫ ДАННЫХ

Операции над множествами: Set1 = [0..3,6] Set2 = [3..9] *

– пересечение множеств, результат содержит элементы общие для обоих множеств (Set1 * Set2 = [3,6]); + – объединение множеств, результат содержит элементы первого множества, дополненные недостающими элементами второго (Set1 + Set2 = [0..9]); - – разность множеств, результат содержит элементы первого множества, которые не принадлежат второму (Set1 - Set2 = [0,1,2]); = – проверка эквивалентности, возвращает True, если оба множества эквивалентны; <> – проверка неэквивалентности, возвращает True, если множества неэквивалентны; <= – проверка вхождения, возвращает True, если первое множество включено во второе; >= – проверка вхождения, возвращает True, если второе множество включено в первое; in – проверка принадлежности (E in S), возвращает True, если значение Е входит в множество S и принадлежит базовому типу этого множества (3 in Set1 = True, 2*2 in Set1 = False).
Слайд 12

Гл. 7. СТРУКТУРИРОВАННЫЕ ТИПЫ ДАННЫХ Процедуры, параметром которых является множество: INCLUDE

Гл. 7. СТРУКТУРИРОВАННЫЕ ТИПЫ ДАННЫХ

Процедуры, параметром которых является множество: INCLUDE (S,I) –

включает новый элемент I в множество S (включаемый элемент должен принадлежать базовому типу множества S). EXCLUDE (S,I) – исключает элемент I из множества S. Var Set1 : set of 1..10; I : Byte; Begin ... Set1 := [2,3,4]; Include(Set1,2*3); for I := 1 to 10 do if I in Set1 then Writeln(I); Writeln(SizeOf(Set1)); Set1 := Set1 + [12]; ... End.
Слайд 13

Гл. 7. СТРУКТУРИРОВАННЫЕ ТИПЫ ДАННЫХ Строки Тип String используются для обработки

Гл. 7. СТРУКТУРИРОВАННЫЕ ТИПЫ ДАННЫХ

Строки

Тип String используются для обработки текстов и

трактуется как цепочка символов. Строка – динамический (переменной длины) массив, состоящий из символов. Максимально возможная длина строки Pascalabc.net не оговаривается . Тип объявляется как string или String[N], где N - максимальное число символов в строке.

Var
s:=string; S32 : String[32]; S255 : String[255]; {String} Begin
s:= ‘dfhtgerj’; S32 := 'Это строка'; S32[3] := 'a'; S32 := S32 + '!!!'; End.

Слайд 14

Гл. 7. СТРУКТУРИРОВАННЫЕ ТИПЫ ДАННЫХ Процедуры и функции для работы со

Гл. 7. СТРУКТУРИРОВАННЫЕ ТИПЫ ДАННЫХ

Процедуры и функции для работы со строками: LENGTH

(S : String) : Byte – возвращает длину строки (функция); CONCAT (S1, S2,…,Sn) : String – возвращает конкатенацию (слияние) строк S1,…,Sn (функция); COPY (S : String; Start, Len : Integer) : String – возвращает подстроку длиной Len, начинающуюся с позиции Start строки S (функция); DELETE (Var S : String; Start, Len : Integer) – удаляет из S подстроку длиной Len, начинающуюся с позиции Start строки S (процедура); INSERT (Var S, SubS : String; Start : Integer) – вставляет в S подстроку SubS, начиная с позиции Start (процедура); POS (SubS, S : String) : Byte – ищет вхождение подстроки SubS в строке S и возвращает номер первого символа SubS в S или 0, если SubS нет в S (функция);
Слайд 15

Гл. 7. СТРУКТУРИРОВАННЫЕ ТИПЫ ДАННЫХ Процедуры преобразования: STR (X; Var S

Гл. 7. СТРУКТУРИРОВАННЫЕ ТИПЫ ДАННЫХ

Процедуры преобразования: STR (X; Var S : String)

– преобразует числовое значение Х в строковое S, возможно задание формата для Х (Str(X:F:n,S), где F – общая ширина поля, n – количество символов в дробной части для вещественных чисел); VAL (S : String; Var X; Var Code : Integer) – преобразует строковое значение S (строку цифр) в значение числовой переменной (Х – целое или вещественное, параметр Code содержит ноль, если преобразование прошло успешно, в противном случае он содержит номер позиции в строке, где обнаружен ошибочный символ, при этом Х не меняется). Операции отношения (=, <>, >, <, >=, <=): Результат - логическая константа (True, False). Сравнение строк выполняется последовательно слева направо с учетом внутренней кодировки символов до первого несовпадающего символа. 'aBcd' = 'ab' (результат False); 'aBcd' > 'ab' (результат False); 'aBcd' < 'ab' (результат True).
Слайд 16

Гл. 7. СТРУКТУРИРОВАННЫЕ ТИПЫ ДАННЫХ Тurbo Рascal требует соблюдения правил совместимости

Гл. 7. СТРУКТУРИРОВАННЫЕ ТИПЫ ДАННЫХ

Тurbo Рascal требует соблюдения правил совместимости типов

в ряде случаев: при использовании оператора присваивания, при выполнении операций отношения, при подстановке переменных или значений в вызовы процедур и функций и т.д.
Два типа совместимы, если они тождественны (идентичны). Типы считаются тождественными, если:
1. Они описаны вместе, либо одним и тем же идентификатором типа:
Type T1 = Boolean; T2 = Boolean; T3,T4 = array[1..2] of Real;
2. Типы описаны как эквивалентные
Type T1 = array [1..2] of Real; T2 = T1; T3 = T2;
Слайд 17

Гл. 7. СТРУКТУРИРОВАННЫЕ ТИПЫ ДАННЫХ Типы совместимы (гарантирует работу операций отношения,

Гл. 7. СТРУКТУРИРОВАННЫЕ ТИПЫ ДАННЫХ

Типы совместимы (гарантирует работу операций отношения, подстановку

значений или переменных в параметры функций и процедур), если:

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

Слайд 18

Гл. 7. СТРУКТУРИРОВАННЫЕ ТИПЫ ДАННЫХ Совместимость по присваиванию. Переменной X (тип

Гл. 7. СТРУКТУРИРОВАННЫЕ ТИПЫ ДАННЫХ

Совместимость по присваиванию.
Переменной X (тип Type1)

может быть присвоено значение Y (тип Type2) (X := Y) если:

Type1 и Type2 – тождественные типы, и не один не является файловым типом (или структурным типом, содержащим компонент с файловым типом);
Type1 и Type2 – совместимые типы (в смысле, рассмотренном ранее), относящиеся к порядковым, и значения типа Type2 попадают в диапазон возможных значений Type1;
Type1 и Type2 – вещественные типы и значения типа Type2 попадают в диапазон возможных значений Type1;
Type1 – вещественный тип, Type2 – целочисленный тип;
Type1 и Type2 – строковые типы;
Type1 – строковый тип, Type2 – символьный тип;
Type1 и Type2 совместимые множества и все члены значения множества типа Type2 попадают в диапазон возможных значений Type1;
Type1 и Type2 совместимые адресные типы;
(Тип объекта Type2 совместим по присваиванию с типом объекта Type1, если Type2 находится в области типа объекта Type1. Тип ссылки Ptr2, указывающий на тип объекта Type2, совместим по присваиванию с типом ссылки Ptr1, указывающим на тип объекта Type1, если Type2 находится в области типа объекта Type1).

Слайд 19

Гл. 7. СТРУКТУРИРОВАННЫЕ ТИПЫ ДАННЫХ Явное преобразование типов. Может быть реализовано

Гл. 7. СТРУКТУРИРОВАННЫЕ ТИПЫ ДАННЫХ

Явное преобразование типов.
Может быть реализовано посредством

использования специальных функций:
TRUNC(x) – преобразует значение вещественного типа в значение целого типа, отбрасывая дробную часть; ROUND(x) – преобразует значение вещественного типа в значение целого типа, округляя его до ближайшего целого; ORD(x) – преобразует значение порядкового типа в его номер; CHR(x) – преобразует код символа в сам символ.
В операции приведения типа используется функция преобразования, которая совпадает с именем типа, к которому должна быть приведена переменная. При приведении типов переменных необходима их совместимость в машинном представлении.

Type M2Word = array[1..2] of Word; M4Byte = array[1..4] of Byte; Var V1 : M2Word; V2 : M4Byte; V3 : LongInt; V4 : Integer; Begin V3 := 100; V1 := M2Word(V3); V2 := M4Byte(V3); V4 := Integer(V1[1]); End.