True false false
Пример.Составить программу выделения следующих множеств из множества целых чисел от 1 до 30 :
- множества чисел, кратных 2;
-множества чисел, кратных 3;
- множества чисел, кратных 6;
- множества чисел, кратных 2 или 3;
Вопросы для обсуждения :
1. Сколько множеств надо описать? (Каков тип их элементов? (четыре множества с элементами типа Byte).
2. Каково начальное значение множеств ? (начальное значение множеств - пустое множество).
3. Как формируются множества? (Первые два формируются перебором всех чисел данного промежутка и отбором подходящих, а третье и четвертое получаются из первых двух путем применения операции пересечения или объединения).
4. Как осуществить вывод сформированных множеств? (Вывод множеств производится ТОЛЬКО поэлементно, поэтому удобно составить процедуру и передавать в нее множество, элементы которого и будут выводить на экран. Для этого в разделе типов надо создать соответствующий тип и использовать его в дальнейшем).
Programmnog;
constn=30;
typemn=Set Of 1..n;
var n2, n3, n6, n23 : mn;
k : integer;
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
Begin
{если число делится на 2, то заносим его в n2 }
if k Mod 2 = 0 Then n2:=n2+[k];
{если число делится на 3, то заносим его в n3 }
if k Mod 3 = 0 Then n3:=n3+[k];
End;
{числа, кратные 6, - это те, которые кратны и 2 и 3, поэтому это пересечение двух множеств, а числа, кратные 2 или 3, - это объединение этих же множеств}
n6:=n2*n3; n23:=n2+n3;
writeln(‘числа, кратные 2’); print(n2);
writeln(‘числа, кратные 3’); print(n3);
writeln(‘числа, кратные 6’); print(n6);
writeln(‘числа, кратные 2 или 3’); print(n23);
END.
Пример 2. Если взять то общее, что есть у боба с ложкой, добавить кота и поместить в тепло, то получится муравей. Так ли это ?
programbob;
vary1, y2, y3, y4, x : Set Of Char;
s : Char;
BEGIN
y1:=[‘б’, ‘о’, ‘б’]; y2:=[‘л’, ‘о’, ‘ж’, ‘к’, ‘а’];
y3:=[‘к’, ‘о’, ‘т’]; y4:=[‘т’, ‘е’, ‘п’, ‘л’, ‘о’];
x:=(y1*y2) + y3 - y4;
writeln(‘множество х’);
for s:=’a’ to ‘я’ do if s In x then write(s); writeln;
{проверка: состоит ли муравей из кота}
if y3<=x then write(‘муравей состоит из кота’)
else write(‘муравей не состоит из кота’);
END.
Пример 3.Дан ребус МУХА + МУХА = СЛОН
Каждой букве соответствует некоторая цифра, разным буквам соответствуют разные цифры. Необходимо заменить буквы цифрами так, чтобы получить верное равенство.
Для решения этой задачи применим метод перебора с возвратом. Используем множество S1 для хранения цифр слова МУХА, причем будем заносить в него цифры последовательно, учитывая уже внесенные цифры. Начальное значение S1 - пустое множество. После выбора всех цифр первого слова формируем соответствующее число и находим число, соответствующее слову СЛОН. Выделяем цифры СЛОНа (множество S2), и если слова состоят из различных цифр (то есть пересечение S1 и S2 пустое) и все цифры СЛОНа разные, то выводим решение на экран. Далее удаляем из множества S1 последнюю внесенную цифру и пытаемся выбрать еще одно ее значение. Таким образом, мы перебираем все возможные варианты и выводим на экран только те, которые удовлетворяют равенству.
Заметим, что букве «М» в слове МУХА может соответствовать цифра от 1 до 4, а букве «А» в этом же слове не может соответствовать 0.
Programmyxa;
type mn=Set Of 0..9;
var m, y, x, a : 0..9; {цифры числа МУХА}
n1, n2 : integer; {числа МУХА и СЛОН}
a1, a2, a3, a4 : 0..9; {цифры числа СЛОН}
S1, S2 :mn;
procedurePrint(x,y:integer); {вывод решения в виде ребуса }
Begin
writeln(x:5);
writeln(‘+’);
writeln(x:5);
writeln(‘____’);
writeln(y:5);
End;
BEGIN
s1:=[ ]; s2:= [ ];
for m:=1 to 4 do
Begin
s1:=s1+[m]; { заносим первую использованную цифру}
for y:=0 to 9 do {если это цифра не была еще взята, то добавляем ее во множество цифр числа МУХА и выбираем цифру для следующей буквы }
if Not (y In s1)
then begins1:=s1+[y];
for x:=0 to 9 do
if Not (x In s1)
then begin s1:=s1+x;
for a:=1 to 9 do
if Not (a In s1)
then begins1:=s1+[a];
n1:=1000*m+100*y+10*x+a;
n2:=2*n1;
a1:=n2 div 1000;
a2:=n2 div 100 mod 10;
a3:=n2 div 10 mod 10;
a4:=n2 mod 10;
s2:=[a1,a2,a3,a4];
if (s1*s2=[]) and ([a1]*[a2]*[a3]*a[4]=[])
then Print(n1,n2);
s1:=s1-[a];
End;
s1:=s1-[x];
End;
s1:=s1-[y];
End;
s1:=s1-[m];
End;
END.
Дата добавления: 2015-01-15; просмотров: 871;