Лабораторные работы по информатике
1 1 1 1 1 1 1 1 1 1 Рейтинг 0.00 (0 Голоса)

Лабораторная работа «Разработка программных средств реализации систем булевых функций на ПЛМ»

1. Цель работы: изучить методы реализации систем булевых функций на ПЛМ. Научиться реализовывать алгоритмы реализации при условии недостаточности входов и термов.

2. Постановка задачи: разработать программную систему, предназначенную для составления таблицы прошивки ПЛМ при заданных вариантом задания условиях, Разработка ведется группой студентов из 6-8 человек. Задания на разработку элементов программной системы выдает главный программист. Программная система должна выполнять ввод системы булевых функций, используя интерфейсные формы, разработанные в предыдущей лабораторной работе; строить таблицу прошивки ПЛМ и определять связи между ПЛМ.

3. Текст программы.

unit PLM;

interface

uses

Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

Grids, StdCtrls, Spin, Menus, Buttons;

type

Tvector=array[1..16]of word;

TForm1 = class(TForm)

MainMenu1: TMainMenu;

OpenDialog1: TOpenDialog;

SaveDialog1: TSaveDialog;

SpinEdit1: TSpinEdit;

SpinEdit2: TSpinEdit;

StringGrid1: TStringGrid;

Label1: TLabel;

Label2: TLabel;

Label3: TLabel;

Label4: TLabel;

Label5: TLabel;

SpinEdit3: TSpinEdit;

SpinEdit4: TSpinEdit;

N1: TMenuItem;

N2: TMenuItem;

N3: TMenuItem;

N4: TMenuItem;

N6: TMenuItem;

BitBtn1: TBitBtn;

Memo1: TMemo;

Label6: TLabel;

BitBtn2: TBitBtn;

Label7: TLabel;

Label8: TLabel;

Label9: TLabel;

procedure N3Click(Sender: TObject);

procedure FormCreate(Sender: TObject);

procedure N2Click(Sender: TObject);

procedure N4Click(Sender: TObject);

procedure N6Click(Sender: TObject);

procedure SpinEdit2Change(Sender: TObject);

procedure BitBtn2Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

procedure ShowTable(vector: Tvector;tt, vv:byte);

procedure Factorizaciya(vector: Tvector;tt, vv:byte);

end;

SetCH = set of 1..16;

const mask:array[1..16]of word=( 1, 2, 4, 8,

16, 32, 64, 128,

256, 512, 1024, 2048,

4096,8192,8192*2,8192*4);

var

Form1 : TForm1;

PLM_tbl, Empty : Tvector;

t, v,T0,V0,rang : byte;

ycl : boolean;

implementation

{$R *.DFM}

Function Dlina(SS:setCh):byte;

var i, k: byte;

begin

k:=0;

for i:=1 to 16 do

if i in SS then inc(k);

Dlina:=k;

end;

procedure TForm1.Factorizaciya(vector:Tvector;tt, vv:byte);

var bliz:array[1..17,1..16]of byte;//таблица близости

i, j,k, num, max, Nm, ob : byte;

Sv, St, Sv1,St1, buf, buf1 : setch;

Stroka:string;

ycl1:boolean;

begin

sv:=[]; St:=[];

for j:=1 to T do St:=ST+[j];

for i:=1 to V do Sv:=SV+[i];

num:=0;//номер очередной ПЛМ

while sv<>[]do

begin

Inc(num); max:=0;

St1:=[]; Sv1:=[];

i:=1;

while not(i in Sv) do inc(i);

nm:=i;

//заполнение таблицы близости

for i:=1 to vv do

if i in Sv then

begin

bliz[i, vv+1]:=0;

for j:=1 to vv do

if j in Sv then

begin

if i=j then Bliz[i, j]:=0

else begin

bliz[i, j]:=0;

for k:=1 to tt do

if(vector[i]and vector[j]and mask[k])<>0 then inc(Bliz[i, j]);

end;

Bliz[i, vv+1]:=Bliz[i, vv+1]+Bliz[i, j];

if Bliz[i, vv+1]>max then

begin

max:=Bliz[i, vv+1];

nm:=i;

end;

end;

end;

Sv:=Sv-[nm];

Sv1:=Sv1+[nm];//добавление первой строки в ПЛМ

for j:=1 to tt do

if (mask[j]and Vector[nm])<>0 then St1:=St1+[j];

//добавление новых строк

ycl1:=true;

while ycl1 do

begin

ycl1:ъlse;

max:=0;

For i:=1 to vv do

if i in Sv then

begin

buf:=St1;ob:=0;

for j:=1 to tt do

if(vector[i]and mask[j])<>0 then

begin

Buf:=buf+[j];

if(j in St1)then inc(ob);

end;

if(dlina(buf)<=T0)and(ob>max) then

begin

nm:=i;

buf1:=buf;

ycl1:=true;

max:=ob;

end;

end;

if ycl1 then

begin

Sv1:=sv1+[nm];

