Практическая работа № 4. Элементы теории множеств и алгебры логики
Цель работы: применение знаний теории множеств и алгебры логики для решения практической задачи. Указание к выполнению
Данная практическая работа сочетает в себе использование элементов теории множеств и алгебры логики. Все теоретические сведения, необходимые для выполнения данной работы, изложены в лекциях и в уже изданных методических пособиях [23], [25]. Выполнение данной работы рекомендуется выполнять по образцу, рассмотренному далее. Задание к работе
1. Составить множества из букв Ф.И.О.. 2. Представить полученные множества на кругах Эйлера. 3. Представить буквы Ф.И.О. в двоичной системе. 4. Представить диаграмму Венна. СНДФ. 5. Перевести числа даты рождения в двоичную систему счисления. Примечание: желательно реализовать основные вычисления в приложении на Delphi. Практическая часть
Пример 1: 1 Множества из букв Ф.И.О. МОРОЗОВ ОЛЕГ ЕВГЕНЬЕВИЧ Ф = {М, О, Р, З, В}; И = {О, Л, Е, Г}; О = {Е, В, Г, Н, Ь, И, Ч}; 2 Круги Эйлера и диаграммы Венна Рисунок 4.1 – Круги Эйлера Таблица 4.1 – Буквы алфавита в двоичной системе
Таблица 4.2 – Буквы Ф.И.О. в двоичной системе
Таблица 4.3 – СНДФ из букв Ф.И.О.
F 1
F 2 F 3 Рисунок 4.2 – Диаграммы Венна для функций F1, F2, F3
3 Перевод даты рождения в двоичную систему 1982.0212
(1982.0212) 10=(11110111110.0000010101) 2
Пример 2: автор – Якухин Дмитрий var k:byte; Form1: TForm1; type R = set of 'A'..'Я'; implementation {$R *.dfm} procedure SNDF (y:byte; t:string); var i:byte; begin for i:=1 to 5 do begin Form1. StringGrid1. Cells [y, i]:=t[i]; end; for i:=1 to 3 do begin Form1. StringGrid2. Cells [i+4, y]:=t [i+1]; end; end; procedure Perebor (T:R; S:TMemo); begin if ('А' in T) then begin S. Lines. Add ('А = '+' 00001'); inc(k); SNDF (k, '00001'); Form1. StringGrid1. Cells [k, 0]:='А'; end; if ('Б' in T) then begin S. Lines. Add ('Б = '+' 00010'); inc(k); SNDF (k, '00010'); Form1. StringGrid1. Cells [k, 0]:='Б'; end; if ('В' in T) then begin S. Lines. Add ('В = '+' 00011'); inc(k); SNDF (k, '00011'); Form1. StringGrid1. Cells [k, 0]:='В'; end; if ('Г' in T) then begin S. Lines. Add ('Г = '+' 00100'); inc(k); SNDF (k, '00100'); Form1. StringGrid1. Cells [k, 0]:='Г'; end;
if ('Д' in T) then begin S. Lines. Add ('Д = '+' 00101'); inc(k); SNDF (k, '00101'); Form1. StringGrid1. Cells [k, 0]:='Д'; end; if ('Е' in T) then begin S. Lines. Add ('Е = '+' 00110'); inc(k); SNDF (k, '00110'); Form1. StringGrid1. Cells [k, 0]:='Е'; end; if ('Ж' in T) then begin S. Lines. Add ('Ж = '+' 00111'); inc(k); SNDF (k, '00111'); Form1. StringGrid1. Cells [k, 0]:='Ж'; end; if ('З' in T) then begin S. Lines. Add ('З = '+' 01000'); inc(k); SNDF (k, '01000'); Form1. StringGrid1. Cells [k, 0]:='З'; end; if ('И' in T) then begin S. Lines. Add ('И = '+' 01001'); inc(k); SNDF (k, '01001'); Form1. StringGrid1. Cells [k, 0]:='И'; end; if ('К' in T) then begin S. Lines. Add ('К = '+' 01010'); inc(k); SNDF (k, '01010'); Form1. StringGrid1. Cells [k, 0]:='К'; end; if ('Л' in T) then begin S. Lines. Add ('Л = '+' 01011'); inc(k); SNDF (k, '01011'); Form1. StringGrid1. Cells [k, 0]:='Л'; end; if ('М' in T) then begin S. Lines. Add ('М = '+' 01100'); inc(k); SNDF (k, '01100'); Form1. StringGrid1. Cells [k, 0]:='М'; end; if ('Н' in T) then begin S. Lines. Add ('Н = '+' 01101'); inc(k); SNDF (k, '01101'); Form1. StringGrid1. Cells [k, 0]:='Н'; end; if ('О' in T) then begin S. Lines. Add ('О = '+' 01110'); inc(k); SNDF (k, '01110'); Form1. StringGrid1. Cells [k, 0]:='О'; end; if ('П' in T) then begin S. Lines. Add ('П = '+' 01111'); inc(k); SNDF (k, '01111'); Form1. StringGrid1. Cells [k, 0]:='П'; end; if ('Р' in T) then begin S. Lines. Add ('Р = '+' 10000'); inc(k); SNDF (k, '10000'); Form1. StringGrid1. Cells [k, 0]:='Р'; end; if ('С' in T) then begin S. Lines. Add ('С = '+' 10001'); inc(k); SNDF (k, '10001'); Form1. StringGrid1. Cells [k, 0]:='С'; end; if ('Т' in T) then begin S. Lines. Add ('Т = '+' 10010'); inc(k); SNDF (k, '10010'); Form1. StringGrid1. Cells [k, 0]:='Т'; end; if ('У' in T) then begin S. Lines. Add ('У = '+' 10011'); inc(k); SNDF (k, '10011'); Form1. StringGrid1. Cells [k, 0]:='У'; end; if ('Ф' in T) then begin S. Lines. Add ('Ф = '+' 10100'); inc(k); SNDF (k, '10100'); Form1. StringGrid1. Cells [k, 0]:='Ф'; end; if ('Х' in T) then begin S. Lines. Add ('Х = '+' 10101'); inc(k); SNDF (k, '10101'); Form1. StringGrid1. Cells [k, 0]:='Х'; end; if ('Ц' in T) then begin S. Lines. Add ('Ц = '+' 10110'); inc(k); SNDF (k, '10110'); Form1. StringGrid1. Cells [k, 0]:='Ц'; end; if ('Ч' in T) then begin S. Lines. Add ('Ч = '+' 10111'); inc(k); SNDF (k, '10111'); Form1. StringGrid1. Cells [k, 0]:='Ч'; end; if ('Ш' in T) then begin S. Lines. Add ('Ш = '+' 11000'); inc(k); SNDF (k, '11000'); Form1. StringGrid1. Cells [k, 0]:='Ш'; end; if ('Щ' in T) then begin S. Lines. Add ('Щ = '+' 11001'); inc(k); SNDF (k, '11001'); Form1. StringGrid1. Cells [k, 0]:='Щ'; end; if ('Ъ' in T) then begin S. Lines. Add ('Ъ = '+' 11010'); inc(k); SNDF (k, '11010'); Form1. StringGrid1. Cells [k, 0]:='Ъ'; end; if ('Ы' in T) then begin S. Lines. Add ('Ы = '+' 11011'); inc(k); SNDF (k, '11011'); Form1. StringGrid1. Cells [k, 0]:='Ы'; end; if ('Ь' in T) then begin S. Lines. Add ('Ь = '+' 11100'); inc(k); SNDF (k, '11100'); Form1. StringGrid1. Cells [k, 0]:='Ь'; end; if ('Э' in T) then begin S. Lines. Add ('Э = '+' 11101'); inc(k); SNDF (k, '11101'); Form1. StringGrid1. Cells [k, 0]:='Э'; end; if ('Ю' in T) then begin S. Lines. Add ('Ю = '+' 11110'); inc(k); SNDF (k, '11110'); Form1. StringGrid1. Cells [k, 0]:='Ю'; end; if ('Я' in T) then begin S. Lines. Add ('Я = '+' 11111'); inc(k); SNDF (k, '11111'); Form1. StringGrid1. Cells [k, 0]:='Я'; end; end; procedure TForm1. BitBtn1Click (Sender: TObject); var F, I, O:R; h, j, S:byte; begin Memo1. Clear; Memo2. Clear; Memo3. Clear; k:=0; S:=0; F:=['Я', 'К', 'У', 'Х', 'И', 'Н']; I:=['Д', 'М', 'И', 'Т', 'Р']; O:=['Е', 'Р', 'Г', 'В', 'И']; perebor (F, Memo1);
perebor (I, Memo2); perebor (O, Memo3); for j:=1 to 5 do begin for h:=1 to 19 do begin if StringGrid1. Cells [h, j]='1' then inc(s); end; StringGrid1. Cells [17, j]:=IntToStr(S); S:=0; (yegorov-p Rulezzz;)} end; end; procedure TForm1. FormCreate (Sender: TObject); var g:byte; begin StringGrid1. Cells [0,2]:='F1'; StringGrid1. Cells [0,3]:='F2'; StringGrid1. Cells [0,4]:='F3'; StringGrid2. Cells [1,0]:='X1'; StringGrid2. Cells [2,0]:='X2'; StringGrid2. Cells [3,0]:='X3'; StringGrid2. Cells [4,0]:='X4'; StringGrid2. Cells [5,0]:='F1'; StringGrid2. Cells [6,0]:='F2'; StringGrid2. Cells [7,0]:='F3'; for g:=0 to 15 do StringGrid2. Cells [0, g+1]:=IntToStr(g); for g:=0 to 7 do StringGrid2. Cells [1, g+1]:='0'; for g:=8 to 15 do StringGrid2. Cells [1, g+1]:='1'; for g:=0 to 3 do StringGrid2. Cells [2, g+1]:='0'; for g:=4 to 7 do StringGrid2. Cells [2, g+1]:='1'; for g:=8 to 11 do StringGrid2. Cells [2, g+1]:='0'; for g:=12 to 15 do StringGrid2. Cells [2, g+1]:='1'; for g:=1 to 2 do begin StringGrid2. Cells [3, g]:='0'; StringGrid2. Cells [3, g+2]:='1'; StringGrid2. Cells [3, g+4]:='0'; StringGrid2. Cells [3, g+6]:='1'; StringGrid2. Cells [3, g+8]:='0'; StringGrid2. Cells [3, g+10]:='1'; StringGrid2. Cells [3, g+12]:='0'; StringGrid2. Cells [3, g+14]:='1'; end; for g:=1 to 16 do begin if g div 2 = g/2 then StringGrid2. Cells [4, g]:='1' else StringGrid2. Cells [4, g]:='0'; end; end; Function Dec2Bin (j:integer):string; begin result:=''; while j>=1 do begin result:=IntToStr (j mod 2)+result; j:=j div 2; end; end; Function Dec2BinDrob (j:real):string; var i:byte; begin result:=''; for i:=1 to 11 do begin result:=FloatToStr (int(j*2))+result; j:=j*2; if int (j*2)>1 then j:=j‑1; end; end; procedure TForm1. BitBtn3Click (Sender: TObject); var p, p2, S, S2, S3:string; i:byte; begin p:=Edit1. Text; p2:='0,'+Edit3. Text; S:=Dec2Bin (StrToInt(p)); S2:=Dec2BinDrob (StrToFloat(p2)); for i:=11 downto 1 do begin S3:=S3+S2 [i]; end; Edit2. Text:=S+'.'+S3; end; procedure TForm1. BitBtn4Click (Sender: TObject); var i:byte; P:string; begin for i:=1 to 16 do begin if StringGrid2. Cells [5, i]='1' then begin P:=StringGrid2. Cells [1, i]+StringGrid2. Cells [2, i]+ StringGrid2. Cells [3, i]+StringGrid2. Cells [4, i]; Label7. Caption:=Label7. Caption+' '+P; end; end; for i:=1 to 16 do begin if StringGrid2. Cells [6, i]='1' then begin P:=StringGrid2. Cells [1, i]+StringGrid2. Cells [2, i]+ StringGrid2. Cells [3, i]+StringGrid2. Cells [4, i]; Label8. Caption:=Label8. Caption+' ' +P; end; end; for i:=1 to 16 do begin if StringGrid2. Cells [7, i]='1' then begin P:=StringGrid2. Cells [1, i]+StringGrid2. Cells [2, i]+ StringGrid2. Cells [3, i]+StringGrid2. Cells [4, i]; Label9. Caption:=Label9. Caption+' '+P; end; end; end; end.
Рисунок 4.3 – Форма для примера 2 Вопросы для самопроверки
1) Чем отличается кортеж от обычного множества? 2) Приведите пример использования кортежей в программировании. 3. Какие операции над множествами Вы знаете? 4) Какой способ существует для графического изображения множеств? 5) Приведите пример универсального множества, которое используется в данной практической работе.
6) Какие операции (логические связки) из алгебры логики Вы знаете? 7) Возможно ли провести аналогию между операциями над множествами и логическими операциями? 8) Какое правило используется при построении СДНФ логической функции? 9) Какое правило используется при построении СКНФ логической функции? 10) Каков алгоритм перевода числа из десятичной системы счисления в двоичную систему счисления? 11) Почему логические функции и логические переменные часто называют двоичными? 12) Какая связь существует между логическими функциями и функционированием компьютера, отдельных его устройств?
Воспользуйтесь поиском по сайту: ©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|