36564

Структурный тип множество

Контрольная

Информатика, кибернетика и программирование

Понятие о типе Множество в Турбо Паскале. Множество является ещё одним структурным типом Турбо Паскаля служащим для объединения однородных однотипных элементов. Однако форма объединения в Множество существенно отличается от типа Массив.

Русский

2013-09-22

41.5 KB

8 чел.

Структурный тип множество.

1. Понятие о типе Множество в Турбо Паскале.

Множество является ещё одним структурным типом Турбо Паскаля, служащим для объединения однородных (однотипных) элементов. Однако форма объединения в Множество существенно отличается от типа Массив. Если в Массиве все элементы линейно упорядочены, то в Множестве - элементы неупорядочены. Понятие Множества в Паскале во многом похоже на конечное множество в дискретной математике и оказывается весьма удобным при решении многих задач управления, оптимизации, поиска и др. Паскаль - один из немногих языков программирования, поддерживающий тип Множество.

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

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

2. Описание типа Множество и константы-множества.

Формально тип Множество определяется в Паскале как тип, константами (значениями) которого являются все возможные подмножества из элементов базового типа, включая пустое множество. Базовым может быть порядковый тип или его тип-диапазон, содержащий не более 256 элементов, и каждый элемент которого имеет порядковый номер, не более 255. Описание типа Множество имеет форму:

type < имя типа-множества> = set of < базовый тип >;

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

type primes = set of 1..200; {множество простых чисел до 200}

var pr1, pr2: primes; { переменные типа primes}

Константы типа Множество должны быть заключены в квадратные скобки (не путайте квадратные скобки для индексации элементов массива - которые всегда записываются только после имени массива, с квадратными скобками, выделяющими константы-множества !).

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

[2] {множество из одного элемента 2}

[ 0, 2..5] {множество из элементов 0,2,3,4,5}

[1..200] {множество всех чисел базового типа 1..200}

Допускается использование обычных и типизированных констант-множеств, описание которых осуществляется с помощью конструктора множеств. Например:

const initset: set of 0..16 = [0,1,2,4,8,16]; const range=[2..100];

3. Обработка множеств.

Над множествами Паскаля определены теоретико-множественные операции и отношения.

Операции над множествами:

+ операция объединения множеств, результатом её является множество, содержащее элементы множеств-операндов и только их.

Например:[2] + [2..5] даёт множество [2..5];

* операция пересечения множеств, результатом её является множество, содержащее только элементы, общие для множеств-операндов (т.е. входящие во все множества-операнды);

Например: [1..200] *[0,2..5] даёт множество [2..5];

- операция разности множеств, результатом её является множество, содержащее элементы множества-первого операнда и не содержащее элементы множества-второго операнда;

Например: [1..200] - [0,2..5] даёт множество [1, 6..200];

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

Два множества считаются эквивалентными, если они имеют одинаковые элементы (порядок перечисления элементов безразличен).

Множество А включено в множество В, если все элементы из А являются также элементами множества В.

= проверка эквивалентности, даёт true , если оба множества эквиваленты и false - в противном случае. Например: [1..3] =[3,1,2] - даёт true.

<> проверка неэквивалентности, является отрицанием эквивалентности.

Например: [1..3] <> [3,2,1] - даёт false.

<= проверка включения левого операнда в правый, даёт true, если такое включение имеет место и false - в противном случае.

Например: [5] <= [1..5] - даёт true, а [0] <=[1..5] - даёт false.

>= проверка включения правого операнда в левый, даёт true, если такое включение имеет место и false - в противном случае.

Кроме отношений эквивалентности и включения имеется ещё отношение принадлежности элемента множеству. Это отношение имеет структуру:

< выражение базового типа> in < множество над этим базовым типом >

Данное отношение дает значение true, если первый операнд является элементом множества - второго-операнда и false - в противном случае.

Например: 3 in [1..5] - даёт true, а 0 in [1..5] - дает false.

Рассмотренные операции и отношения составляют основной набор средств для обработки множеств в программах. Они могут использоваться либо для построения условий, либо - непосредственно в операторах программы. Используя переменные, конструкторы, операции и отношения можно строить выражения типа множества. Для таких выражений допустимы операторы присваивания вида:

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

Например: pr1:= pr2; {копирование множества pr2 в pr1}

pr1:= []; {присваивание pr1 пустого множества}

pr1:= [1..200];{присваивание pr1 множества элементов от 1 до 200}.

Оператор присваивания совместно с операцией объединения или вычитания позволяет включать или исключать элементы из множества:

set1:=set1 + [a]; {включение элемента а в множество set1}

set2:= set2 - [d]; {исключение элемента d из множества set2}

Эти же действия выполняют стандартные процедуры include(set1,a) и exclude(set2,d) соответственно

4. Примеры использования множеств.

Рассмотрим примеры программ на Турбо Паскале с использованием множеств, иллюстрирующие технику обработки множеств.

program lat_letters;{Определение множества латинских букв в строке}

uses CRT;

var s:string; {исходная строка}

lat:set of 'A'..'Z'; {множество лат.букв}

k:char; j:byte;

begin TextBackground(cyan);TextColor(white);ClrScr;

 repeat writeln('Введите строку');readln(s);

 if s='' then writeln('Ошибка: пустая строка');

 until s<>'';lat:=[];for j:=1 to length(s) do if upcase(s[j]) in ['A'..'Z'] then

lat:=lat+[upcase(s[j])];if lat=[] then writeln('В строке нет латинских букв') else

