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.


 

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

84468. ЛАКИРОВАНИЕ В ПОЛИГРАФИЧЕСКОМ ПРОИЗВОДСТВЕ. ВОЗМОЖНОСТИ И ОБЛАСТЬ ПРИМЕНЕНИЯ 133.59 KB
  ВОЗМОЖНОСТИ И ОБЛАСТЬ ПРИМЕНЕНИЯ С появлением высокоскоростных офсетных машин развитием флексографской и трафаретной печати лакирование в полиграфическом производстве используют повсеместно чаще и чаще ведь при небольшом удорожании тиража расход лака в зависимости от способа нанесения и вида лака от 15г м2 влажного при цене от 2 до 15Е кг лакирование позволяет: Защитить печатный оттиск истирание агрессивные среды Придать оттиску новые декоративные свойства глянец матовый эффект металлический блеск перламутр флуоресценция ...
84469. ВОДНОДИСПЕРСИОННЫЕ ЛАКИ 46.83 KB
  Сразу после нанесения лака на печатный оттиск частицы полимера растворенные в водной суспензии при испарении воды выпадают на поверхности основы и абсорбируются бумагой. Поэтому перед нанесением на оттиски температуру лака необходимо довести до комнатной чтобы обеспечить его хорошую адгезию к основе. Температура воднодисперсионных лаков ниже указанной может отрицательно сказаться на смачиваемости поверхности и привести к снижению адгезии лака. При двустороннем лакировании печатных оттисков воднодисперсионными лаками рекомендуется соблюдать...
84470. УФ-ЛАКИРОВАНИЕ В ПОЛИГРАФИИ 121.57 KB
  Преимущества технологии УФлака состоят в следующем: ярко выраженный декоративный эффект; повышенная стойкость к истиранию; повышенная химическая стойкость; хорошая адгезия к большинству субстратов; мгновенное высыхание К недостаткам технологии УФлакирования можно отнести следующее: УФлаки агрессивны; при работе УФламп выделяется озон; технология требует специального оборудования; лаковая пленка сохраняет запах за исключением лаков катионной полимеризации. Их применяют для изготовления упаковки с использованием...
84471. УФ-ЛАКИРОВАНИЕ «В ЛИНИЮ» ПО ТРАДИЦИОННЫМ ОФСЕТНЫМ КРАСКАМ: ОСОБЕННОСТИ И ПЕРСПЕКТИВЫ 44.64 KB
  На первый взгляд вариант выглядит очень привлекательно: нет нужды использовать дорогие и сложные в работе УФотверждаемые краски отсутствует экономия лишний прогон для нанесения УФлака. Оборудование и принцип Для реализации технологии требуется листовая офсетная машина с двумя лакировальными модулями. Стандартная комплектация включает: необходимое количество красочных секций часто с промежуточным одним или двумя модулями ИК сушки; модуль ИКсушки после красочных секций; лакировальную секцию для нанесения грунтовочного...
84472. СПЕЦИАЛЬНЫЕ ЛАКИ В ПОЛИГРАФИИ 38.36 KB
  Наибольшее распространение получили лаки придающие оттиску особые физикохимические свойства в том числе повышенную стойкость к какимлибо разрушающим факторам: воздействию света высоких и низких температур влаги различных химических реагентов абразивных материалов и т. В рамках этой группы специальных лаков следует отдельно рассмотреть так называемые барьерные лаки. Барьерные лаки позволяют получить эти свойства при нанесении на оборотную сторону картона.
84473. ПОСЛЕПЕЧАТНЫЕ ОТДЕЛОЧНЫЕ ПРОЦЕССЫ 41.66 KB
  Бывает в этот момент выясняется что завершить исполнение заказа невозможно: заготовка не склеивается на ней появляются разрывы или краска смазывается с бумаги вариантов может быть много. Название технологии говорит само за себя: при скреплении корешка книжного блока и вставке в обложку используются только клеи и не происходит шитьё нитками или проволокой. В данном способе обычно используются клеирасплавы реже на водной основе. Необходимо отметить что эти клеи могут различаться жёсткостью плёнки открытым временем схватывания...
84474. КОНТРОЛЬ КАЧЕСТВА В ПОЛИГРАФИЧЕСКОМ ПРОИЗВОДСТВЕ 48.95 KB
  Наиболее популярный вискозиметр Brookfield ISO 2555 известен также Conne nd Plte ISO 2884 STM 4287 KrebsStormer STM D 562 Hoppler. Её аналоги: DIN 4 DIN 5321187 и UNE ISO DIN 2431. Для густых красок используется вискозиметр падающего стержня ISO 126441996.
84475. АДГЕЗИЯ В ПОЛИГРАФИИ 286.49 KB
  Технолог вместе с печатниками экспериментируют с настройками машины и различными лаками пытаясь добиться необходимой адгезии и спасти тираж. Рисунок 1 Рисунок 2 Плохая адгезия лак Прибор для измерения адгезии К сожалению часто бывает непонятно почему же он не держится Все кто занимается УФлакированием сталкиваются с проблемой адгезии УФлака рис. В процессе лакирования печатник должен контролировать адгезию УФлака тестом на скотч и тестом на ноготь. Недостаточное высыхание лака Если между слоем высохшего лака и подложкой окажется...
84476. АНТИКРИЗИСНЫЕ ГРУНТЫ ДЛЯ УФ-ПЕЧАТИ ПО ПЛЁНКАМ И МЕТАЛЛИЗИРОВАННЫМ ОСНОВАМ 457.58 KB
  Причина возникшей проблемы была связана с необходимостью использовать более дешевые запечатываемые материалы не прошедшие специальной обработки для УФпечати. Современные машины для флексографской печати УФкрасками редко оснащены секцией для нанесения грунта на основе растворителей поэтому типографии вынуждены наносить сольвентное покрытие на плёнку отдельно. Появление эффективных УФгрунтов решило бы много проблем благодаря возможности печати в линию на стандартном оборудовании.