Читайте также:
|
|
Двонаправлена асоціативна пам’ять – нейронна мережа, в якій зображення можуть подаватися як на шар Х, так і на шар Y елементів. При цьому не передбачається, що зображення подаються одночасно.
Якщо подано зображення SP на шар Х, то на виході у-нейронів з’являється ТР зображення і навпаки.
Текст програми:
#include <vcl.h>
#pragma hdrstop
#include "Unit1_r3.h"
#include "Unit1.h"
#include "Unit2.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
int S1m[42];
int S2m[42];
int S3m[42];
int t1m[30];
int t2m[30];
int t3m[30];
int W[30][20];
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
for(int i=1; i<43; i++)
{
S1m[i]=-1; S2m[i]=-1; S3m[i]=-1;
t1m[i]=-1; t2m[i]=-1; t3m[i]=-1;
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::N6Click(TObject *Sender)
{ Form1->Close();}
//---------------------------------------------------------------------------
void __fastcall TForm1::N2Click(TObject *Sender)
{
int M1[42] = { 1,-1,-1,-1,1,1,-1,-1,-1,1,1,-1,-1,-1,1,1,-1,-1,-1,1,-1,1,-1,1,-1,-1,-1,1,-1,-1};
int M2[42] = {1,1,1,1,1,-1,-1,1,-1,-1,-1,-1,1,-1,-1,-1,-1,1,-1,-1,-1,-1,1,-1,-1,1,1,1,1,1};
int Mt1[30] = {-1,1,-1,-1,-1,-1,1,-1,1,1,1,1,-1,-1,1,-1,-1,1,-1,-1};
int Mt2[30] = {-1,-1,1,-1,-1,1,-1,-1,1,1,1,1, -1,1,-1,-1, -1,-1,1,-1};
int j=0,k=1;
for(int i=1; i<43; i++)
{
j++;
if(j>5)
{ j=1; k++; }
S1m[i] = M1[i-1];
if(S1m[i]==1) StringGrid1->Cells[j][k] = "$";
else StringGrid1->Cells[j][k] = " ";
S2m[i] = M2[i-1];
if(S2m[i]==1) StringGrid3->Cells[j][k] = "$";
else StringGrid3->Cells[j][k] = " ";
}
j=0;k=1;
for(int i=1; i<31; i++)
{
j++;
if(j>4)
{ j=1; k++; }
t1m[i] = Mt1[i-1];
if(t1m[i]==1) StringGrid2->Cells[j][k] = "$";
else StringGrid2->Cells[j][k] = " ";
t2m[i] = Mt2[i-1];
if(t2m[i]==1) StringGrid4->Cells[j][k] = "$";
else StringGrid4->Cells[j][k] = " ";
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::N3Click(TObject *Sender)
{
for(int j=1; j<31; j++)
for(int i=1; i<21; i++)
{ W[j][i]=t1m[i]*S1m[j]+t2m[i]*S2m[j];
ІtringGrid5->Cells[i][j]=W[j][i]; }
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
for(int i=1; i<31; i++)
{ StringGrid5->Cells[i][0] = i;
StringGrid5->Cells[0][i] = i;}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::StringGrid1SelectCell(TObject *Sender, int ACol,
int ARow, bool &CanSelect)
{
if(StringGrid1->Cells[ACol][ARow]=="")
{ StringGrid1->Cells[ACol][ARow]="$";
S1m[(ARow-1)*5+ACol]=1; }
else
{ StringGrid1->Cells[ACol][ARow]="";
S1m[(ARow-1)*5+ACol]= -1; }
}
//---------------------------------------------------------------------------
void __fastcall TForm1::StringGrid3SelectCell(TObject *Sender, int ACol,
int ARow, bool &CanSelect)
{
if(StringGrid3->Cells[ACol][ARow]=="")
{ StringGrid3->Cells[ACol][ARow]="$";
S2m[(ARow-1)*5+ACol]=1; }
else
{ StringGrid3->Cells[ACol][ARow]="";
S2m[(ARow-1)*5+ACol]= -1; }
}
//---------------------------------------------------------------------------
void __fastcall TForm1::StringGrid2SelectCell(TObject *Sender, int ACol,
int ARow, bool &CanSelect)
{
if(StringGrid2->Cells[ACol][ARow]=="")
{ StringGrid2->Cells[ACol][ARow]="$";
t1m[(ARow-1)*4+ACol]=1; }
else
{ StringGrid2->Cells[ACol][ARow]="";
t1m[(ARow-1)*4+ACol]= -1; }
}
//---------------------------------------------------------------------------
void __fastcall TForm1::S1Click(TObject *Sender)
{
int dopmas[21];
int l=0,k=1;
for(int i=0; i<22;i++)
dopmas[i]=0;
for(int j=1; j<21; j++)
{
for(int i=1; i<31; i++)
{
dopmas[j] = dopmas[j]+ W[i][j]*S3m[i];
}
l++;
if(l>4)
{ l=1; k++; }
if(dopmas[j]>0) StringGrid7->Cells[l][k]="$";
else StringGrid7->Cells[l][k]="";
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::StringGrid7SelectCell(TObject *Sender, int ACol,
int ARow, bool &CanSelect)
{
if(StringGrid7->Cells[ACol][ARow]=="") { StringGrid7->Cells[ACol][ARow]="$";
t3m[(ARow-1)*4+ACol]=1; }
else { StringGrid7->Cells[ACol][ARow]=""; t3m[(ARow-1)*4+ACol]= -1; }
}
//---------------------------------------------------------------------------
void __fastcall TForm1::N9Click(TObject *Sender)
{ Form1->Close();}
//---------------------------------------------------------------------------
void __fastcall TForm1::N5Click(TObject *Sender)
{
int dopmas[31];
int l=0,k=1;
for(int i=0; i<32;i++)
dopmas[i]=0;
for(int j=1; j<31; j++)
{
for(int i=1; i<21; i++)
{ dopmas[j] = dopmas[j]+ W[j][i]*t3m[i]; }
l++;
if(l>5) { l=1; k++; }
if(dopmas[j]>0) StringGrid6->Cells[l][k]="$";
else StringGrid6->Cells[l][k]="";
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::N8Click(TObject *Sender)
{ AboutBox->ShowModal();}
//---------------------------------------------------------------------------
void __fastcall TForm1::N7Click(TObject *Sender)
{ Form2->ShowModal(); }
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{ Form1->Close(); }
//---------------------------------------------------------------------------
Результат роботи програми:
Висновки: В результаті виконання розрахунково-графічного завдання був засвоєний алгоритм функціонування двонаправленої асоціативної пам’яті, була створена програма, що демонструє роботу двонаправленої асоціативної пам’яті.
Дата добавления: 2014-12-18; просмотров: 118 | Поможем написать вашу работу | Нарушение авторских прав |