Лекции.Орг


Поиск:




Категории:

Астрономия
Биология
География
Другие языки
Интернет
Информатика
История
Культура
Литература
Логика
Математика
Медицина
Механика
Охрана труда
Педагогика
Политика
Право
Психология
Религия
Риторика
Социология
Спорт
Строительство
Технология
Транспорт
Физика
Философия
Финансы
Химия
Экология
Экономика
Электроника

 

 

 

 


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] <= [1,3] равно False

['a','b'] <= ['b','a','с'] равно True

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





Поделиться с друзьями:


Дата добавления: 2016-11-12; Мы поможем в написании ваших работ!; просмотров: 365 | Нарушение авторских прав


Поиск на сайте:

Лучшие изречения:

Люди избавились бы от половины своих неприятностей, если бы договорились о значении слов. © Рене Декарт
==> читать все изречения...

2453 - | 2247 -


© 2015-2024 lektsii.org - Контакты - Последнее добавление

Ген: 0.01 с.