Работа с массивами
// формирование целочисленного массива 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;