Flatik.ru

Перейти на главную страницу

Поиск по ключевым словам:

страница 1

Тип данных set - множество.


В математике часто приходится решать различные задачи с подмножествами некоторого фиксированного множества объектов – учеников класса, букв, чисел, кроликов, домов и т.д. В языке Паскаль для задач подобного рода предусмотрен специальный тип данных - set. Значения переменных этого типа - всевозможные подмножества некоторого базового множества элементов.

Формат описания в разделе var



<имя>:set of <базовое множество>;

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

Примеры объявления переменных типа set и типизированных констант, которые в программе можно использовать так же, как переменные:
Var

a,b:set of char;

d:set of 'A'..'Z'

C:set of 0..9;

E:set of byte;

Const


Alph=['A'..'Z','a'..'z'];

Digits=[0..9];

В разделе объявления переменных после слова of следует указание базового типа - из каких элементов может состоять подмножество. В частности, переменная a может содержать подмножество любых символов, с - любых цифр, d - любые заглавные буквы латинского алфавита, E - любые числа от 0 до 255 и т. д.
В программе переменной - множеству можно присвоить какое - нибудь значение (подмножество), при этом элементы подмножества следует записать по правилам записи констант через запятую, поместив их в квадратные скобки. Вообще в Паскале все подмножества заключаются в квадратные скобки.

Над множествами определены операции '+' (объединение), '-' (исключение), '*'(пересечение).

В логических выражениях можно использовать операции отношения: '<=','>='("'меньшее" - подмножество "большего"), '=', '<>'. '[]' обозначает пустое множество.
Например:

a:=['a'..'d','g','z']; {A: ‘a’,’b’,’c’,’d’,’g’,’z’}

a:=a+['h']; {A: ‘a’,’b’,’c’,’d’,’g’,’z’,’h’}

ch:='j'; {ch имеет тип char}

a:=a+[ch]; {A: ‘a’,’b’,’c’,’d’,’g’,’z’,’h’,’j’}

b:=a*['a','e','f']; {B: ‘a’}


Если необходимо включить в множество один элемент, то вместо операции ‘+’, рекомендуется использовать процедуру Include. Вторую строчку в примере можно переписать так

include(a,’h’);

Аналогично если необходимо исключить из множество один элемент, то вместо операции ‘-’, рекомендуется использовать процедуру exclude, например

exclude(a,’h’);

Можно проверить, принадлежит ли элемент множеству при помощи операции in. Например

if ‘a’ in A then writeln(‘символ а принадлежит множеству A’)

else writeln(‘символ а не принадлежит множеству A’)

Для того, чтобы вывести на экран все элементы, принадлежащие множеству, необходим цикл вида.

For ch:=chr(0) to chr(255) do

if ch in A then writeln(ch);

В данном случае ch – переменная символьного типа, A – set of char.

Пример решения задачи.

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

Решение. Сначала удобно найти вообще все такие символы, а затем вывести на экран только цифры. В тексте программы (см. ниже) множество first содержит символы строки, которые встретились в ней ровно один раз, а множество second – символы, которые встретились не менее, чем два раза. Множество x содержит все символы строк, удовлетворяющие заданному условию.

var

ch:char;


i:integer;

s:string;

first,second,x:set of char;

begin
readln(s); first:=[]; second:=[];

for i:=1 to length(s) do

if s[i] in first then include(second,s[i])

else include(first,s[i]);

x:=first-second;


readln(s); first:=[]; second:=[];

for i:=1 to length(s) do

if s[i] in first then include(second,s[i])

else include(first,s[i]);

x:=x*(first-second);
for ch:='0' to '9' do

if ch in x then write(ch);


end.

Задачи:


Задача . Какие символы присутствуют в обеих заданных строках?

Задача . Какие цифры присутствуют в обеих заданных строках?

Задача . В строке через пробел записаны двузначные числа. Сколько различных двузначных чисел записано в строке?

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

Задача . Какие простые числа, лежащие в интервале 0..200, присутствуют в текстовом файле?

Задача . Задана текстовая строка. Какие символы встречаются в каждом слове?

Задача . Задан массив, содержащий целые числа из интервала 0..100. Какие числа встречаются в массиве лишь один раз?

Задача . Вывести наименьшее число (больше 1) такое, что в его записи и в записи его квадрата используются одни и те же цифры.

Задача . *Решить ребус МУХА+МУХА=СЛОН, в котором различные буквы соответствуют различным цифрам.

Задача . *Реализовать хранение подмножеств тридцати двух элементов в переменной типа WORD. Реализовать операции сложения, вычитания, умножения, отношений наиболее простым из возможных способов при помощи подпрограмм.

Задача . ***Дана головоломка вида: X+Y=Z, где X, Y, Z, - строки из произвольного числа заглавных латинских букв и цифр (длины строк могут быть разными). Одинаковым буквам соответствуют одинаковые цифры, разным - разные.

ЗАДАНИЕ: Написать программу, решающую головоломку.

ТЕХНИЧЕСКИЕ ТРЕБОВАНИЯ:

1. Вводится с клавиатуры строка из трех слов, разделенных пробелами.

2. Выводится на экран одно из решений в виде головоломки с подставленными в нее числами.

3. При отсутствии решений выводится сообщение "Решений нет".

ПРИМЕР: После ввода строки "ABC AEEE АAВС" программа выводит на экран

строку "149 + 1000 = 1149".



Вопросы:


  1. Сколько байт занимает set of char? Set of 0..9?

  2. Как хранится множество в ОЗУ?

  3. Каковы два основных недостатка типа set?

Тип данных set множество

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

50.85kb.

08 10 2014
1 стр.


Конспект по теме: «Вещественный тип данных»

Определение: Вещественный тип – это простой стандартный тип, предназначенный для хранения подмножества вещественных чисел и выполнения операций над ними

94.99kb.

11 10 2014
1 стр.


Лабораторная работа №3. Абстрактный тип данных: p-ичный процессор. Тема: Классы Object Pascal, С++

Цель: Сформировать практические навыки: реализации абстрактного типа данных с помощью классов Object Pasca, С++

69.15kb.

15 09 2014
1 стр.


Intermec Терминал сбора данных Intermec ck31 Тип: Терминалы сбора данных Производитель

Разработанный в учетом требований RoHS, мобильный терминал сбора данных Intermec® ck31 обеспечивает традиционные для продукции Intermec надежность, прочность, продуманный дизайн и

50.05kb.

13 10 2014
1 стр.


Intermec Терминал сбора данных Intermec cn30 Тип: Терминалы сбора данных Производитель

Гибкий мобильный компьютер для полного учета складских операций и управления складом

52.07kb.

11 10 2014
1 стр.


Множество точек м плоскости, сумма расстояний от которых до двух данных точекАиВ равна постоянной величине,большей

Эллипс – это множество точек м плоскости, сумма расстояний от которых до двух данных точек а и в равна постоянной величине,большей

34.21kb.

18 12 2014
1 стр.


Intermec Терминал сбора данных Intermec ck30 Тип: Терминалы сбора данных Производитель

По "с нуля" или его модификации. Инструменты разработчика прикладного по net. Compact Framework и Visual Studio. Net позволяют минимизировать изменения по при смене используемых

67.68kb.

13 10 2014
1 стр.


Методическая разработка учителя английского языка гбоу лицей №533 Подчасской Е. С., Козловской О. Г. Тема: Хэллоуин Учебно-методический комплекс: умк «Get Set Go 4», Oxford University Press, 2007

Учебно-методический комплекс: умк «Get Set Go 4», Oxford University Press, 2007

77.89kb.

15 12 2014
1 стр.