Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
IT-2_P_2.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
122.65 Кб
Скачать

Лабораторная работа 17 «Сложные типы данных. Множества»

Цель работы:

Изучение сложных типов данных.

Порядок выполнения работы:

  1. Изучить теоретическую часть работы;

  2. Ответить на контрольные вопросы и разобрать примеры;

  3. Выполнить все задачи для самостоятельного выполнения.

Тип "множество" является одним из сложных типов данных системы программирования Turbo Pascal 7.0.

Тип "множество" является множеством всевозможных сочетаний объектов исходного порядкового типа. Число элементов исходного множества в Turbo Pascal не должно превышать 256. Все значения базового типа, образующие конкретные значения множественного типа, должны быть различны. Порядок "расположения" элементов в множестве никак не фиксируется. Это соответствует принятой в математике трактовке множества как бесповторной неупорядоченной совокупности объектов.

Для задания типа "множество" следет использовать служебные слова set и of, а затем указать элементы этого множества, как правило, в виде перечисления или диапазона, например:

Type

Alfa = set of 'A'..'Z';

Ten = set of 0..9;

Count = set of (Plus, Minus);

Введя тип "множество", можно задать переменные этого типа.

Var

CAlfa: Alfa;

U233: Ten;

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

Var

CAlfa: set of 'A'..'Z'

Operation: set of (Plus, Minus);

U233: set of 0..9;

C: set of char;

Множеству можно в программе присвоить то или иное значение. Обычно значение задаётся с помощью так называемого конструктора множества. Конструктор задаёт множество элементов с помощью перечисления в квадратных скобках выражений, значения которого дают элементы этого множества. Допустимо использовать диапазоны элементов.

CAlfa := ['A', 'B', 'C'];

C := [chr(0)..chr(31), 'D', 'F'];

В каждое множество включается и т.н. пустое множество [], не содержащее никаких элементов. Конструктор множества можно использовать и непосредственно в операциях над множествами.

Так же как и в математике в системе программирования Turbo Pascal 7.0 над множествами применимы следующие операции:

+ - объединение множеств. C:=A+B; Каждый элемент множества C является элементом либо множества A, либо множества В.

/-/ - разность множеств. C:= A-B; Каждый элемент множества C является элементом множества A, но не является элементом множества В.

* - пересечение множеств. C := A*B; Каждый элемент множества C является элементом множества A и B одновременно.

['A','B'] + ['A','D'] даст ['A','B','D']

['A'] * ['A','B','C'] даст ['A']

['A','B','C'] - ['A','B'] даст ['C'].

= - проверка эквивалентности двух множеств. A = B; Множество A равно множеству B, если каждый элемент множества A является элементом множества B, и наоборот, каждый элемент множества B является элементом множества A. Результат операции логическая величина.

<> - проверка неэквивалентности двух множеств. A <> B; Множество A не равно множеству B, если множество A содержит хотя бы один элемент, не являющийся элементом множества B, или (и) наоборот, множество B содержит хотя бы один элемент, не являющийся элементом множества A. Результат операции логическая величина.

<= - проверка, является ли левое множество подмножеством правого. A <= B; Множество A является подмножеством множества B, если все элементы множества A являются элементами множества B. Результат операции логическая величина.

>= - проверка, является ли правое множество подмножеством левого. A >= B; Действие операции аналогично действию предыдущей операции. Результат операции логическая величина.

in - проверка, входит ли элемент (слева) в множество (справа). C in B; Результат операции логическая величина.

['A','B'] = ['A','C'] даст FALSE

['A','B'] <> ['A','C'] даст TRUE 

['B'] <= ['B','C'] даст TRUE

['C','D'] >= ['A'] даст FALSE.

A in ['A', 'B'] даст TRUE,

2 in [1, 3, 6] даст FALSE.

Примеры программ.

Из множества целых чисел 1..20 выделить: множество чисел, делящихся на 6 без остатка; множество чисел делящихся на 2 или на 3 без остатка. Вывести содержимое этих множеств на экран.

Program a6_23;

Var

N6 : set of integer; {множество чисел, делящихся на 6}

N23 : set of integer; {множество чисел, делящихся на 2 и 3}

k: integer; {параметр цикла с параметром}

Begin

N6 := []; {"обнуление" множества N6}

N23 : = []; {"обнуление" множества N23}

{ формирование множеств}

For k:=1 to 20 do begin

if k mod 6 = 0 then N6 := N6 + [k];

if (k mod 2 = 0) or (k mod 3 = 0) then N23 := N23 + [k];

end;

{ вывод содержимого множеств}

Writeln(' На 6 без остатка делятся числа: ');

for k:=1 to 20 do

if k in N6 then write(k:3);

Writeln;

Writeln(' На 2 или 3 без остатка делятся числа: ');

for k:=1 to 20 do

if k in N6 then write(k:3);

Readln; { пауза }

End.

Ввести строку символов, состоящую из латинских букв цифр и пробелов. Осуществить проверку правильности введённых символов.

Program Verify_string;

Var

s: string;

m: set of char;

k: integer;

Done: boolean;

Begin

{ формирование контрольного множества символов}

m := [ '0'..'9', 'A'..'Z', 'a'..'z', ' '];

{ ввод строки}

Writeln(' Введите строку: ');

Readln(s);

{ проверка правильности строки}

done := true;

for k:=1 to Length(s) do

if not (s[k] in m) then done := false;

{ вывод результата}

if done then writeln('Правильная строка. ');

else writeln('Неправильная строка. ');

Readln; { пауза }

End.

Составить программу, которая вырабатывает и выводит на экран дисплея наборы случайных чисел для игры в "Спортлото 5 из 36". Для заполнения каждой карточки спортлото необходимо получить набор из пяти псевдослучайных чисел. К этим числам предъявляются два требования:

– числа должны находиться в диапазоне 1…36;

– числа не должны повторяться.

Program Lotto; Var nb, k: Set of 1..36; kol, l, i, n: Integer;

Begin Randomize; WriteLn('ВВЕДИ kol'); ReadLn(kol); nb:=[1..36]; for i:=1 to kol do begin k:=[]; for l:=1 to 5 do begin repeat n:=Random(36) until (n in nb) and not (n in k); k:=k+[n]; Write(n:4) end; WriteLn end End.

Контрольные вопросы:

  1. Какие типы данных являются сложными?

  2. Что такое множества?

  3. Приведите пример применения множеств при решении реальных задач машиностроения.

Задания для самостоятельного выполнения

1. Из множества целых чисел 1..100 выделить множество чисел на которые делится без остатка число 444. Вывести это множество на экран.

2. Из множества латинских букв выделить множество состоящее из символов не входящих в множество символов составляющих ваше имя. Вывести это множество на экран.

Евгений Александрович Ледников,

Александр Васильевич Емельянов.

Информационные технологии.

В 2-х ч.: Часть 2 – Программирование в среде Turbo Pascal.

методические указания к лабораторным занятиям

для бакалавров I курса направления 150301 – «Машиностроение».

Издано в авторской редакции.

Подписано в печать 29.01.2015 г. Формат 6084 1/16.

Печать – ризография. Усл. печ. лист. 4,42. Тираж 35 экз.

Издательство Алтайского государственного технического

университета им. И.И. Ползунова, 656038, Барнаул,

пр. Ленина, 46.

Лицензия на издательскую деятельность

ЛР № 020822 от 21.09.1998 г.

Лицензия на полиграфическую деятельность

ПДЛ № 28-35 от 15.07.1997 г.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]