Delete(str_1,2, length(str_1)-2);

      Комментарии к записи Delete(str_1,2, length(str_1)-2); отключены

WriteLn(‘ Str_1=’,Str_1,’ Str_2=’,Str_2,’ Str_3=’,Str_3);

End.

Практические задания.

1. Исправить текст программы из примера 3 п.9.2 таким образом, чтобы соседние буквы во введенном слове разделялись не пробелами, а запятыми и только в том случае, когда они различны. Одинаковые буквы не должны разделяться. Отладить код программы.

2. Разработать и отладить код программы, в которой с клавиатуры вводятся два слова, а затем из первого слова исключаются все буквы, входящие в первое. Результат вывести на экран. Если в первом слове не осталось букв, вывести сообщение “empty word ” (пустое слово).

Множества

В основу понятия множества в Паскале положено математическое определение конечного множества как ограниченного набора объектов (элементов), обладающих некоторыми общими свойствами. В качестве элементов множества можно использовать только перечисляемый или интервальный тип данных. Этот тип называют базовымдля множества. Также используется понятие подмножества (в том числе и пустого), как набора элементов, входящих в базовое множество.

Формально определение множества схоже с определением массива. Отличия от массивов заключаются в следующем:

1) у множества ограничен тип элементов,

2) в математическом плане номер элемента в массиве не фиксирован, в массиве каждый элемент имеет свой фиксированный номер,

3) в массиве может быть любое количество элементов с одинаковыми значениями, в множестве такой элемент только один (т.е. включение в состав множества элементов ‘a’, ‘c’, ‘a’, ‘b’, ‘c’ даст в итоге множество вида [‘a’, ‘b’, ‘c’]).

9.3.1. Описание и инициализация множеств

Как и в случае других типов данных, множества могут быть описаны:

1) при помощи специального типа или

2) непосредственным описанием соответствующей им переменной.

Синтаксис описания множественного типа:

type M = Set of B;

где M — множественный тип, Set,of- служебные слова, B — базовый тип.

Базовый тип может быть задан пользователем или взят из стандартных типов.

Пример 1. Описание множественного типа, содержащего все строчные буквы латинского алфавита, а также переменной данного типа:

type LAT = Set of ‘a’..’z’;

var B: LAT;

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

type CH = Set of char;

var SYM: CH;

Синтаксис непосредственного описания переменной множественного типа похож на синтаксис описания типа:

var M: Set of B;

Пример 3. Непосредственное описание переменной множественного типа, совпадающего с типом из примера 1:

var B: Set of ‘a’..’z’;

Постоянные значения (константы) множественного типа записывают в виде заключенной в квадратные скобки последовательности одиночных элементов или элементов-интервалов базового типа, разделенных запятыми. Константа вида [ ] означает пустое подмножество. Константы могут использоваться для задания базового типа, перечисление и задание интервалов могут сочетаться, например:

var B:Set of [‘a’,’b’,’c’]; С:Set of [0,2,7,13]; D:Set of [1,10..20,5];

Как и у массивов, инициализация величины множественного типа может производиться с помощью типизированных констант:

const B0: Set of LAT= []; {задание пустого подмножества множества LAT}

const digits: Set of char= [‘0’ .. ‘9’];{задание константы символьного типа}

Порядок перечисления элементов базового типа в константах безразличен.

Во внутреннем представлении элементы множества нумеруются, начиная с нуля. Количество базовых элементов в одном множестве не должно превышать 256. Поэтому, в частности, стандартные типы ShortInt, Word, Integer, LongInt, несмотря на то, что являются перечислимыми, базовыми для множеств быть не могут.

Базовые элементы задают основное множество, из которого могут в виде значений переменной данного типа формироваться отдельные экземпляры – подмножества.

Пример 4. Рассмотрим описание переменной множественного типа, содержащего две буквы aи b:

var v_ab: Set of ‘a’..’b’;

Переменная v_ab может принимать значения только из следующего набора подмножеств множества, задающего тип: [ ] [a] [b] [a b].

За счет того, что все базовые элементы множества один раз указываются в его объявлении, во внутреннем представлении каждой переменной такого множества присутствие или отсутствие каждого базового элемента отмечается в одном бите (1 — если такой элемент в множестве присутствует, 0 — иначе). Такое битовое представление используется для выполнения операций над множествами.

Пример 5. Битовое представление всех возможных подмножеств базового множества, заданного в типе переменной v_ab из примера 4:

1)[ ] – 00(в пустое множество не входят оба базовых элемента);

2)[a] – 10(входит первый элемент a, второй b — не входит);

3)[b] – 01(a не входит, b входит);

4)[a b] – 11(оба элемента входят).

Пример 6. Формирование значений величины множественного типа, содержащего базовые элементы ‘a’,’b’,’с’:

Const

B_1=’a’; B_2=’b’;

Var

BB1,BB2: Set of ‘a’..’c’;

B: char;

Begin

