Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
методички по информатике / Конспект лекций (Delphi).pdf
Скачиваний:
63
Добавлен:
27.05.2015
Размер:
1.2 Mб
Скачать

17

end;

for i := 1 to Count do begin

with Figures[i] do case Vid of

0 : s := IntToStr(i)+' - квадрат, S='+ FloatToStr(sqr(Side));

1 : s := IntToStr(i)+' - прямоугольник, S='+ FloatToStr(Side1*Side2);

2 : s := IntToStr(i)+' - круг, S='+ FloattoStr(Pi*sqr(Radius));

end; <вывод s>;

end;

end;

1.12 Множества

Множества – это наборы однотипных логически связанных друг с другом объектов. Для описания множества используется следующий формат:

<идентификатор> = set of <начало> .. <окончание>

<идентификатор> = set of (<элемент1> [,<элемент2> …])

Элементы, описываемый <начало>, <окончание> должны быть порядкового типа. Количество элементов множества не может превышать 256.

Множества часто используются для проверок установки тех или иных флагов объектов.

Операции с множествами:

+ – сложение; результат содержит элементы первого множества, дополненные недостающими элементами второго множества;

- – вычитание; результат содержит элементы из первого множества, которые не принадлежат второму;

* – пересечение; результат содержит элементы, общие для обоих множеств;

= – проверка эквивалентности; возвращается True, если множества эквивалентны;

<> – проверка неэквивалентности; возвращается True, если множества неэквивалентны;

<= – проверка вхождения; возвращается True, если первое множество включено во второе;

>= – проверка вхождения; возвращается True, если второе множество включено в первое;

in – проверка принадлежности; возвращается True, если элемент входит в множество;

include(s,i) – включает новый элемент i в множество s;

18

exclude(s,i) – исключает элемент i из множество s.

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

Рассмотрим на примере операции работы с множествами. Пример (выполнение действий с множествами):

var

s1,s2,s3,s : set of 0..9; f : boolean;

begin

s1 := [0..3,6]; {Пример присвоения}

s2 := [4,5];

s3 := [3..9];

s := s1+s2; {s = [0..6] - сложение}

s := s2+s3; {s = [3..9] - отброс дублирования} s := s1*s3; {s = [3,6] - пересечение}

s := s3-s2; {s = [3,6..9] - вычитание} f := s1=s2 {f = False}

f := s1<>s2; {f = True} f := s2<=s3; {f = True} f := s1>=s3; {f = False} f := 4 in s1; {f = False}

include(s1,4); {s1 = [0..4,6]} exclude(s1,2); {s1 = [0..1,3..4,6]}

end;

1.13 Пользовательские типы

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

<идентификатор типа> = <описание типа>;

Описание типов производится в секции type. Вновь созданный тип становится равноправным со стандартными типами, поэтому его использование не требует отдельного рассмотрения.

Примеры описания типов:

type

Mas = array[1..10] of real;

Matrix = array[1..10,1..10] of integer; Figure = record

X,Y : real; case integer of

0: (Side : real); {квадрат}

1: (Side1,Side2 : real){прямоугольник};

2: (Radius : real); {Окружность}

end;

FigureFile = file of Figure;

19

Month = (Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec); Alfa = set of 'A'..'Z';

1.14 Файлы

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

<идентификатор> : {TextFile | file | file of <тип>};

Порядок работы с файлами приведен ниже в таблице (считаем, что имеется переменная f)

Действие

TextFile

file

file of …

Связывание с перемен-

 

AssignFile(f,<имя файла>);

 

ной

 

 

 

Открытие файла на

reset(f);

reset(f[,<число байт>]);

reset(f);

чтение

 

 

 

Открытие файла на за-

rewrite(f);

rewrite(f[,<число байт>]);

rewrite(f);

пись

 

 

 

Чтение

read(f,…);

blockread(f, …, <количество>

read(f,…);

 

readln(f,…);

[,<cчитано>]);

 

Запись

write(f,…);

blockwrite(f, …, <количество>

write(f,…);

 

writeln(f,…);

[,<записано>]);

 

Закрытие

 

CloseFile(f);

 

файла

 

 

 

При работе с файлами второго типа <число байт> указывает, количество байт, считываемых или записываемых в файл за одну операцию. <количество> указывает на размер чтения или записи в байтах. Для определения этого параметра можно воспользоваться функцией SizeOf(), в качестве параметра которой задается тип или идентификатор.

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

При работе с файлами первого типа возможно использование функции Append(), открывающую файл на дозапись.

Для файлов второго и третьего типа возможно использование функций Seek() – смена позиции в файле, FilePos() – определение текущей позиции в файле, FileSize() – размер файла. Также возможно проведение записи в файл, открытый с помощью функции Reset(), обеспечивающее модификацию и дозапись файла.

Пример 1 (запись данных о людях в файл различными способами и алгоритм считывания данных из файла):

procedure TForm1.Button1Click(Sender: TObject); type

MyRec = record

Name : ShortString; // Обратить внимание на ShortString

20

Height : integer; Weight : real;

end; var

Mas : array[1..100] of MyRec; f1 : TextFile;

f2 : file;

f3 : file of MyRec; i,n : integer;

begin

n := ???;

for i := 1 to n do begin

Mas[i].Name := ???;

Mas[i].Height := ???;

Mas[i].Weight := ???;

end;

AssignFile(f1,'data.txt');

rewrite(f1);

for i := 1 to n do begin

writeln(f1, Mas[i].Name); writeln(f1, Mas[i].Height); writeln(f1, Mas[i].Weight);

end;

CloseFile(f1);

AssignFile(f2,'data.dat');

rewrite(f2,1); for i := 1 to n do begin

blockwrite(f2, Mas[i].Name, SizeOf(Mas[i].Name)); blockwrite(f2, Mas[i].Height, SizeOf(Mas[i].Height)); blockwrite(f2, Mas[i].Weight, SizeOf(Mas[i].Weight));

end;

CloseFile(f2);

AssignFile(f3,'data.rec');

rewrite(f3);

for i := 1 to n do write(f3, Mas[i]);

CloseFile(f3); n := 0; reset(f3);

while not Eof(f3) do begin

inc(n);

read(f3, Mas[n]); end; CloseFile(f3);

end;