Программирование на языке Object Pascal

Методическое пособие - Компьютеры, программирование

Другие методички по предмету Компьютеры, программирование

осстановление начального имени;

High - возвращает максимальное значение индекса массива;

Low - возвращает букву названия массива.

Многомерный динамический массив - представляется как массив из массивов:

 

Var: array of array of byte(a; 4);(a [0]; 3); [???](a [1]; 1);[?](a[2];2);[??](a[3];5);[?????]

2).Записи:

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

Описание структуры записи происходит в разделе (type).

 

Type

Имя = record;

Список полей;

End;

 

Список полей представляет собой последовательность разделов записи следующего вида:

 

Имя1: type1;

Имя2: type2;

Имя3: type3;= record

FIO: string;

Gr: word;

Pol: Boolean;: string [10];

Rost: real;

Ves: real;;

...: student;.FIO: Иванов Иван Иванович;.Gr: 1987;.Pol: true;

...A do begin:= 180.5;:=98.2;

End;

 

… Доступ к каждому из компонентов записи осуществляется с использованием спецификатора.

Структура записи спецификатора:

 

спецификатор 1. [спецификатор 2 ...] идентификатор.

 

В данном случае спецификатором будет переменная типа (student), а идентификатором (pole).

… Для упрощения доступа к полям записи используются оператор:

 

With

 

Записи с вариантными полями

 

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

Модифицируем запись студент для хранения информации о местных студентах и приезжих, т.е. проживающих о общежитии:

Местные: улица, дом, квартира.

Приезжие: номер комнаты.

Type= record;

FIO: string;

Gr: word;

Pol: Boolean;: string [10];

Rost: real;

Ves: real;mesting: Boolean of

True: (ul: string [20]; dom: string [5]; kv: word);

Fals: (N_Komn: word);;;

 

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

В памяти, запись хранится линейно.

Синтаксис записи:

 

Имя = record

Список полей:

Case of

Вариант 1:(поле1: тип1;… полеN: типN);

End;

 

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

Ячейка (Название улицы или № комнаты) самая большая по количеству байтов.

3).Множества.

Множества - наборы однотипных, логически связанных друг с другом объектов. Характер связи между ними контролируется только программистом, а не компьютером. Максимальное количество элементов в множестве 256 минимальное 0.

Множества отличаются от массивов и записей непостоянством своих элементов. Элементы могут включаться в множество и выключаться из него. Механизм работы и множествами в Delphi схож с механизмом работы в математике.

Два множества считаются равными - если они содержат одинаковые элементы.

 

A {a, b, c, x}

B {c, x, y}

 

Пересечением - называются общие элементы двух множеств.

 

A ? B = {c, x} - пересечение.

A U B = {a, b, c, x, y} - объединение.

C = { } - пустое множество.

 

Если все элементы одного и того же множества входят в другое, то говорят, что A входит в B.

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

Type

 

В качестве базового типа может использоваться любой подходящий тип кроме integer, int 64 …

 

Type= set of a…z;, s2, s3: mnozh:= [a, b, t, x];:= [a..k, x..z];

 

Над множествами определены следующие операции:

* - пересечение;s1*s2 [a, b, x]

- разность;s1-s2[t]

= - проверка эквивалентности (возвращает true, если они эквивалентны);

<> - проверка не эквивалентности (возвращает true, если они эквивалентны);

+ - объединение множеств;

<= - проверка вхождения (возвращает true, если s1 входит в s2);

[s1<=s2]

>= - проверка вхождения (возвращает true, если s2 входит в s1);

[s1>=s2]

in - проверка принадлежности (возвращает true, если указанный элемент входит в множество);

Некоторые алгоритмы для работы с массивами:

) Заполнение массива случайными числами:

 

Var

a: array of integer;

i: integer;;(a, 10);i = 1 to n-1 do

a[i]:= random (101);;

s := (k * si-1) mod N,

 

где k - начальное значение (стартовое число).

) Алгоритм поиска минимального и максимального элемента массива:

 

Var: array of integer;: integer;, max, n: integer;, nmax: integer;:= 10(a, n);i = 1 to n-1 do

a[i]:= random (101);;

Max:= a[0]; nmax:= 0;

Min:= a[0]; nmin:= 0;i:= 1 to n-1 do begin

if a[i] > max then begin

max:= a[i];

nmax:= i;

End;

if a[i] < min then begin

min:= a[i];

nmin:= i;

End;

End;

End;

 

3) Алгоритм сортировки массива:

Существует множество способов сортировки массива:

Метод min или max элемента;

Метод пузырька;

Метод Шелла;

Метод бинарного поиска;

...

Метод min или max элемента:

 

Const= 100: array [1..n] of integer;, max, nmax, i, j: integer;:= 100(a, n);i := 1 to n-1 do

a[i]:= random (101);;

max:= a[1], nmax:=1;i:= 1 to n-1 do begin

For j:= 2 to n do max a[i] then begin := a[i];[i]:= max;[nmax]:= temp;;:= a[i+1];:= i+1;

End;;;

 

4) Алгоритм исключения элементов из отсортированного массива:

 

Var: array of byte;, n1, p, x, i: integer;:= 100(a, n);i = 1 to n-1 do

a[i]:= random (101);;

max:= a[1], nmax:=1;i:= 1 to n-1 do begin

For j:= 2 to n do max a[i] then begin := a[i];[i]:= max;[nmax]:= temp;;:= a[i+1];:= i+1;

End;

End;