B:= ‘с’;

BB1:=[B_1, ‘b’, B];

BB2:=[‘a’, B_2];

End.

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

Пример 7. Рассмотрим формирование множеств байтового типа:

Const

Bt_1=45; Bt_2=123;

Var

B: byte;

BB1, BB2: Set of byte;

Begin

x:=36;

BB1:=[1,11, Bt_1, Bt_2];

BB2:=[x,x+1, x+2, Bt_1*2, Bt_2-12];

End.

9.3.2. Предметные операции с множествами

Допустим, некоторые множества А,В,С уже заданы, например, перечислением их элементов. Используя предметные операции, из данных простых множеств можно получить составные множества F(А,В,С), у которых автоматически будут определены составляющие их элементы. Предметными являются следующие операции.

1. Объединение. Операция обозначается (+). В результирующее множество входят все элементы из объединяемых множеств, например:

[0,2,4]+[1,3] равно [0,1,2,3,4]

[‘a’,’b’] + [‘b’,’c’,’d’] равно [‘a’,’b’,’c’,’d’]

2. Пересечение. Операция обозначается (*). В результирующее множество входят только те элементы, которые присутствуют в каждом из пересекаемых множеств, например:

[0,2,4] * [1,3] равно []

[‘a’,’b’] * [‘b’,’c’,’d’] равно [‘b’]

3. Вычитание. Если из множества А вычитается множество В, то в результирующее множество входят только те элементы, которые присутствуют в А, но отсутствуют в В (операция обозначается (-)), например:

[0,2,4] — [1,3] равно [0,2,4]

[‘a’,’b’] — [‘b’,’c’,’d’] равно [‘ a ‘]

9.3.3. Операции сравнения над множествами

Если некоторые множества А,В,С уже заданы, то задачей операций сравнения является проверка выполнения ряда их свойств. Итогом выполнения данных операция всегда является логическое значение – Истина (True) или Ложь (False). В Паскале используются следующие операции сравнения множеств, в записи которых всегда входит левое и правое множество, разделенные знаком соответствующей операции.

1. Тождественность(=). Результат является истиной, если оба множества равны друг другу, т.е. состоят из одинаковых элементов, иначе – ложный результат, например:

[0,2,4] = [1,3] равно False

[‘a’,’b’] = [‘b’,’a’] равно True

2. Нетождественность(). Результат является истиной, если множества не равны друг другу, иначе – ложный результат, например:

[0,2,4] = [1,3] равно True

[‘a’,’b’] = [‘b’,’a’] равно False

3. Содержится в(

[0,2,4]

[‘a’,’b’]

4. Содержит(=). Результат — истина, если левое множество содержит правое, иначе – ложь, например:

[‘a’,’b’,’с’] = [‘b’,’a’] равно False

[‘a’,’b’,’с’] = [‘b’,’a’] равно True

Помимо операций между множествами в Паскале есть операция in, применяемая к паре “элемент-множество ”, проверяющая принадлежность элемента базового типа (стоящего в левой части выражения) заданному множеству (правая часть), например:

0 in [1,3] равно False

‘a’ in [‘b’,’a’] равно True

9.3.4. Цикл типа For..in.Вывод множеств и их элементов.

Переменные множественного типа являются подмножествами базового множества. В Паскале нет возможности обращаться к их элементам так же, как к отдельным символам строковых величин или элементам массива. Для осуществления действий, требующих перебора элементов множества проще всего использовать цикл типа For…in. Данный цикл применяется в тех случаях, когда необходимо выполнить фиксированное число вычислений для переменной цикла, которая принимает значения из перечислимого либо другого порядкового типа. Free Pascal поддерживает данный тип цикла, начиная с версии 2.4.2. Рассмотрим вначале синтаксис цикла и его применение к различным порядковым типам на примере перечисляемого типа week из примера 1 п. 9.1.

Цикл For…in имеет следующий синтаксис:

For переменная in тип do оператор

где For,in,do– служебные слова,

переменная– идентификатор языка Паскаль,

тип– порядковый тип языка Паскаль, все значения которого в заданном порядке должна пройти переменная,

оператор – оператор языка Паскаль (если требуется выполнить несколько действий, применить составной оператор).

Тип, применяемый в цикле For…in, должен быть упорядоченным и ограниченным. Рассмотрим простейший пример, в котором используется перечисляемый тип week из примера 1 п. 9.1.

Пример 8. Код программы, которая распечатывает все дни недели с новой строки:

type week = (Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday);

var d: week;

Begin

Статьи к прочтению:

Minimum Edit Distance Dynamic Programming


Похожие статьи:

  • Динамическое управление памятью (new, delete).

    Для управления динамической памятью используются уже знакомые нам указатели. Вся динамическая память рассматривается как подобная стеку структура,…

  • Использование свойства length

    В С# массивы реализованы как объекты, и это дает определенные преимущества при работе с массивами. Одно из них — возможность использования свойства…