Скачать презентацию Программирование на ЭВМ Лекция 6 Специальные типы данных Скачать презентацию Программирование на ЭВМ Лекция 6 Специальные типы данных

06 Программирование на ЭВМ - спецтипы данных.pptx

  • Количество слайдов: 18

Программирование на ЭВМ Лекция 6. Специальные типы данных и операции над ними Доцент, к. Программирование на ЭВМ Лекция 6. Специальные типы данных и операции над ними Доцент, к. т. н. Исаев А. В. avisz@yandex. ru Ауд. 7 или 234

Записи • Запись — структура данных, состоящая из фиксированного числа компонентов, называемых полями записи. Записи • Запись — структура данных, состоящая из фиксированного числа компонентов, называемых полями записи. • В отличие от массива, поля записи могут быть разного типа. • Для того чтобы ссылаться на тот или иной компонент записи, эти компоненты именуются. • Структура объявления типа записи: type <имя_типа>=record <список_полей> end; var <имя_переменной>: <имя_типа>; • Здесь <имя_типа> — правильный идентификатор; record, end — ключевые слова (запись, конец); <список_полей> — список полей, который представляет собой последовательность разделов записи, между которыми ставится точка с запятой. • Каждый раздел записи состоит из одного или нескольких идентификаторов полей, отделенных друг от друга запятыми. За идентификатором (идентификаторами) ставится двоеточие и описание типа поля (полей).

Пример type TPerson=record // запись, состоящая из трех полей name: string; age: byte; footsize: Пример type TPerson=record // запись, состоящая из трех полей name: string; age: byte; footsize: real; end; var Ivanov, Petrov: TPerson; begin //далее присваиваем значения полям // К каждому компоненту записи можно получить доступ, // используя составное имя, то есть указав имя переменной, затем точку и имя поля Ivanov. name: ='Иванов Иван Сергеевич'; Ivanov. age: =19; Ivanov. footsize: =43; end.

Присваивание значения переменных-записей • Как и в случае с массивами, значения переменных типа запись Присваивание значения переменных-записей • Как и в случае с массивами, значения переменных типа запись можно присваивать другим переменным того же типа: • petrov: =ivanov;

Вложенные поля записи Поля записи могут быть вложенными: type birthday=record day, month: byte; year: Вложенные поля записи Поля записи могут быть вложенными: type birthday=record day, month: byte; year: word; end; TPerson= record name: string; age: byte; footsize: real; bd: birthday; end; var ivanov: TPerson; begin … ivanov. bd. year: =1995; … end.

Доступ к полям записи с помощью оператора with Для доступа к полям записи можно Доступ к полям записи с помощью оператора with Для доступа к полям записи можно использовать оператор with: with <переменная> do <оператор>; With — зарезервированное слово языка Delphi/Pascal, означающее, что далее, до слова end, при обращении к полям записи имя переменной можно не указывать. Например, можно написать: ivanov. bd. year: =1995; ivanov. bd. month: =10; ivanov. bd. day: =6; Или, что то же самое: with ivanov. bd do begin year: =1995; month: =10; day: =6; end;

Ввод и вывод записей в файл • • Записи можно хранить в файле. Для Ввод и вывод записей в файл • • Записи можно хранить в файле. Для того чтобы программа могла сохранить значение переменной-записи в файле или ввести его из файла, необходимо объявить файл, указав в качестве типа его компонентов тип "запись". Например, такой фрагмент программы: type ТРеrson = record f_name: string [20] ; l_name: string[20]; address: string[50]; end; var f: file of TPerson; объявляет файл, компонентами которого являются записи типа TPerson. • Процесс работы с файлом записей практически ничем не отличается от процесса работы с обычным файлом. Сначала надо объявить файловую переменную и с помощью процедуры Assign связать эту переменную с конкретным файлом. Затем нужно открыть файл (для чтения, записи или обновления). После этого можно прочитать запись из файла или записать запись в файл.

Перечисленный тип • Перечисленный тип задается перечислением тех значений. которые он может иметь. • Перечисленный тип • Перечисленный тип задается перечислением тех значений. которые он может иметь. • Каждое значение обозначается некоторым идентификатором и располагается в списке, обрамленным круглыми скобками: type. Month=(jan, feb, mar, apr, may, jun, jul, aug, sep, oct, nov, dec); var month: type. Month; begin if month=feb then writeln('Cool!'); end; • Максимальное количество значений перечисленного типа равно 65536. Первое значение в списке получает порядковый номер 0, второе — 1 и т. д.

