ТЕМА: "МНОЖЕСТВА".

Ход урока.

  1. Организационный момент.
  2. Работа в группах.
  3. Подведение итогов.
  4. Домашнее задание.

ТЕОРЕТИЧЕСКИЙ МАТЕРИАЛ К УРОКУ.

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

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

Постоянные множества и в математике и в Паскале задаются перечнем их элементов.

Математика
Паскаль
{1,2,3}
{'A','K','B','L'}

{1,2,...,N}
[1,2,3]
['A','K','B','L']
пустое множество []
[1..N]

В квадратных скобках могут находиться не только константы, но любые выражения типа элементов множества, например, [2++x,8-3].

К множествам применимы следующие операции.

объединение С=АВ
пересечение С=АВ
разность С=А\В

Под множеством в языке паскаль понимают ограниченный, неупорядоченный набор различных элементов одинакового типа. Можно, например говорить о множестве радиодеталей, транспортных средств, станков и т.д. всему множеству в целом дается имя. Тип элементов, входящих в множество, называется базовым. В качестве базового типа можно использовать простые типы: стандартный (кроме действительного), перечисляемый и ограниченный. Множества должны быть объявлены в var или type.

var имя множества: set of базовый элемент;

Например:

var god: set of 1880..2000; c: set of char;
type имя типа= set of базовый элемент;
var имя множества: имя типа;
set of 'a'..'z' - множество прописных английских букв;
set of 1..100 - множество целых чисел от 1 до 100;
set of (winter, spring, summer, outumn) - множество времен года
set of char - множество всех символов.

В языке паскаль имеются следующие операции над множествами:

+ - объединение множеств;
* - пересечение множеств;
- - вычитание множеств;
=,<> - проверка множеств на равенство, неравенство;
<=,>= - проверка множеств на включение;
in - проверка на принадлежность элемента множеству ( c in a).

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

Пример: var x: set of 1..15;

Внутреннее представление X

x:=[]; 000000000000000>
x:=[2,3,5]; 011010000000000>
x:=[1..15]; 111111111111111>

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

x:=[2,3,5]; 011010000000000>
y:=[3,5,7,8]; 001010110000000>
z:=x+y; 011010110000000>

Поразрядные документы входят в набор команд процессора ЭВМ, поэтому выполняется быстро.
Средства работы с множествами позволяют в некоторых случаях сократить программы и сделать их более наглядными и эффективными за счет уменьшения числа проверок.

Задача №1. Имеются три множества символьного типа, которые заданы своими конструкторами: Y1=['A','B','D','R','M']; Y2=['R','A','H','D']; Y3=['A','R']; Сформировать новое множество: X=(Y1*Y2)+(Y1\Y2). Вывести на печать полученное множество x, проверить, включено ли y3 во множество x. (файл MNOG1.PAS)

Решение.

program mnog1;
var y1,y2,y3,x: set of char;
c:char;
begin
y1:=['a','b','d','r','m'];
y2:=['r','a','h','d'];
y3:=['a','r'];
x:=(y1*y2)+(y1-y2);
write('множество x=');
for c:='a' to 'r' do
if c in x then write(c);
writeln;
if y3<=x then write('y3 включено в x')
else write('y3 не включено в x');
end.

Задача №2. Из множества целых чисел 1..20 выделить: множество чисел, делящихся без остатка на 6; множество чисел, делящихся без остатка или на 2, или на 3. (файл MNOG2.PAS).

Решение.

program mnog2;
const n=20;
var n2,n3,n6,n23: SET OF 1..N;
k:1..N;
begin
n2:=[ ]; n3:=[ ];
for k:=2 to n do
begin
if (k mod 2)=0 then n2:=n2+[k];
if (k mod 3)=0 then n3:=n3+[k];
end;
n6:=n2*n3;
n23:=n2+n3;
writeln('на 6 делятся числа:');
for k:=1 to n do
if k in n6 then write(k:3);
writeln;
writeln('на 2 или на 3 делятся числа:');
for k:=1 to n do
if k in n23 then write(k:3);
end.

Задача №3. Дан текст (например, 5a7233111bge2257cde.) Признаком конца текста является точка. Вывести на экран цифры, которые встречаются в тексте. (файл MNOG3.PAS).

Решение.

program mnog3;
var z: SET OF 0..9;
k,i:integer;
si:char;
begin
readln;
write('=>');
z:=[ ];
repeat
read(si);
k:=ord(si)-ord('0');
if k in [0..9] then z:=z+[k]
until si='.';
if z=[ ] then writeln ('В тексте нет цифр')
else begin
write('В тексте имеются следующие цифры:');
for i:=1 to 9 do
if i in z then write (i:2);
writeln;
end;
end.

Задача №4. Известен набор продуктов - хлеб, масло, сыр, молоко, имеющихся в ассортименте магазинов. В три магазина доставлены отдельные виды этих продуктов. Требуется построить множества a,b,c, которые содержат соответственно:
- продукты, имеющиеся одновременно во всех магазинах;
- продукты, имеющиеся по крайней мере в одном из магазинов;
- продукты, которых нет ни в одном из магазинов.

