СДЕЛАЙТЕ СВОИ УРОКИ ЕЩЁ ЭФФЕКТИВНЕЕ, А ЖИЗНЬ СВОБОДНЕЕ

Благодаря готовым учебным материалам для работы в классе и дистанционно

Скидки до 50 % на комплекты
только до

Готовые ключевые этапы урока всегда будут у вас под рукой

Организационный момент

Проверка знаний

Объяснение материала

Закрепление изученного

Итоги урока

Множества в паскале

Категория: Информатика

Нажмите, чтобы узнать подробности

Данная разработка применялась на уроке информатики.

Просмотр содержимого документа
«Множества в паскале»

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

Множественный тип данных

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

Базовый тип это совокупность значений, из которых могут быть образованы множества.  В качестве базового типа может быть использован любой тип, кроме вещественного. Значение переменной множественного типа может содержать любое количество различных элементов базового типа – от нуля элементов (пустое множество) до всех возможных значений базового типа (всего может быть не более 256 различных элементов).

Базовый тип

  • это совокупность значений, из которых могут быть образованы множества. В качестве базового типа может быть использован любой тип, кроме вещественного.

Значение переменной множественного типа может содержать любое количество различных элементов базового типа – от нуля элементов (пустое множество) до всех возможных значений базового типа (всего может быть не более 256 различных элементов).

Описание  В разделе описания типов: Type  = set of ; Var : ; В разделе описания переменных: Var : set of ; Пример :  Type mnog_char = set of char; Var mn1: mnog_char;  mn2: set of char;  mn3: set of ‘A’..’Z’;  s1: set of byte;  s2: set of 1000 .. 1200;

Описание

  • В разделе описания типов:

Type = set of ;

Var : ;

  • В разделе описания переменных:

Var : set of ;

  • Пример :

Type mnog_char = set of char;

Var mn1: mnog_char;

mn2: set of char;

mn3: set of ‘A’..’Z’;

s1: set of byte;

s2: set of 1000 .. 1200;

Формирование множеств В программе элементы множества задаются в квадратных скобках, через запятую. Если элементы идут подряд друг за другом, то можно использовать диапазон. Пример: Type digit = set of 1..5; Var s: digit; Переменная s может принимать значения, состоящие из любой совокупности целых чисел от 1 до 5: [ ] – пустое множество; [1], [2], [3], [4], [5] - одноэлементные множества; [1,2],…[4,5] – двухэлементные; [1, 2, 3] – трехэлементное; [1, 2, 3, 4],… [2, 3, 4, 5] – четырехэлементные; [1, 2, 3, 4, 5] – полное множество (взяты все элементы базового типа)

Формирование множеств

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

  • Пример:

Type digit = set of 1..5;

Var s: digit;

Переменная s может принимать значения, состоящие из любой совокупности целых чисел от 1 до 5:

[ ] – пустое множество;

[1], [2], [3], [4], [5] - одноэлементные множества;

[1,2],…[4,5] – двухэлементные; [1, 2, 3] – трехэлементное;

[1, 2, 3, 4],… [2, 3, 4, 5] – четырехэлементные;

[1, 2, 3, 4, 5] – полное множество (взяты все элементы базового типа)

Операции над множествами Объединением двух множеств называется множество элементов, принадлежащих обоим множествам. Знак операции – « + ».   Примеры: [‘A’, ’F’] + [‘B’, ’D’] = [‘A’,’F’,‘B’, ’D’]; [1..3, 5, 7, 11] + [3..8,10, 12, 15..20] = [1..8, 10..12, 15..20]; A1:=[‘a’, .. ‘z’]; A1:= A1 + [‘A’]; - к множеству A1 добавляем элемент.  Тогда A1 = [‘A’, ‘a’ .. ‘z’]; А + В В А

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

  • Объединением двух множеств называется множество элементов, принадлежащих обоим множествам. Знак операции – « + ».
  • Примеры:
  • [‘A’, ’F’] + [‘B’, ’D’] = [‘A’,’F’,‘B’, ’D’];
  • [1..3, 5, 7, 11] + [3..8,10, 12, 15..20] = [1..8, 10..12, 15..20];
  • A1:=[‘a’, .. ‘z’]; A1:= A1 + [‘A’]; - к множеству A1 добавляем элемент. Тогда A1 = [‘A’, ‘a’ .. ‘z’];

А + В

В

А

