Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Информатика 1 курс / метод указания / Программирование в интегрированной среде Turbo Pascal. Учебное пособие.doc
Скачиваний:
116
Добавлен:
08.06.2015
Размер:
1.51 Mб
Скачать

9.3. Множества

В ТР множество – это конечная неупорядоченная совокупность элементов, принадлежащих некоторому базовому типу данных, который может быть только порядковым(кромеword,integerиlongint, так как число элементов в них > 256).

Массивы и вещественные числа в множества входить не могут.

Максимально допустимое число элементов (мощность, кардинальное число) множества не может превышать 256, поэтому, порядковые значения базового типа лежат в диапазоне 0..255 включительно.

Описание переменных множественного типа осуществляется двумя эквивалентными способами:

  1. с определением типа

Type

<имя типа множества>=setof<имя базового типа>;

Var

<имя переменной>:<имя типа множества>;

  1. без определения типа

Var

<имя переменной>: setof<имя базового типа>;

Например, Type

Simbol = set of char;

Week = set of (Sun,Mon,Tue,Wed,Thu,Fri,Sat);

Month = set of 1..31;

Var

Letter : simbol;

Day : Week;

Date : Month;

Rus : set of ’A’..’Я’;

Переменным множественного типа присваиваются значения в виде подмножеств. Подмножество – это последовательность элементов, разделенных запятыми, взятая в квадратные скобки [ ]. Это задание множества называется конструктормножества. Другим способом задания является диапазон. Обе формы конструирования подмножеств могут сочетаться.

Например: Sign:=[’+’,’–’];

Digits:=[’0’..’9’];

Letter:=[’А’..’Я’,’а’..’п’,’р’..’я’];

Над переменными множественного типа можно производить следующие операции:

  1. In– проверка на принадлежность множеству. Результат проверки равенTrue, если первый операнд входит в множество второго операнда.

Например: if Temp In [0..100] then write (’Жидкость’);

if Bukva In Letter then write (Bukva);

  1. Сравнение множеств (операции соотношения). Результат сравнения равен True, если:

а) при операции = сравниваемые множества совпадают;

б) при операции <>они не совпадают друг с другом;

в) при операции >= все элементы второго множества входят в первое;

г) при операции <=все элементы первого множества входят во второе;

Например, результаты приведенных сравнений истинны:

[5, 6] = [6, 5]; [’A’]<>[’B’,’C’]; [’B’,’U’,’K’,’V’,’A’] >= [’K’]; [1..3, 5] <= [0..10];

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

Например:

A:= [’Turbo’];

B:=A+[’Pascal’]; {результат –B=[’Turbo’,’Pascal’]}

C:= [’Turbo’,’Pascal’]+[’Pascal’]; {результат –С=[’Turbo’,’Pascal’]}

  1. Разность множеств (знак операции “–”). Результат операции – множество, включающее все элементы первого множества, не входящие во второе множество.

Например:

A:= [’a’,’b’,’c’] – [’b’,’c’]; {результат –A=[’a’]}

B:= [1..10] – [1, 3, 5, 7, 9]; {результат –B=[2,4,6,8,10]}

  1. Пересечение множеств (знак операции “*”). Результат – множество, включающее элементы первого и второго множеств одновременно.

Например,

A:= [1..10] * [8..14]; {результат –A=[8, 9, 10];}

B:= [’A’,’B’,’C’]*[’K’,’L’,’M’]; {результат – B=[ ] – пустое множество}

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

Например:

type

Rus = set of 'А' .. 'Я';

const

s : rus = ['А','Б','В','Г','Д'];

date:set of 1..31 = [7..9];

Пример. Составить программу удаления из строки лишних (нескольких идущих подряд) разделителей (знаков препинания, пробелов и т.п.). Подсчитать число удаленных знаков. Исходную строку и полученные результаты вывести на печать.

Program Deleting;

var st,st1:string; {st – исходная строка,

razd:set of char; st1 – обрабатываемая строка}

x,i:byte;

begin

writeln('Введите исходную строку:');

readln(st);

st1:=st;

{задание подмножества разделителей}

razd:=[' ', ',', ';', '.', ':', '-'];

i:=1;

while i<length(st1) do {посимвольный перебор строки}

begin

if (st1[i] in razd) and (st1[i]=st1[i+1]) then

delete(st1,i+1,1) {удаление лишнего знака}

else i:=i+1;

end;

x:=length(st)-length(st1);

writeln('Исходная строка:');

writeln(st);

writeln('Полученный результат:');

writeln(st1);

writeln('Обнаружено ',x,' лишних знаков');

end.

Результат выполнения данной программы:

Исходная строка:

СфСамГТУ,,,, ул..Советская, д...45....

Полученный результат:

СфСамГТУ, ул.Советская, д.45.

Обнаружено 13 лишних знаков

!! Проанализируйте программу Deleting, введите ее текст в компьютер, осуществите ее компиляцию, запустите на счет и просмотрите результаты.

Соседние файлы в папке метод указания