АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция

Урок № 11. Структурные типы данных: строки, массивы, множества

Читайте также:
  1. VІ. Назвіть юридичні строки, які слід застосувати у наведених положеннях (усього – 9 балів: по 3 бали за кожну правильну відповідь):
  2. Вопрос 79. Определение множества. Основные операции над множествами.
  3. Вопрос №14. Бриф и его структурные элементы.
  4. Имидж человека - это сложное системное образование, представляющее собой достаточно сложный феномен, в котором переплетены структурные слагаемые личности, разнородные факторы.
  5. Инстуциолнальная структура общества. Структурные элементы социальных институтов. Их функции.
  6. КАДРОВАЯ ПОЛИТИКА ОРГАНИЗАЦИИ: ПОНЯТИЕ, СУЩНОСТЬ, СТРУКТУРНЫЕ ЭЛЕМЕНТЫ
  7. Класс- 2 строки, ежедневно.
  8. МНОЖЕСТВА.
  9. Множество, элементы множества, пустое и универсальное множество, конечное и бесконечное множества, способы задания множества.
  10. Основные группы моделей, применяемые в системах управления: организационные структурные, функциональные, информационные математические.
  11. Основные структурные единицы предприятия.
  12. Права субъекта персональных данных: основные характеристики правового режима.

 

Данные структурного типа состоят из данных других типов, в том числе и структурного. К данным структурного типа относятся:

- Строки

- Массивы

- Множества

- Записи

- Файлы

- Классы

1. Строки.

Строки (строковые типы) представлены тремя физическими типами.

Данные типа ShortString представляют собой строку, которая фактически является массивом из 256 элементов. Этот тип введен для совместимости с преды­дущими версиями языка.

Данные типов AnsiString и WideString представляют собой динамические массивы, максимальная длина которых фактически ограничена размером основной памяти компьютера. Данные типа AnsiString кодируются в коде ANSI, а типа WideString - в коде Unicode.

Общим типом является тип string, который может, соответствовать типу ShortString или AnsiString, что определяется директивой компилятора $РРHhhhhH. По умолчанию используется {$H+} и тип String равен типу AnsiString.

 

 

Массивы.

Массивом называется упорядоченная индексированная совокупность одно­типных элементов, имеющих общее имя. Элементами массива могут быть данные различных типов, включая структурированные. Каждый элемент массива однозначно определяется именем массива и индексом (номером этого элемента в массиве) или индексами, если массив многомерный. Для обращения к отдельному элементу массива указывается имя этого массива и номер элемента, заключенный в квадратные скобки, например, а[4,35].

Количество индексных позиций определяет размерность массива (одномерный, двумерный и т. д).

Различают массивы статические и динамические. Статический массив представляет собой массив, границы индексов и размеры кото­рого задаются при объявлении, т. е. они известны до компиляции програм­мы.

Формат описания статического массива:

Array [Тип индексов] of <Тип элементов>;

Пример. Объявление статических массивов

Type tm = Array[l.. 10, 1.. 100] of real;

Var arrl,arr2: tm;

arr3: Array[20.. 100] of char;