begin writeln('Латинские буквы:'); for k:='A' to 'Z'do if k in lat then write(k,' ') end;

end { lat_letters}.

 end {sieve}.

Использование множеств в ряде случаев позволяет получать более простые тексты программ, "маскирующие" дополнительные циклы обработки. Например, в программе lat_letters таким "замаскированным циклом" является условие upcase(s[j]) in ['A'..'Z'], которое при отсутствии множеств, потребовало бы для реализации функцию с циклом по типу-диапазону 'A'..'Z'.

Задача 4.2.6(2)

program alex2;

type mas=array[1..5,1..4]of integer;

mass=array[1..5]of integer;

var a:mas;

i,j,y:integer;

m:mass;

procedure proc(x:mas;k:integer;var min:integer);

var i:integer;

begin

min:=x[k,1];

for i:=2 to 4 do

if x[k,i]<min then min:=x[k,i];

end;

begin

for i:=1 to 5 do

for j:=1 to 4 do

read(a[i,j]);

for i:=1 to 5 do

proc(a,i,m[i]);

y:=5*m[1]+4*m[2]+3*m[3]+2*m[4]+1*m[5];

writeln('y=',y);

 readln;

end.


 

А также другие работы, которые могут Вас заинтересовать

32782. ОПРЕДЕЛЕНИЕ ПЛОТНОСТИ ЖИДКОСТИ ПРИ ПОМОЩИ КАТЕТОМЕТРА 1.2 MB
  ЦЕЛЬ И МЕТОД РАБОТЫ научиться работать с катетометром В 630; определить плотность жидкости с помощью катетометра используя метод сообщающихся сосудов. ТЕОРЕТИЧЕСКОЕ ВВЕДЕНИЕ Плотность жидкости можно определить с помощью сообщающихся сосудов. 1 поверх жидкости известной плотности  наливают в оба колена исследуемую жидкость неизвестной плотности .
32783. ОПРЕДЕЛЕНИЕ УНИВЕРСАЛЬНОЙ ГАЗОВОЙ ПОСТОЯННОЙ 532 KB
  ОСНОВНЫЕ ТЕОРЕТИЧЕСКИЕ ПОЛОЖЕНИЯ На базе экспериментальных законов БойляМариотта ГейЛюссака Шарля Клапейрон установил что для разреженных газов выполняется соотношение 1 где P – давление газа Па V – объем газа м3 T – абсолютная температура К C – газовая постоянная зависящая от массы газа.=1013105 Па и T=273 К один моль любого газа занимает один и тот же объем равный =224 литра=224102 м3 поэтому для одного моля газа из соотношения 1 получаем: или 2 где величина R=831 одинакова для всех...
32784. ОПРЕДЕЛЕНИЕ ОТНОШЕНИЯ ТЕПЛОЁМКОСТЕЙ ДЛЯ ВОЗДУХА 256.5 KB
  Избыток давления воздуха в Рис. Пусть при состоянии 1 в баллоне объемом V масса воздуха равна m. Масса воздуха m занимала перед открытием крана К2 объем V1 где V1 V.
32785. Определение ускорения свободного падения при помощи машины Атвуда 569.5 KB
  Северодвинске Факультет: № 4 Кафедра: № 12 Лабораторная работа Определение ускорения свободного падения при помощи машины Атвуда г. Северодвинск 2007 Лабораторная работа ФМ 11 Определение ускорения свободного падения при помощи машины Атвуда 1. Цель и метод: С помощью машины Атвуда исследовать законы кинематики и научиться экспериментально определять ускорение свободного падения. Законы свободного падения тел открыл итальянский физик Галилео Галилей 1564 ― 1642.
32786. Изучение законов колебания математического и физического маятников 251.5 KB
  Определить положение центра масс физического маятника. Отклонение маятника от положения равновесия будем характеризовать углом образованным нитью с вертикалью рис. При отклонении маятника от положения равновесия возникает вращательный момент силы тяжести равный по модулю произведению силы mg на её плечо = l sin : M = mgl sin где m масса; l длина маятника. 1 Напишем для маятника уравнение динамики вращательного движения обозначив угловое...
32787. Происхождение, сущность и социальные функции науки 15.93 KB
  Наука – исторически сложившаяся форма духовнопрактического освоения мира направленная на познание и преобразование объективной действительности. Понятие наука имеет несколько аспектов: 1 система знаний 2 их духовное производство 3 практическая деятельность на их основе4 социальный институт. Этот аспект подчеркивает социальную сущность науки: наука как социальный институт представляет собой систему взаимосвязей между научными коллективами организациями членами научных сообществ а также систему норм и ценностей. Наука прошла...
32788. Особенности научного познания 14.79 KB
  Особенности научного познания. Цель научного познания – открытие объективных законов природы общества мышления постижение сущности изучаемых явлений. Объективность – адекватное отражение действительности не зависящее от субъекта познания. Наличие методологии познания.
32789. Уровни и методы научного познания 14.54 KB
  Уровни и методы научного познания. В научном познании используются разнообразные методы. Метод греч. Учение о методах – методология ее предметом является обоснование методов исследование их эффективности особенностей применения в различных областях знания.
32790. Диалектика, её исторические формы. Диалектика и метафизика 15.42 KB
  Диалектика и метафизика. диалектика – это учение о всеобщих связях и закономерностях развития природы общества и мышления а также основанный на этом учении метод познания. Диалектика как теория и метод познания в своем историческом развитии прошла несколько этапов. Наивная или стихийная диалектика античности.