Операции над множествами Пересечением двух множеств называется множество элементов, принадлежащих одновременно и первому, и второму множеству, т.е. это общие элементы. Знак операции – « * ». Примеры: [‘A’, ’F’] * [‘B’, ’D’] =[ ] – так как общих элементов нет ; [1..3, 5, 7, 11] * [3..8,10, 12, 15..20] = [ 3, 5, 7 ]; S1:=[1 .. 5, 9]; S2:= [3 .. 7, 12]; S:= S1 * S2;  то результат выполнения S =[3 .. 5];

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

Пересечением двух множеств называется множество элементов, принадлежащих одновременно и первому, и второму множеству, т.е. это общие элементы. Знак операции – « * ».

  • Примеры:
  • [‘A’, ’F’] * [‘B’, ’D’] =[ ] – так как общих элементов нет ;
  • [1..3, 5, 7, 11] * [3..8,10, 12, 15..20] = [ 3, 5, 7 ];
  • S1:=[1 .. 5, 9]; S2:= [3 .. 7, 12]; S:= S1 * S2;

то результат выполнения S =[3 .. 5];

Операции над множествами Вычитанием двух множеств называется множество, состоящее из тех элементов первого множества, которые не являются элементами второго множества. Знак операции – « - ». Примеры: [‘A’, ’F’] - [‘B’, ’D’] =[‘A’, ‘F’ ] – так как общих элементов нет ; [1..3, 5, 7, 11] - [3..8,10, 12, 15..20] = [1 .. 2, 11]; S1:=[1 .. 5, 9]; S2:= [3 .. 7, 12]; S:= S1 - S2;  то результат выполнения S =[1 .. 2, 9];

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

Вычитанием двух множеств называется множество, состоящее из тех элементов первого множества, которые не являются элементами второго множества. Знак операции – « - ».

  • Примеры:
  • [‘A’, ’F’] - [‘B’, ’D’] =[‘A’, ‘F’ ] – так как общих элементов нет ;
  • [1..3, 5, 7, 11] - [3..8,10, 12, 15..20] = [1 .. 2, 11];
  • S1:=[1 .. 5, 9]; S2:= [3 .. 7, 12]; S:= S1 - S2;

то результат выполнения S =[1 .. 2, 9];

true , т.к 5 принадлежит [3 .. 7]; ‘ a’ in [‘A’ ..’Z’] = false , т.к. маленькой латинской буквы ‘a’ нет среди больших латинских букв. Примечание. Оператор вида: if (ch=‘a’) or (ch=‘b’) or (ch=‘x’) or (ch=‘y’) then s; может быть переписан в компактной наглядной форме: if ch in [‘a’,’b’,’x’,’y’] then s; " width="640"

Операция определения принадлежности элемента множеству

in – служебное слово. Логическая операция имеет результат true , если значение входит в множество и false в противном случае.

  • Примеры:

5 in [3 .. 7] = true , т.к 5 принадлежит [3 .. 7];

a’ in [‘A’ ..’Z’] = false , т.к. маленькой латинской буквы ‘a’ нет среди больших латинских букв.

Примечание. Оператор вида:

if (ch=‘a’) or (ch=‘b’) or (ch=‘x’) or (ch=‘y’) then s;

может быть переписан в компактной наглядной форме: if ch in [‘a’,’b’,’x’,’y’] then s;

. Результат - true или false . A ≤ B true true false A false true false " width="640"

Сравнение множеств

Используются операции отношения:

= , , =, . Результат - true или false .

A ≤ B

true

true

false

A

false

true

false

Пример Составить программу выделения из множества целых чисел от 1 до 30 следующих множеств: множества чисел кратных 2; множества чисел кратных 3; множества чисел кратных 6; множества чисел кратных 2 или 3;  Вопросы: Сколько множеств надо описать? Какого они типа? Какое первоначальное значение множеств? Как формируются множества? Как осуществить вывод сформированных множеств? 4 множества типа byte  - пустое множество Первые два – перебором всех чисел данного промежутка и занесением необходимых, третье и четвертое – из первых двух путем применения операций пересечения и объединения Вывод делается только поэлементно, поэтому удобно составить процедуру, которой передается множество, элементы которого и будут выдаваться на экран. Для этого в разделе типов надо создать тип множества и его использовать в дальнейшем.
  • Пример

Составить программу выделения из множества целых чисел от 1 до 30 следующих множеств:

  • множества чисел кратных 2;
  • множества чисел кратных 3;
  • множества чисел кратных 6;
  • множества чисел кратных 2 или 3;