St1:=Buf1;

Sv:=Sv-[nm];

end;

if Dlina(Sv1)= V0 then ycl1:ъlse;

end;

//вывод на экран результата

Memo1.Lines. Add(IntToStr(num)+' Выходы Внутр. термы ');

stroka:=' ';

for i:=1 to 16 do

if i in Sv1 then stroka:=stroka+IntToStr(i)+' ';

stroka:=Stroka+' ';

for i:=1 to 16 do

if i in St1 then stroka:=stroka+IntToStr(i)+' ';

Memo1.Lines. Add(stroka);

Memo1.Lines. Add('');

end;

end;

procedure Tform1.ShowTable(vector:Tvector;tt, vv:byte);

var i, j,k : byte;

begin

StringGrid1.ColCount:=tt+1;

StringGrid1.RowCount:=vv+1;

rang:=0;

for i:=1 to vv do StringGrid1.Cells[0,i]:=IntToStr(i);

for i:=1 to tt do StringGrid1.Cells[i,0]:=IntToStr(i);

for i:=1 to vv do

begin

k:=0;

for j:=1 to tt do

if (vector[i] and mask[j])<>0

then

begin

StringGrid1.Cells[j, i]:='1';

inc(k);

end

else StringGrid1.Cells[j, i]:='0';

if k>rang then rang:=k;

end;

SpinEdit2.MinValue:=rang;

end;

procedure TForm1.N3Click(Sender: TObject);

var f : textFile;

i : byte;

begin

ycl:ъlse;

if OpenDialog1.Execute then

begin

AssignFile(F, OpenDialog1.FileName); { File selected in dialog box }

Reset(F);

Read(F, v, t); { Read the first line out of the file }

for i:= 1 to v do read(F, PLM_tbl[i]);

ShowTable(PLM_tbl, T,V);

SpinEdit1.Value:=T;

SpinEdit3.Value:=V;

ycl:=true;

CloseFile(F);

end;

end;

procedure TForm1.FormCreate(Sender: TObject);

var i:byte;

begin

ycl:ъlse;

for i:=1 to 16 do Empty[i]:=0;

T0:=SpinEdit2.Value;

V0:=SpinEdit4.Value;

end;

procedure TForm1.N2Click(Sender: TObject);

begin

ycl:ъlse;

v:=SpinEdit3.Value;

t:=SpinEdit1.Value;

ShowTable(Empty, t,v);

end;

procedure TForm1.N4Click(Sender: TObject);

var i, j,buf : byte;

Code : integer;

begin

for i:=1 to v do

begin

PLM_Tbl[i]:=0;

for j:=1 to t do

begin

Val(StringGrid1.Cells[j, i],buf, code);

if (code<>0)or((buf<>0)and(buf<>1)) then

begin

ycl:ъlse;

MessageDlg('Ошибка! В ячейке'+inttostr(i)+','+ inttostr(j)+' должны быть 0 или 1', mtError, [mbOk], 0);

exit;

end;

if buf=1 then PLM_tbl[i]:=Plm_tbl[i]or mask[j];

end;

end;

ycl:=true;

end;

procedure TForm1.N6Click(Sender: TObject);

var f : TextFile;

i: byte;

begin

if ycl then

begin

if SaveDialog1.Execute then

begin

AssignFile(f, SaveDialog1.FileName);

rewrite(f);

writeln(F, v,' ',t);

for i:=1 to v do writeln(f, PLM_tbl[i]);

CloseFile(f);

end;

end

else

begin

MessageDlg('Ошибка! Данные сперва должны быть приняты программой.', mtError, [mbOk], 0);

end;

end;

procedure TForm1.SpinEdit2Change(Sender: TObject);

begin

T0:=SpinEdit2.Value;

V0:=SpinEdit4.Value;

end;

procedure TForm1.BitBtn2Click(Sender: TObject);

begin

if ycl then

begin

Memo1.Lines. Clear;

Factorizaciya(PLM_tbl, t,v);

end

else

MessageDlg('Ошибка! Данные сперва должны быть приняты программой.', mtError, [mbOk], 0);

end;

end.

4. Вывод: в ходе лабораторной работы были изучены методы реализации систем булевых функций на ПЛМ, алгоритмы реализации при условии недостаточности входов и термов.

Добавить комментарий


Защитный код
Обновить

По темам:

История Украины

Культурология

Высшая математика

Информатика

Охотоведение

Статистика

География

Военная наука

Английский язык

Генетика

Разное

Технологиеские темы

Украинский язык

Филология

Философия

Химия

Экология

Социология

Физическое воспитание

Растениевосдство

Педагогика

История

Психология

Религиоведение

Плодоводство

Экономические темы

Бухгалтерские темы

Маркетинг

Иностранные языки

Ветеринарная медицина

Технические темы

Землеустройство

Медицинские темы

Творчество

Лесное и парковое хозяйство

Агрономия

Преподавателям

Юридические темы

Google