Статичні структуры даних.
2 Статические данные переменная (массив) имеет имя, по которому к ней можно обращаться размер заранее известен (задается при написании программы) память выделяется при объявлении размер нельзя увеличить во время работы программы var x, y: integer; z: real; A: array[1..10] of real; str: string; var x, y: integer; z: real; A: array[1..10] of real; str: string;
3 Массивы Массив – это группа однотипных элементов, имеющих общее имя и расположенных в памяти рядом. Особенности: все элементы имеют один тип весь массив имеет одно имя все элементы расположены в памяти рядом Примеры: список учеников в классе квартиры в доме школы в городе данные о температуре воздуха за год
4 Массивы A массив 3 15 НОМЕР элемента массива (ИНДЕКС) НОМЕР элемента массива (ИНДЕКС) A[1] A[2] A[3] A[4] A[5] ЗНАЧЕНИЕ элемента массива A[2] НОМЕР (ИНДЕКС) элемента массива: 2 ЗНАЧЕНИЕ элемента массива: 10 A[5]:=3; 3
5 Матрицы Задача: запомнить положение фигур на шахматной доске abcdefgh c6 A[6,3]
6 Матрицы Матрица – это прямоугольная таблица чисел (или других элементов одного типа). Матрица – это массив, в котором каждый элемент имеет два индекса (номер строки и номер столбца) A строка 2 столбец 3 ячейка A[3,4]
7 Чем плох массив символов? var B: array[1..N] of char; Это массив символов: каждый символ – отдельный объект; массив имеет длину N, которая задана при объявлении Что нужно: обрабатывать последовательность символов как единое целое строка должна иметь переменную длину
8 Символьные строки Привет!¤¤¤…¤¤¤ длина строки рабочая часть s[1] s[2] s[3] s[4] var s: string; var s: string[20]; 20 1 Длина строки: n := length ( s ); var n: integer; В Delphi это ограничение снято! !
9 Множества Множество это структурырованный тип данных, представляющий собой набор взаимосвязанных по какому- либо признаку объектов, которые можно рассматривать как единое целое. Каждый объект в множестве называется элементом множества. Все элементы множества должны принадлежать одному из порядковых типов, содержащему не более 256 значений. Этот тип называется базовым типом множества. Базовый тип задается диапазоном или перечислением. Множество может принимать все значения базового типа. Множество в памяти хранится как массив битов, в котором каждый бит указывает является ли элемент принадлежащим объявленному множеству или нет.
Операции над множествами Объединением двух множеств A и B называется множество, состоящее из элементов, входящих хотя бы в одно из множеств A или B. Знак операции объединения в Паскале «+». [1, 2, 3, 4] + [3, 4, 5, 6] => []+[a..z] + [A..E, k] => [5 [false, true] [A..E, a..z] [1, 2, 3, 4, 5, 6] Пересечением двух множеств A и B называется множество, состоящее из элементов, одновременно входящих во множество A и во множество B. Знак операции пересечения в Паскале «*» [1, 2, 3, 4] * [3, 4, 5, 6] => []+[a..z] * [A..E, k] => [5 [3, 4] [k] []
Операции над множествами Разностью двух множеств A и B называется множество, состоящее из элементов множества A, не входящих во множество B. [1, 2, 3, 4] - [3, 4, 5, 6] => [3, 4, 5, 6] - [1, 2, 3, 4] => [a..z] - [A..E, k] => [A..E, k] - [a..z] => [5 [true] - [5 [1, 2] [a.. j, i.. z] [false] [5, 6] [A.. E] [true]
Операция вхождения в множество Операция вхождения записывается так: x in M Результат логическая величина true, если значение x входит в множество M, и false в противном случае. 4 in [3, 4, 7, 9] –– true 5 in [3, 4, 7, 9] –– false Некоторые логические выражения можно записать более лаконично: 1) Натуральное число n является двухзначным. Вместо выражения (n >= 10) and (n <=99) можно записать n in [10..99] 2) Символ c является русской буквой. Вместо выражения (c >= А) and (c =а) and (c =р) and (c<=я) пишем: c in [А.. Я, а.. п, р.. я]
13 Структуры (в Паскале – записи) Структура (запись) – это тип данных, который может включать в себя несколько полей – элементов разных типов (в том числе и другие структуры). Свойства: автор (строка) название (строка) год издания (целое число) количество страниц (целое число) Задача: объединить эти данные в единое целое Размещение в памяти автор название год издания количество страниц 40 символов 80 символов целое
14 Одна запись readln(Book.author); // ввод readln(Book.title); Book.year := 1998; // присваивание if Book.pages > 200 then // сравнение writeln(Book.author, '.', Book.title); // вывод readln(Book.author); // ввод readln(Book.title); Book.year := 1998; // присваивание if Book.pages > 200 then // сравнение writeln(Book.author, '.', Book.title); // вывод Объявление (выделение памяти): var Book: record author: string[40]; // автор, строка title: string[80]; // название, строка year: integer;// год издания, целое pages: integer; // кол-во страниц, целое end; var Book: record author: string[40]; // автор, строка title: string[80]; // название, строка year: integer;// год издания, целое pages: integer; // кол-во страниц, целое end; название запись поля Обращение к полям: Для обращения к полю записи используется точка! ! !
15 Массив записей Объявление (выделение памяти): const N = 10; var aBooks: array[1..N] of record author: string[40]; title: string[80]; year: integer; pages: integer; end; const N = 10; var aBooks: array[1..N] of record author: string[40]; title: string[80]; year: integer; pages: integer; end; Books[1]... Books[10] authortitleyearpages