
- •Тезисы лекций
- •Тип данных
- •Лекция 2. Списки, стеки, очереди.
- •Поиск в массивах. Поиск в строке. Поиск в массивах
- •Сортировка с помощью прямого включения.
- •Сортировка с помощью двоичного включения.
- •Сортировка двумерных массивов
- •Лекция 8. Основные понятия рекурсии. Простейшие примеры реализации.
- •Когда не надо применять рекурсию.
- •Лекция 9. Рекурсия и кривые. Рекурсивная реализация
- •Лекция 10. Алгоритмы с возвратом.
- •Тема 3.3. Алгоритмы с возвратом.
- •Лекция 11. Данные с динамической структурой. Рекурсивная структура данных.
- •Лекция 11a. Классы
- •Лекция 12. Графы
- •Лекция 13. Частично упорядоченные множества. Топологическая сортировка.
- •Лекция 14. Определение дерева. Поддеревья, элементы дерева. Основные понятия и определения
- •Лекция 15. Поиск и включение для бинарных деревьев.
- •Рекомендуемая литература
Тезисы лекций
курса
«Структуры и алгоритмы компьютерной обработки данных»
Лекция 1. Концепция типа данных. Простейшие типы данных.
1. Концепция типа данных
Любая константа, переменная, выражение, функция относятся к некоторому типу данных. Понятие “тип данных” основано на понятии множества.
Множество, операции над множествами
Множество - это совокупность некоторых объектов. После этого возникает вопрос, что такое совокупность. Совокупность - это набор некоторых объектов. Далее, что такое набор и так далее… То есть множество это некоторая категория, и нельзя дать строгое определение для множества, а надо понимать, что это такое.
Рис. 1. Операции над множествами.
Число элементов множества называется мощностью множества.
Тип данных
Тип данных определяет некоторое множество значений. Переменная (константа,…) принимает значения из этого множества. Обычно над элементами этого множества определены операции (например, “+”, “-“), в результате которых также получается элемент из этого множества.
В компьютерах различных типов реализация представления данных одного типа может быть разной. Например, представление целых чисел в обычных персональных компьютерах отличается от представления в больших машинах IBM.
Существуют простейшие, стандартные типы данных (с.21). Новые типы данных обычно определяются через старые типы. “Значения такого нового типа обычно представляет собой совокупности значений компонент, относящихся к определенным ранее составляющим типам, такие значения называются составными”. Если составляющий тип только один, т.е. все компоненты относятся к одному типу, то он называется базовым. Число различных значений, входящих в тип Т называется мощностью Т.
Если для значений некоторого типа существует отношение порядка, то такой тип называется упорядоченным или скалярным.
Важнейшие основные операции – сравнение(проверка отношения равенства) и присваивание(действие по установке равенства).
Простейшие типы данных
Любой новый простейший тип определяется простым перечислением, входящим в него значений. Такой тип называется перечисляемым.
Type shape =(rectangle, square, ellipse, circle);
color =(red, yellow, green);
Простейшие стандартные типы данных:
boolean, integer, real, char, cardinal
bo: boolean;
// Простейшие стандартные типы данных
i : integer; // –2147483648..2147483647
w : word; // 0..65535
c : cardinal; // 0..4294967295 = Longword
//Type Range Significant digits Size in bytes
//Real 5.0 x 10^–324 .. 1.7 x 10^308 15–16 8
r : real; // = Double
ch: char;
ac: AnsiChar; // 1 байт (8 бит на символ) (8-bit (ANSI) characters)
wc: WideChar; // слово (16 бит на символ), (Unicode characters –2 байта)
DBCS—широко распространенная в азиатских языках кодировка. Unicode – набор символов, представленных по 2 байта.
Ограничительные типы данных (диапазоны):
Часто переменной присваивается значение некоторого типа, лежащее только внутри определенного интервала значений.
Const CN = 23; min=2; max=7;
Type T = min..max;
Year = 1990..2003;
letter = 'A'..'Z';
digit = '0'..'9';
index = 1..2*CN;
Массив
Массив состоит из компонентов одного типа, называемого базовым. Массивы относятся к структурам с случайным доступам. Для выбора нужного элемента к имени массива добавляется индекс. Индекс – значение специального типа.
Type Ti = Year;
T0 = letter;
Type T = array [Ti] of T0;
TR7 = array [1..79] of real;
alpfa = array [0..15] of char;
Var vr: tr7; am: alpfa; bl: T;
Мощность типа массив = произведению мощностей его компонент.
card(T) = card(T0) ^ card(Ti)
Переменная типа массив, компоненты которой являются массивами, называется матрицей.
Var
ma1 : array[1..15] of array[1..7] of real;
ma2 : array[1..15, 1..7] of real;
begin
ma1[1,1]:= 2.5;
ma2[1][2]:= 3.14;
…
end;
Строки. Различные типы строк.
Строка – массив символов
Тип |
Максимальная длина |
Требуемая память |
Применение |
ShortString (=String[const]) |
255 |
От 2 до 256 байтов |
|
AnsiString (=String) |
~2^31 |
4 bytes to 2GB |
8-bit (ANSI) characters |
WideString |
~2^30 |
4 bytes to 2GB |
Некодируемые символы WideChar |
Pchar |
|
4 байта для указателя + строка |
Указатель на строку |
ShortString 255 characters 2 to 256 bytes backward compatibility
AnsiString ~2^31 characters 4 bytes to 2GB 8-bit (ANSI) characters
WideString ~2^30 characters 4 bytes to 2GB Unicode characters;
multiuser servers and multi-language applications
Запись
Кампоненты записи называются полями.
К полям записи обращаются так:
имя-переменной-типа-запись.имя-поля
Если vr: T - переменная типа записи, то
vr.s1
card(T) = card(T1)*card(T2) * … * card(Tn)
Type T = record
s1: T1;
s2: T2;
…
sn: Tn;
end;
Var r: record
i: integer;
c: char;
s: string[4];
//sl: string;
w: word;
end;
Множества
Упорядоченные множества (type t= set of t0).
Указатели
Можно объявить указатель на любой тип, используя синтаксис:
type pointerTypeName = ^type
Pointer – наиболее общий тип указателей, который может указывать на данные любого типа.
Для многих целей используются стандартные типы указателей. В модулях (units) System и SysUtils объявлено несколько стандартных типов указателей:
Тип указателя |
Указывает на тип |
PansiString, PString |
AnsiString |
PshortString |
ShortString |
Pdouble, PExtended, Psingle |
Double, Extended, Single |
Pinteger |
Integer |
PwideString |
WideString (=String) |
Pointer |
Данные любого типа |
PChar |
Строка символолов, заканчивающаяся 0 |
Пример программы, выдающей дамп переменных нескольких типов в директории block1.