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;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.01 сек.