Программирование на языке Delphi/§6

Материал из Викиверситет
Перейти к: навигация, поиск

Содержание

Записи [править]

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

<имя типа> = record <список полей> end;

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

type
  Person=record
    FirstName,LastName:string[40];
    birthYear:integer;
end;

К каждому компоненту записи можно получить доступ, если использовать имя переменной, а затем точку и название раздела записи.

type
  TPerson=record
    FirstName,LastName:string[40];
    birthYear:integer;
end;
 
var pers:TPerson;
begin
pers.birthYear:=1990;
end.

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

...
with pers do begin
  birthYear:=1990;
  FirstName:='A';
  end;

Множества [править]

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

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

<идентификатор> = set of <базовый тип>

Где базовый тип - тип элементов данных. Обычно он задается диапазоном.
Пример задания множества:

var
 dec1:set of 0..9; //Множество задается диапазоном
 dec2:set of byte; //Можно указать тип данных, если его размер - 1 байт

Над множествами определены следующие операции: Пусть M1=[1,2,3,5,8],M2=[1,2,4,6,8]

  • Пересечение множеств(*). Результат содержит элементы общие для обеих множеств(M1*M2=[1,2,8])
  • Объединение множеств(+). Результат содержит элементы первого и второго множеств(M1+M2=[1,2,3,4,5,6,8])
  • Разность множеств(-). Результат содержит элементы первого множества, не входящие во второе(M1-M2=[3,5])
  • Проверка эквивалентности(=). Возвращает True если множества эквивалентны(все элементы совпадают).
  • Проверка неэквивалентности(<>). Возвращает True если множества неэквивалентны.
  • Проверка вхождения(<=). Возвращает True, если первое множество включено во второе.
  • Проверка принадлежности(in). Возвращает True если выражение имеет значение, принадлежащее множеству(2 in M1=true).

Также существует возможность добавлять или исключать из множества элементы:

...
M1:=M1-[2]; //Теперь M1=[1,3,5,8]
M2:=M2+[12]; //Теперь M2=[1,2,4,6,8,12]

Будьте внимательны, не добавляйте в множество элементы, которые не входят в диапазон(хотя Delphi это позволяет).

var m:set of 1..2;
    b:boolean;
begin
m:=[1,2,3,4]; //3 и 4 не входят в диапазон множества.
if 100 in m then b:=true else b:=false;  //100 почему то тоже окажется в множестве
end.

Множества можно использовать для проверки, входит ли какое-нибудь число или буква в некий диапазон:

{$APPTYPE CONSOLE}
var c:char;
begin
readln(c);
if c in ['a'..'z'] then writeln('Vhodit') //Можно было бы написать if((ord(c)>=ord(a))and(ord(c)<=ord(z))) then...
   else writeln('Ne vhodit');
readln;
end.

Строки [править]

Delphi имеет несколько типов для работы со строками:

  • ShortString или String[N] где N < 256 :Строка является массивом из N+1 байт. Один символ равен 1 байту.
  • String : Строка, являющаяся динамическим массивом. Один символ равен 1 байту.
  • WideString : Аналогично String, но один символ равен 2 байт.
  • PChar : Аналогично String, но всегда заканчивается на #0

В Delphi предусмотрен механизм перевода из типа String в PChar и обратно:

var p:Pchar;
    s:string;
begin
s:='sdsdsdsd';
p:=Pchar(s);
s:=string(p);
end.

Имеется возможность изменить любой символ у строки, если он меньше чем длина строки. Для этого нужно указать в квадратных скобках номер символа, счет символов начинается с 1.

...
s:='abc';
s[1]:='c';
s[3]:='a'; //теперь s='cba'
...

К строкам применимы операции отношения(=, <>, >, <, >=, <=). Также можно соединять две строки в одну с помощью оператора +. Оператор = возвращает True если все символы строк равны; Операторы >, <, >=, <= сравнивают длины строк.

...
s1:=s1+s2;
...

Пример сравнения длин двух строк:

{$APPTYPE CONSOLE}
var s1,s2:string;
begin
readln(s1);
readln(s2);
writeln('Dlina s1=',length(s1));
writeln('Dlina s2=',length(s2));
if length(s1)=length(s2) then writeln('Stroki ravny') else //Мы не можем использовать оператор = 
  if s1>s2 then writeln('s1 dlinnee s2') //Для сравнения длин используем операцию отношения(>)
    else writeln('s2 dlinnee s1');
readln;
end.

Функции и процедуры для работы со строками [править]

Функция Параметры Результат
Delete(var S: string;Index,Count:Integer) s - строка,из которой будем удалять; Index - символ, начиная с которого нужно удалять Count - количество символов Удаляет начиная с N-ого символа I символов.
Insert(Source:string;var S:string;Index:Integer) Source - строка для вставки, S - Строка, в которую вставляем, Index - начиная с какого символа вставляем Вставляет в одну строку другую
Copy(S; Index, Count: Integer): string; s- строка или массив, откуда мы копируем; Index - начиная с какого символа копируем; Count - количество копируемых символов Копирует Count символов из строки S.
Pos(Substr:string; S:string): Integer; Substr - подстрока, которую надо найти, S - строка, в кторой ищем Функция ищет подстроку Substr в строке S и возращает символ, с ктоторого она начинается, или 0 если такой подстроки нет.
Length(s:string):integer; s - строка, длину который нужно определить Определяет длину строки