Вопросы:

  • Сколько множеств надо описать? Какого они типа?
  • Какое первоначальное значение множеств?
  • Как формируются множества?
  • Как осуществить вывод сформированных множеств?
  • 4 множества типа byte
  • - пустое множество
  • Первые два – перебором всех чисел данного промежутка и занесением необходимых, третье и четвертое – из первых двух путем применения операций пересечения и объединения
  • Вывод делается только поэлементно, поэтому удобно составить процедуру, которой передается множество, элементы которого и будут выдаваться на экран. Для этого в разделе типов надо создать тип множества и его использовать в дальнейшем.

program Ex1; const n=30; type mn=set of 1..n; var n2,n3,n6,n23: mn; {n2 – множество чисел кратных 2, }   {   n3 - кратных 3} k:integer; { n6 - кратных 6, n23 - кратных 2 или 3} procedure Print(m:mn); var i:integer; Begin  for i:=1 to n do If i in m then write(i:3);  writeln; end;

program Ex1;

const n=30;

type mn=set of 1..n;

var n2,n3,n6,n23: mn; {n2 – множество чисел кратных 2, } { n3 - кратных 3}

k:integer; { n6 - кратных 6, n23 - кратных 2 или 3}

procedure Print(m:mn);

var i:integer;

Begin

for i:=1 to n do If i in m then write(i:3);

writeln;

end;

begin  n2:=[ ]; n3:=[ ]; {начальное значение множества}  for k:=1 to n do { формирование n2 и n3}  begin  if k mod 2=0 then n2:=n2+[k];  if k mod 3=0 then n3:=n3+[k]  end;  n6:=n2*n3;{числа кратные 6, это те, которые кратны и 2, и  3 ,} { поэтому это пересечение двух первых множеств}  n23:=n2+n3;  {а числа кратные 2 или 3 – это объединение этих же множеств}  writeln(‘числа, кратные 2'); print(n2);  writeln(' числа, кратные 3'); print(n3);  writeln(' числа, кратные 6'); print(n6);  writeln(' числа, кратные 2 или 3'); print(n23);  readln; end.

begin

n2:=[ ]; n3:=[ ]; {начальное значение множества}

for k:=1 to n do { формирование n2 и n3}

begin

if k mod 2=0 then n2:=n2+[k];

if k mod 3=0 then n3:=n3+[k]

end;

n6:=n2*n3;{числа кратные 6, это те, которые кратны и 2, и 3 ,} { поэтому это пересечение двух первых множеств}

n23:=n2+n3; {а числа кратные 2 или 3 – это объединение этих же множеств}

writeln(‘числа, кратные 2'); print(n2);

writeln(' числа, кратные 3'); print(n3);

writeln(' числа, кратные 6'); print(n6);

writeln(' числа, кратные 2 или 3'); print(n23);

readln;

end.

Задание. Изменить программу так, чтобы результатом ее работы являлось множество чисел, делящихся на 3, но не делящихся на 2.

Задание.

Изменить программу так, чтобы результатом ее работы являлось множество чисел, делящихся на 3, но не делящихся на 2.

Задача. Дано натуральное число n .составить программу, печатающую все цифры, не входящие в десятичную запись данного натурального числа в порядке возрастания.

Задача.

Дано натуральное число n .составить программу, печатающую все цифры, не входящие в десятичную запись данного натурального числа в порядке возрастания.

program ex3; type mn=set of 0..9; var s:mn; n:longint; l,k:integer; begin  write(‘Введите число N '); readln(n);  s:=[ ];  { формирование множества цифр десятичной записи числа   n }  while n0 do  begin  k:=n mod 10; n:=n div 10;  if not (k in s) then s:=s+[k];  end;  { вывод цифр в порядке возрастания}  for k:=0 to 9 do  if not (k in s) then write(k:2);  writeln;  readln end.

program ex3;

type mn=set of 0..9;

var s:mn; n:longint; l,k:integer;

begin

write(‘Введите число N '); readln(n);

s:=[ ]; { формирование множества цифр десятичной записи числа   n }

while n0 do

begin

k:=n mod 10; n:=n div 10;

if not (k in s) then s:=s+[k];

end;

{ вывод цифр в порядке возрастания}

for k:=0 to 9 do

if not (k in s) then write(k:2);

writeln;

readln

end.

Другие задачи

Другие задачи