Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
9
Добавлен:
26.04.2015
Размер:
205.82 Кб
Скачать

Работа с массивами

// формирование целочисленного массива K из 10 элементов (оценок)

for i:=1 to 10 do

K[i]:=Random(4)+2;

//cуммирование значений элементов целочисленного массива K

S:=0;

for i:=1 to 10 do

S:=S+K[i];

//Пример поиска наибольшего элемента в целочисленном массиве N из 10 //элементов

Max:=N[1];

for i:=1 to 10 do

if Max<A[i] then Max:=A[i];

Записи

Запись - это стpуктуpа данных, котоpая может содеpжать инфоpмацию pазных типов, объединенную под одним названием. Компоненты записи называются полями. Число полей фиксиpованно. Описание записей имеет следующую стpуктуpу:

<имя типа> = record

<имя поля 1> :<тип 1>;

…..

<имя поля N> : <тип N>;

end;

Типы полей записи могут быть любыми. Более того, тип запись может использовать для создания массивов и новых записей. Степень вложенности не огpаничена.

Пример

type

Men = record

FIO, Adress : string;

Year : byte;

end;

var

A,B : Men;

Spisok: record

Name:String[20];

Mark:Byte

end;

Для обpащения к полям записи указывается название записи, точка, имя поля, например:

A.FIO:='Иванов И.И.';

A.Adress:='пp. Ленина, д. 40, кв. 10';

A.Year:=1981;

Spisok.Name:=Edit1.Text; Spisok.Mark:=StrToInt(Edit2.Text);

Для удобства обpащения к полям записей может использоваться опеpатоp пpисоединения

with пеpеменная do опеpатоp;

Здесь пеpеменная - это имя записи, за котоpой может следовать список вложенных полей.

with Spisok do

begin

Name:=Edit1.Text;

Mark:=StrToInt(Edit2.Text);

end;

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

Пример

type

TMen = record

FIO, Adress : string;

Year : byte;

end;

var

Spisok: array [1..100] of TMan; // Spisok – массив из 100 записей

Edit1.Text:=Spisok[10].Fio; //вывод фамилии 10 элемента списка

Edit1.Text:=StrToInt(Spisok[10].Age); // вывод возраста 10 элемента

for i:=1 to 100 do

Spisok[i].Age := Random(150); // формирование массива

// ввод данных из сетки в массив записей

for i:=1 to 100 do

begin

Spisok[i].Fio := StringGrid.Cells[ i-1,0];

Spisok[i].Age := StrToInt(StringGrid.Cells[ i-1,1]);

end;

Множества

Множество – это набор данных, относящихся к одному и тому же порядковому типу. Количество элементов множества не может превышать 256. Описание множества можно осуществить так :

type

<имя типа> = set of <имя базового типа>;

Пример

type

TweekDay= (Sun, Mon, Tues, Wed, Thur, Fri, Sat);

TMark =2..5;

TsetByte = set of Byte;//

TUpperLatin=set of [‘A’..’Z’];

TsetMark = set of Mark;

TsetWeekday = set of TweekDay;

var

SetByte: TsetByte;// множество чисел от 0 до 255

UpperLatin:TUpperLatin;множество заглавных лат. символов

Mark: set of 2..5;// множество чисел от 2 до 5

Mark:=[];

SetByte:=[2,4,6,8,];

UpperLatin:=[‘X’,’Y’,’Z’];

Пример

var

Set1, Set2: set of 1..3;

Set1:=[]; Set1:=[1, 2]; Set1:=[2, 3]; Set1:=[1, 3]; Set1:=[1, 2, 3];

Set2:=[1..3] ; Set2:=[1..2, 3]; Set2:=[1..3, 2, 2] // одно и тоже

Cписок операций, которые допустимы над множествами.

Операция

Название

Тип результата

Результат

Пример

+

Объединение множеств

Множество

Неповторяющиеся элементы первого и второго множества

Set1 + Set2

-

Разность множеств

Множество

Элементы из 1-го множества, которые отсутствуют во 2-ом

Set1 – Set2

*

Пересечение множеств

Множество

Элементы, которые есть как в первом, так и во втором множестве

Set1 * Set2

=

Эквивалентность

Логический

Истина, если множества эквивалентны, иначе – ложь

Set1 = Set2

<>

Неравенство

Логический

Истина, если множества не являются эквивалентными

Set1 <> Set2

<=

Подмножество

Логический

Истина, если первое входит во второе, ложь – иначе

Set1 <= Set2

>=

Расширенный набор

Логический

Истина, если 1-ое мн-во включает в себя 2-ое, иначе – ложь

Set1 >= Set2

In

Членство

Логический

Истина, если данный элемент входит в множество, иначе – ложь

A in Set1

Пример

Set1:=[1,2];

Set2:=Set1;

Set1:=Set1+[1];// добавление 1 в множество

Set1:=Set1-[3];// удаление 3 из множества

Set1:=Set1*Set2;// пересечение множеств

SetByte:=Set1+Set2+[2,4,6,8,]; //объединение 3-х множеств

UpperLatin:=[‘X’,’Y’,’Z’];

if ‘A’ in UpperLatin then Label1.Caption:=’Нет’

else Label1.Caption:=’Да’

Пример

type

TCoin=set of (one, two, five, ten);

TRub=set of 1..5;

TDollar=set of '1'..'5';

var

Coin:TCoin;

Rub1:set of 1..5= [1,2];

Rub2, Rub3 :TRub;

Dollar:TDollar;

// Ввод множества

case StrToInt(Edit5.Text) of

1:Rub1:=Rub1+[1];

2:Rub1:=Rub1+[2];

3:Rub1:=Rub1+[3];

4:Rub1:=Rub1+[4];

5:Rub1:=Rub1+[5];

end;

if Edit4.Text='one' then Coin:=Coin+[one];

if Edit4.Text='two' then Coin:=Coin+[two];

if Edit4.Text='five' then Coin:=Coin+[five];

//Вывод множества

ListBox3.Clear;

for i:=1 to 5 do

if i in Rub2 then ListBox3.Items.Add(IntToStr(i));

// Блокировка

if not ( Key in [1..9] ) then Edit1.Text:=#0;

//случайная перестановка из 10 и ее вывод в ListBox

S:=[1..10];

while S < > [ ] do

begin

n:=Random(10)+1;

if n in S then

begin S:=S-[n]; ListBox1.Items.Add(IntToStr(n)) end;

end;

23

Соседние файлы в папке Методический материал