Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
1337.docx
Скачиваний:
6
Добавлен:
01.04.2025
Размер:
211 Кб
Скачать
☆

18.Стандартные типы данных

Данные – объекты, обрабатываемы в программе (Константы и переменные). Для каждого данного должен быть тип. Тип данных – определяет возможные значения данного и и допустимые операции, которые можно применять к этим значениям.

Типы данных:

- Встроенные;

- Пользовательские.

Встроенные типы данных: - Простые:

- Вещественные;

- Порядковые:

- Целый; - Логический;

- Символьный;

- Ограниченный;

- Перечисляемый;

- Процедурный тип;

- Указатели;

- Variant; - Структуры:

- Массивы - Строки

- Записи

- Множества

- Файлы - Классы.

19.Порядковые типы данных

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

- Порядковые:

- Целый; - Логический;

- Символьный;

- Ограниченный;

- Перечисляемый;

Функции: Ord (порядковый номер) Prev (Предыдущий) Succ (Последующий) High (максимальное значение) – для переменных и идентификаторов Low (минимальное значение) – для переменных и идентификаторов.

20.Данные логического типа(булевского)

Принимают только 2 значения – TRUEи FALSE. Константы - TRUEи FALSE.

Переменные –в описании переменных указано одно из стандартных имен BOOLEAN, ByteBool (в один байт), WordBool (слово), LongBool (два слова). Логические операции: Not (отрицание), And (конъюнкция), Or (дизъюнкция), Xor (исключающее или). !FALSE<TRUE!

21.Данные целого типа

Принимают целые значения разных диапазонов, в зависимости от стандартных имен, соответствующих целому типу.

Данныецелоготипа: - Byte - Word - ShortInt - SmallInt - Cardinal - Integer - LongInt - Int64 Константыцелоготипа – Целые десятичные числа со знаком или без него. Могут быть представлены в шестнадцатеричном виде ($F1, $0049). Переменные целого типа – для которых в разделе описания переменных указано одно из стандартных имен для определения целого типа, например: VARX, Y, Z: Integer;

Операции для целого типа – арифметические операции, операции отношения, побитовые логические операции. К данным целого типа относятся функции: - ABS, SQR, SUCC, PRED, INC, DEC (результаты целого типа); - SIN, COS, ARCTAN, LN, EXP, SQRT (результаты вещественного типа); - ODD (результаты булевского типа);

- CHR(результаты символьного типа).

22.Данные символьного типа