Тип-диапазон задается границами своих значений: type dig_char = '0'. . '9'; dig = 0. Тип-диапазон задается границами своих значений: type dig_char = '0'. . '9'; dig = 0. . 9; или сразу: var dig=0. . 9; • • Левая граница диапазона не должна превышать правую! Пример: type days = (mo, tu, we, th, fr, sa, su); weekend = sa. . su; var w: weekend; begin w: =sa; end;

Множества • В отличие от многих распространённых языков, Pascal поддерживает специальный тип данных — Множества • В отличие от многих распространённых языков, Pascal поддерживает специальный тип данных — множество: • Переменные множественного типа описываются так: Var <идентификатор> : set of <базовый тип>; var set 1: set of 1. . 10; set 2: set of 'a'. . 'z'; set 3: set of integer;

Множества • Нельзя вводить значения во множественную переменную процедурой ввода read/readln и выводить процедурой Множества • Нельзя вводить значения во множественную переменную процедурой ввода read/readln и выводить процедурой вывода write/writeln! • Множество может получить конкретное значение только в результате выполнения оператора присваивания: Например: begin a : = [50, 100, 150, 200]; b : = ['m', 'n', 'k']; c : = [True, False]; d : = a; e: =[]; // пустое множество!!! end.

Множества • Не имеет значения порядок записи элементов множества внутри описания. Например, [1, 2, Множества • Не имеет значения порядок записи элементов множества внутри описания. Например, [1, 2, 3] и [3, 2, 1] — это эквивалентные множества. • Каждый элемент в множестве учитывается только один раз. Поэтому множество [1, 2, 3, 4, 2, 3, 4, 5] эквивалентно [1. . 5].

Операции над множествами Проверка принадлежности значения указанному множеству проверяется командой in (операция вхождения). В Операции над множествами Проверка принадлежности значения указанному множеству проверяется командой in (операция вхождения). В языке Pascal тип множество может содержать только однотипные элементы порядкового типа. Эта особенность широко используется и обычно быстрее эквивалентной конструкции в языке, не поддерживающем множества. Пример: Вот такая конструкция: if x in [5. . 10] then … { проверка на принадлежность элемента множеству } обработается быстрее, чем if (x>4) and (x<11) then … { проверка логическими условиями }

Операции над множествами • Объединением двух множеств A и B называется множество, состоящее из Операции над множествами • Объединением двух множеств A и B называется множество, состоящее из элементов, входящих хотя бы в одно из множеств A или B. Знак операции объединения в Паскале «+» . • Примеры: • [1, 2, 3, 4] + [3, 4, 5, 6] => [1, 2, 3, 4, 5, 6] • []+[‘a’. . ’z’]+[‘A’. . ’E’, ‘k’] => [‘A’. . ’E’, ‘a’. . ’z’] • [5<4] + [true] => [false, true]

Операции над множествами • Пересечением двух множеств A и B называется множество, состоящее из Операции над множествами • Пересечением двух множеств A и B называется множество, состоящее из элементов, одновременно входящих во множество A и во множество B. • Знак операции пересечения в Паскале «*» • Примеры: [1, 2, 3, 4] * [3, 4, 5, 6] => [3, 4] [‘a’. . ’z’]*[‘A’. . ’E’, ‘k’] => [‘k’] [5<4] * [true] => []

Операции над множествами • Разностью двух множеств A и B называется множество, состоящее из Операции над множествами • Разностью двух множеств A и B называется множество, состоящее из элементов множества A, не входящих во множество B. • Примеры: [1, 2, 3, 4] - [3, 4, 5, 6] => [1, 2] [3, 4, 5, 6] - [1, 2, 3, 4] => [5, 6] [‘a’. . ’z’]-[‘A’. . ’E’, ‘k’] => [‘a’. . ’j’, ‘i’. . ’z’] [‘A’. . ’E’, ‘k’] - [‘a’. . ’z’] => [‘A’. . ’E’] [5<4] - [true] => [false] [true] - [5<4] => [true]

Основные операции с порядковыми типами данных • pred(x), succ(x) — от слов predecessor, successor Основные операции с порядковыми типами данных • pred(x), succ(x) — от слов predecessor, successor — возвращают, соответственно, предыдущее и последующее значение порядкового типа (целые, логические, символьные, перечисленные, тип-диапазон). Например: var c: char; begin c: ='5'; end; • Тогда pred(c) вернет символ '4', succ(c) — символ '6'. • Функции pred и succ не определены для левого и правого концов диапазона значений, соответственно. • Ord(x) — возвращает порядковый номер значения выражения X. Если X принадлежит целому типу, то Ord(x) возвращает само значение Х, если же оно принадлежит к логическому, символьному, перечисленному типам, то она возвращает, соответственно, число в диапазоне [0. . 1], [0. . 255] — т. е. , код символа, [0. . 65535] — порядковый номер элемента.

Спасибо за внимание! Спасибо за внимание!