arr4: Array['a’.. 'z'] of integer;

Динамический массив представляет собой массив, для которого при объявлении указывается только тип его элементов, а размер массива определяется при выполнении программы. В Delphi использование динамических массивов стало возможным, начиная с версии 4

Формат описания типа динами­ческого массива:

Array of <Тип элементов>;

Задание размера динамического массива во время выполнения программы производится процедурой SetLength (S, L), которая для динамического массива s устанавливает новый размер, равный L – целое число. Выполнять операции с динамическим массивом и его элемента­ми можно только после задания размеров этого массива.

Для работы с массивами используются следующие функции:

Length() – определение длинны массива;

Low() – минимальный номер элементов;

High() – максимальный номер элементов.

Нумерация элементов динамиче­ского массива начинается с нуля, поэтому функция low () для него всегда возвращает значение ноль.

Пример. Описание одномерного динамического массива:

var n: integer;

m: array of real;

...

SetLength(m, 100);

for n=0 to 99 do m[n]:=n;

SetLength (m, 200);

Для описания типа многомерного динамического массива (например, дву­мерного) используется конструкция:

Array of Array of <Тип элементов>;

 

Пример. Описание двухмерного динамического массива:

var

A: array of array of Integer: // Двумерный динамический массив

begin

// Устанавливаем длину первого измерения (количество столбцов):

SetLength(A,3);

// Задаем длину каждого столбца:

SetLength(A[0],3):

SetLength(A[l],3);

SetLength(A[2],3):

end;

Действия над массивом обычно выполняются поэлементно, в том числе операции ввода и вывода. Поэлементная обработка массивов производится, как правило, с использованием циклов.

3.Множества

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

Формат описания множественного типа:

Set of <Тип элементов>;

Значения множественного типа заключаются в квадратные скобки. Пустое множество обозначается "[]".

Операции, допустимые над множествами:

 

Операция Наименование Тип результата Результат
+ Объединение мно­жеств Множество Неповторяющиеся элементы первого и второго множеств
- Разность множеств Множество Элементы первого множества, не принадлежащие второму
* Пересечение множеств Множество Содержит элементы, общие для обоих множеств
= Эквивалентность boolean True, если множества эквивалентны
<> Неэквивалентность boolean True, если множества не эквивалентны
<= Проверка вхождения boolean True, если первое множество входит во второе
>= Проверка включения boolean True, если первое множество включает второе

Также имеется операция in(x, s) – определение принадлежность выражения порядкового типа (х) множеству (s). Результат операции будет типа Boolean и иметь значение True, в случае соблюдения принадлежности значения множеству.

Пример. Использование множеств.

type

dCh = set of '0'..'9';

d = set of 0..9;

var Sl,s2,s3: dCh;

s4,s5,s6: d;

begin

s1: = ['1’, '2', '3'];

s2: = ['3’, '2', '1'];

S3: = ['2', '3'];

s4: = [0..3, 6]:

S5: = [4, 5];

s6: = [3..9];

end:

В этом примере множества S1 и S2 эквивалентны, а множество S3 включено в множество S2, но не эквивалентно ему.

В Delphi множественные типы используются, например, для описания типа кнопок или типа параметров фильтра.

Урок №12. Структурные типы данных: Записи, файлы, вариантные, классы памяти. Записи.

Записи.

Запись — это структура данных, состоящая из фиксированного количества компонентов, называемых полями записи. В отличие от массива компоненты (поля) записи могут быть различного типа. Чтобы можно было ссылаться на тот или иной компонент записи, поля именуются.Имя поля должно быть уникальным в пределах записи.

Структура объявления типа записи такова:

имя_типа = record

список_полей end;

Здесь имя_типа — правильный идентификатор; record, end — зарезервированные слова (запись, конец); список__полей — последовательность разделов записи, между которыми ставится точка с запятой.

Каждый раздел записи состоит из одного или нескольких идентификаторов полей, отделяемых друг от друга запятыми. За идентификатором (идентификаторами) ставится двоеточие и описание типа поля (полей), например:

type

Data = record

Day, Month: Byte;

Year: Word;

end;

var

a,b: Data;

Различают фиксированные и вариантные записи.

Фиксированная запись состоит из конечного числа по­лей, ее объявление имеет следующий формат:

Record

<Имя поля1>: <Тип поля>;

...

<Имя поляN>: <Тип поля>;

end;

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

type

Forma = record

Name: String;

case byte of

0: (BirthPlace: String [40]):

1: (Country: String [20]:

EntryPort: String [20]:

Date1: 1..31;

Date2: 1..31)

end:

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

Пример. Использование записи.

var Man: record

Name: string;

Salary: real;

Note: string;

end;

...

Man.Name:='Иванов M.P.';

Man.Salary:=500;

...

2. Файлы

Под файлом понимается именованная область внешней памяти компьютера (жесткого или гибкого диска, компакт-диска и т. п.).

Файловый тип можно задать одним из трех способов:

имя = File of тип;

имя = TextFile;

имя = File;

Здесь имя — имя файлового типа (правильный идентификатор);

File, of — зарезервированные слова (файл, из);

TextFi1е — имя стандартного типа текстовых файлов;

тип — любой тип Object Pascal, кроме файлов, объектов, вариантов, интерфейсов и динамических массивов.

Пример:

type

Product = record

Name: String;

Code: Word;

Cost: Comp;

end;

Text80 = File of String[80]:

var

F1: File of Char;

F2: TextFile;

F3: File;

F4: Text80;

F5: File of Product;

В зависимости от способа объявления можно выделить три вида файлов:

- типизированные файлы (задаются предложением File of...);

- текстовые файлы (определяются типом TextFile);

- нетипизированные файлы (определяются типом File).

В наших примерах: F1, F4 и F5 — типизированные файлы, F2 — текстовый файл, F3 — нетипизированный файл.

3.Вариантные типы

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

В переменную-вариант можно поместить:

· целое или вещественное число;

· логическое значение;

· строку;

· время и/или дату;

· OLE-объект;

· массив произвольной размерности и длины, содержащий элементы одного из перечисленных выше типов:

Все эти типы считаются совместимыми с типом variant и в случае необходимости преобразования типов выполняются автоматически.

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

- unassigned - назначается переменной при ее описании и указывает, что значение переменной пока не присвоено и не определено;

- Null — указывает, что переменная содержит значение неопределенного типа или что значение было потеряно.

 

4.Указатели

Оперативная память компьютера представляет собой совокупность ячеек для хранения информации — байтов, каждый из которых имеет собственный номер. Эти номера называются адресами, они позволяют обращаться к любому байту памяти. Object Pascal предоставляет в распоряжение программиста гибкое средство управления динамической памятью — так называемые указатели. Указатель — это переменная, которая в качестве своего значения содержит адрес байта памяти. С помощью указателей можно размещать в динамической памяти любой из известных в Object Pascal типов данных. Лишь некоторые из них (Byte, Char, Short I nt, Boolean) занимают во внутреннем представлении один байт, остальные — несколько смежных. Поэтому на самом деле указатель адресует лишь первый байт данных.

Различают указатели типизированные и нетипизированные. Типизированный указатель может ссылаться на данные определенного типа, который задается при объявлении указателя или описании типа указателя. При этом исполь­зуется значок ^перед именем типа адресуемых данных.

Формат описания типа для типизированного указателя:

Туре <Тип указателя> = ^<Тип адресуемых данных>

Нетипизированный указатель имеет тип Pointer и может ссылаться на дан­ные любого типа.

С помощью указателя можно получить доступ к значению адресуемых дан­ных. Для этого используется разыменовывание указателя — справа от имени указателя приписывается значок ^.

Для определения адреса объекта, к которому можно обратиться с помощью указателя, используется операция @, записываемая перед именем этого объекта

Пример. Использование указателя

var p: ^integer;

p1:point;

n, k: integer;

...

p:=@n;

n:=100;

k:=p^+10;

... После выполнения операторов значение переменной k будет равно 110.


1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 |

Поиск по сайту:



Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.016 сек.)