Данные символьного типа предназначены для хранения одного символа из некоторого конечного упорядоченного множества символов. В это множество обычно входят: латинские буквы, буквы национального алфавита (например, кириллица), десятичные цифры, скобки, знаки препинания, символ подчеркивания ( '_' ), символы арифметических операций и др. Описывается типом CHAR. Константы символьного типа – одиночные символы, заключённые в апострофы. Для изображения самого апострофа, внутри символьной константы используется двойной апостроф, который в этом случае считается одним символом, например '''' (т.е. четыре апострофа подряд).

Для переменных символьного типа определенны только операции отношения. При выполнении операции отношения сравниваются номера символов в стандартном множестве символов. Результат – булевский.

23.Данные перечисляемого типа Перечисляемый тип данных определяется в программе с помощью упорядоченного перечисления нескольких имён. Список имён заключается в круглые скобки, имена в списке разделяются запятыми. Каждое из перечисляемых имён становится константой нового перечисляемого типа данных, а все перечисляемые константы становятся множеством возможных значений этого перечисляемого типа. Переменные перечисляемого типа – это переменные, для которых в разделе описания переменных указан перечисляемый тип, в следующей форме: «VAR <имя переменной> : (<значение 1>, ..., < значение n>);».

24.Данные ограниченного типа Данные ограниченного типа – это данные, которые могут принимать значения только из диапазона какого–либо базового типа данных. Диапазон значений ограниченного типа задается выражением вида: <const1>..<const2> , где сonst1 и const2 – константы одного и тоже базового типа, которые задают минимальное и максимальное значение в диапазоне, причём const1 <= const2. Базовым типом может быть: булевский, целый, символьный или перечисляемый. Данные ограниченного типа делают программу более наглядной и облегчают её отладку. Константы ограниченного типа – константы, расположенные в указанном отрезке базового типа. Переменные ограниченного типа – переменные, для которых в разделе описание переменных указан ограниченный тип. Операции для ограниченного типа – это те же операции, которые определены для данных базового типа. К данным ограниченного типа можно применять все стандартные функции, которые предусмотрены для данных базового типа.

25.Данные вещественного типа могут принемать действительные значения(с дробной частью)из различн.диапазонов,которые обуславливаются конкретным вещественным типом.

Тип

Диапазон значений

Число значащих разрядов

Требования к памяти в байтах

Real48

–2.9·1039 .. 1.7·1038

11–12

6

Real

–5.0·10324 .. 1.7·10308

15–16

8

Single

–1.5·1045 .. 3.4·1038

7–8

4

Double

–5.0·10324 .. 1.7·10308

15–16

8

Extended

–3.6·10–4951 .. 1.1·104392

10–20

10

Comp

–263 +1 .. 263–1

10–20

8

Currency

–922337203685477.5808 ..

922337203685477.5807

10–20

8

Родовым (обеспечивающим максимальную производительность) является тип Real, который в настоящий момент эквивалентен типу Double, но в последующих версиях Delpi это может быть изменено.

Константы вещественного типа – это вещественные числа со знаком или без знака. записываются в двух формах: в виде вещественных дробных чисел без десятичного порядка; в виде вещественных чисел с десятичным порядком. Вещественные дробные константы без десятичного порядка представляются следующей синтаксической диаграммой. Переменные вещественного типа – это переменные, для которых в разделе описания переменных указывается один из вещественных типов, например: «VAR A, B: REAL;». 1. При выполнении операций +, –, *, / один операнд может быть вещественным, а другой целым. Результат получается вещественный.

2. При выполнении арифметических операций с вещественными операндами исходные операнды и результат не должны выходить за диапазон возможных значений данных вещественного типа.

Операции отношения: =, <, >, <=, >=, <> для данных вещественного типа имеют обычный математический смысл. Один операнд при этом может быть целым. Результат всегда булевский.

К данным вещественного типа можно применять следующие стандартные функции: ABS, SQR, SIN, COS, ARCTAN, LN, EXP, SQRT (результат вещественного типа) и т.п.; TRUNC, ROUND (результат целого числа).

Имена переменных и констант вещественного типа рекомендуется начинать с символа «f», например «fMyFunction». 26-27. Составные типы данных

Данные регулярного типа (массивы) Массивом называется структура данных, позволяющая хранить под одним именем совокупность(последовательность) данных (переменных) любого, но только одного какого–то типа. Массив характеризуется размерностью, своим именем, базовым типом хранимых элементов, размером и способом нумерации элементов.

Имя массива – общее имя переменных, входящих в массив.

Базовый тип массива – тип переменных, входящих в массив.

Элементы массива – переменные, входящие в массив. Размерность массива – количество индексов, которое необходимо для однозначной идентификации любого элемента массива.

Размер массива – общее количество элементов в массиве.

На практике довольно часто используют одномерные и двухмерные массивы. Одномерный массив иногда называют вектором, двумерный – матрицей. Одномерный массив удобно представлять в виде группы последовательных ячеек памяти, а матрицу – в виде квадратной таблицы. Статические массивы определяются в разделе описания переменных Тип элемента может быть любым допустимым типом языка Паскаль (в том числе и регулярным типом (массивом) тоже), а тип индекса может быть одним из типов: логический, символьный, перечисляемый или ограниченный. Const

N=10;

M=20;

Var

A: Array [1..N, 1..M] of Real; // матрица NxM из 200 элементов

B: Array [1..N] of Integer: // вектор из 10 целых элементов

C: Array [ 'A'.. 'F', // тип первого индекса массива

–5..5, // тип первого индекса массива

(December, January, February), // тип третьего индекса

BOOLEAN ] // тип четвертого индекса массива

of –50..50; // тип элементов массива

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

A[2,3]:=3.14;

A[i,j]:=i*i+j–2;

A[i,2]:=A[i–1,j+2];

B[j]:=3; B[j+i]:=i+j;

C['B',–3,December, j>15] := –25;

C['F',0,January, TRUE] := j*i;

28.Динамические массивы в Delphi отличаются от статических массивов тем, что в них заранее не объявляется размер массива. Объявление динамического 79

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

Var A: Array of integer;

Такая строка объявляет переменную A как одномерный динамический массив целых чисел.

Двумерный динамический массив определяется как динамический массив динамических массивов. Например:

Var B: Array of array of integer;

Аналогично объявляется любой многомерный динамический массив, т.е. как массив массивов массивов и т.д.

При объявлении динамического массива место под него не отводится. Прежде, чем использовать массив, надо задать его размер процедурой SetLength. В качестве аргументов в нее передаются имя массива и значения, характеризующие число элементов для каждой размерности массива. Например,

SetLength(A,10);

SetLength(B,5,8);

выделяет для вектора A место в памяти под 10 элементов и задает нулевые значения всех элементов, для матрицы B – 40 элементов.

Можно создавать и непрямоугольные массивы, в которых, например, второй размер не постоянен и варьируется в зависимости от номера строки. В этом случае сначала процедурой SetLength задается первый размер. Например, оператор «SetLength(B,3);» задает первый размер – 3. В памяти отводится место под 3 динамических массива B[0], B[1] и B[2]. Размеры каждого из этих массивов еще не определены. Далее можно, например, задать размер первого из них равным 4: «SetLength(B[0],4);», а размер следующего, например, равным 5: «SetLength(B[1],5);».

Индексы динамического массива – всегда целые числа, начинающиеся с 0. Таким образом, в приведенном примере массив А содержит элементы от A[0] до A[9], а массив B – от B[0,0] до B[4,7].

Повторное применение SetLength к уже существующему в памяти массиву изменяет его размер. Если новое значение размера больше предыдущего, то все 80

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

Усечение динамического массива лучше проводить функцией Copy, присваивая ее результат самому массиву. Например, оператор «A := Copy(A, 0, 3);» усекает динамический массив A, оставляя неизменными первые три его элемента.

Если динамический массив уже размещен в памяти, к переменной этого массива можно применять стандартные для массивов функции Length(имя массива) – размер массива и High – наибольшее значение индекса. Если массив имеет нулевую длину, то High возвращает «–1».

Сама переменная динамического массива является указателем на начало массива. Если место под массив еще не выделено, значение переменной равно NIL.

Удалить из памяти динамический массив можно одним из следующих способов: присвоить ему значение NIL, использовать функцию Finalize или установить нулевую длину. Таким образом, эквивалентны следующие операторы:

A := nil;

Finalize(A);

SetLength(A,0);

Для динамических массивов определена операция операция сравнения. В ней сравниваются только сами указатели, а не значения элементов массивов. Таким образом, выражение A = B вернет true только в случае, если и A и B указывают на один и тот же массив. А вот выражение A[0] = B[0] сравнивает значения первых элементов двух массивов.

Для массивов одного типа можно использовать операцию присваивания. Например, если массивы объявлены как «Var A, B:array[1..3] of integer;», то в результате выполнения оператора «A := B;» значения элементов массива B присвоятся соответствующим элементам массива A. Прежние значения элементов A будут затерты. Таким образом, произойдет копирование B в A. 81

Сами массивы при этом останутся самостоятельными и в дальнейшем их элементы могут изменяться независимо друг от друга.

Для динамических массивов присваивание возможно, если массивы A и B определены как переменные одного типа и размер массива A не меньше размера массива B или A = nil. А содержимое массива A при этом теряется.

Для массивов можно использовать функции Length, High и Low, позволяющие соответственно найти число элементов массива, а также максимальное и минимальное значения индекса. Для числовых массивов определены также функции MaxIntValue, MinIntValue, MaxValue, MinValue, SumInt, Sum, позволяющие найти минимальное и максимальное значения целых (Integer) и вещественных (Double) элементов массива и сумму элементов. Например,

С := MinValue(B);

F := MaxIntValue(E);

Первый оператор присваивает действительной переменной C минимальное из значений элементов, хранящихся в массиве действительных чисел B, а второй – присваивает целой переменной F максимальное из значений элементов, хранящихся в массиве целых чисел E.