Программирование на языке 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 - строка, длину который нужно определить | Определяет длину строки |