Решение. файл MNOG4.PAS).
program mnog4;
uses crt;
const n=3;
type
produkt=(xleb,maslo,sir,moloko);
accort=set of produkt;
magazin=array[1..n] of accort;
var m1:magazin;
x:produkt;
a,b,c,xm1:accort;
i,j,iw,m:integer;
begin clrscr;
for i:=1 to n do
begin xm1:=[ ];
writeln('Вводи номера продуктов',i:2,'-го магазина=');
repeat
read(iw);
case iw of
1: x:=xleb;
2: x:=maslo;
3: x:=sir;
4: x:=moloko;
end;
xm1:=xm1+[x];
until eoln;
m1[i]:=xm1;
end;
a:=m1[1]; b:=[]; c:=[xleb..moloko];
for i:=1 to n do
begin b:=b+m1[i];
a:=a*m1[i];
c:=c-b;
end;
for i:=1 to n do
begin
case i of
1: writeln('продукты, имеющиеся одновременно во всех магазинах');
2: writeln('ассортимент продуктов');
3: writeln('продукты, которых нет ни в одном магазине');
end;
for x:=xleb to moloko do
if x in a then
case x of
xleb: write('хлеб');
maslo:write('масло');
sir: write('сыр');
moloko:write('молоко');
end;
if i=1 then a:=b else a:=c;
writeln;
end;
end.

Задача №5. Сформировать множество, в которое входят только латинские буквы, встретившиеся во входной строке, и множество знаков препинания из входной строки. (Самостоятельно!)

program mnog5;
var LB: SET OF 'a'..'z'; PR: SET OF '!'..'?'; C,I,J:char;
begin
readln;
write('=>');
LB:=[ ]; PR:=[ ];
repeat
read(C);
if C in ['a'..'z'] then LB:=LB+[C] ELSE IF C IN ['!',';',':','.',',','?']
THEN PR:=PR+[C]
until EOLN;
writeLN('Латинские буквы:');
for i:='a' to 'z' do
if i in lb then write (i:2);
writeln;
writeln('знаки препинания');
for j:='!' to '?' do
if j in pr then write(j:2);
end.

Задание для работы в группах по теме "Множества"

  1. Найдите ответ на вопрос "Какие структуированные типы данных существуют в Паскале?". Расскажите устно друг другу ответ на вопрос.
  2. Найдите ответ на вопрос "Что понимается под множеством в Паскале?" Расскажите устно друг другу ответ на вопрос.
  3. Найдите ответ на вопрос "Как объявляются множества?". Расскажите устно друг другу ответ на вопрос.
  4. Какие типы данных используются в качестве базовых при построении множественных типов. Расскажите устно друг другу ответ на вопрос.
  5. Найдите ответ на вопрос "Как в Паскале обозначаются операции над множествами?". Расскажите устно друг другу ответ на вопрос.
  6. Чем похожи и чем отличаются множества и массивы,
  7. Как представляются множества в памяти.
  8. Вычислить следующие выражения:
    a) [5]<=[1..5] Ответ: true
    b) ['a'..'d', 'k'..'m'] + ['d'..'k']; Ответ: [a'..'m']
    c) [Москва, Минск, Сочи]*[Сочи] Ответ: [Сочи]
    d) [7,1,3..6]=[1..7] Ответ: false
    e) [',','9','0','.']-[',','.'] Ответ: ['(',')']
    f) 15 in [1..10] Ответ: false
  9. Познакомиться с условием задачи № 1.
  10. Вызвать с диска файл (c:\tp7\mnog1.pas). Запустить программу на выполнение. Ответ примера № 1 записать в тетрадь.
  11. Найдите ответ на вопрос "Как организована в программе проверка на включение множества Y3 в множество X?". Расскажите устно друг другу ответ на вопрос.
  12. Выйти из Паскаля. Распечатать на принтере файл c:\tp7\mnog1.pas. Распечатку вклеить в тетрадь.
  13. Познакомиться с условием задачи № 2.
  14. Вызвать с диска файл (c:\tp7\mnog2.pas). Запустить программу на выполнение. Ответ записать в тетрадь. Ответить на вопрос "Как в программе сформировано множество чисел, делящихся без остатка на 6; множество чисел, делящихся без остатка или на 2, или на 3?"
  15. Выйти из Паскаля. Распечатать на принтере файл c:\tp7\mnog2.pas. Распечатку вклеить в тетрадь.
  16. Познакомиться с условием задачи № 3.
  17. Вызвать с диска файл (c:\tp7\mnog3.pas). Запустить программу на выполнение. Ответ записать в тетрадь. Разобраться как работает данная программа.
  18. Выйти из Паскаля. Распечатать на принтере файл c:\tp7\mnog3.pas. Распечатку вклеить в тетрадь.
  19. Познакомиться с условием задачи № 4.
  20. Вызвать с диска файл (c:\tp7\mnog4.pas). Запустить программу на выполнение. Ответ записать в тетрадь. Разобраться как работает данная программа.
  21. Выйти из Паскаля. Распечатать на принтере файл c:\tp7\mnog4.pas. Распечатку вклеить в тетрадь.
  22. Познакомиться с условием задачи № 5.
  23. Составить программу. Сохранить ее на своем диске в каталоге MNOG.
  24. Подвести итоги, ответив на вопрос: что вами было изучено и исследовано в ходе урока?
Hosted by uCoz

к оглавлению     на домашнюю