AMOS THE CREATOR
Retro bilgisayar
Bu ayki yazımızda son birkaç aydır devam ettiğimiz şekil tanıma programını noktalıyoruz. Programa son olarak menü komutlarını ilave ettim. Bu komutu daha önce hiç kullanmamıştık. Program listesinde de göreceğiniz gibi, kullanımı oldukça basit bir komut. MENU komutunu kullanarak, menüler hazırlanıyor. Daha sonra 'MENU ON' komutuyla bunlar kullanılabilir hale getiriliyor. Menülerin okunması ise, 'CHOICE' komutu ile yapılıyor. Daha ileriki programlarımızda, menüleri daha detaylı olarak göreceğiz. Şimdi sizlere, programın son halini veriyorum. Program üzerinde daha fazla değişiklik yapmayacağım. Artık gerisi size kalmış...
Rem ************************************** *
Rem Burak OZDEMIR 20 October 1991
Rem Name:Hopfield network
Rem Version:2
Rem ************************************** *
Rem
Set Buffer 30
INITSCRN
Rem
CLMNS=8
RWS=8
N_NODES=CLMNS*RWS
N_SMPLRS=3
UNKNOWN=N_SMPLRS
RESULT=N_SMPLRS+1
MXT=20
Rem
Dim SMPLR(N_SMPLRS+2,N_NODES)
Dim W_MATRIX(N_NODES,N_NODES)
Rem
Rem
Global SMPLR(),W_MATRIX()
Global CLMNS,RWS,N_NODES,N_SMPLRS,UNKNOWN,
RESULT, MXT, TST1, TST2/TST3
Rem
Screen Close 0
Screen Open 0,640,200,4,Hires
Cls(0)
Rem
MEN
Rem
Rem
Do
Cls(0)
TST1=Choice
Rem herhangi bir menunu seçildiği zaman -1 olur
TST2=Choice(l) '
Rem seçilen menunun numarası
TST3=Choice(2)
Rem o menu'ye ait eleman numarası
If TST1=-1 Then FMEN
Loop
Rem
Rem
Procedure AD_NOISE
Print "Hata yüzdesini ver "
Input P
For I=0 To N_NODES-l
T=Rnd(100)
If(T<P)
SMPLR(UNKNOWN,I)=-SMPLR(UNKNOWN,I)
Print "Altered bit ",I
End If
Next I
Wait Key
End Proc
Rem
Rem
Procedure INP_UNKNOWN
Cls
Print "Bilinmeyen sekli gir "
INP_SAMPLE[UNKNOWN]
SHW_SMPLR[UNKNOWN]
End Proc
Rem
Rem
Procedure SV_SMPLRS
Cls
Print "Örnek numarasini ver
Input N
N=N-1
Print "Isim ?
Input NAMES
Open Out 1,NAMES
For I=0 To N_NODES-l
Print #1,SMPLR(N,I)
Next I
Close 1
End Proc
Rem
Rem
Procedure LD_SMPLRS
Cls
Print "Ornek numarasi "
Input N
N=N-1
Print "Isim ?
Input NAMES
Open In 1,NAMES
For I=0 To N_NODES-l
Input #1,SMPLR(N,I)
Next I
Close 1
End Proc
Rem
Rem
Procedure LD_UNKNOWN.
Cls
Print "Isim ?
Input NAME$
Open In 1,NAME$
For I=0 To N_NODES-l
Input #l,SMPLR(UNKNOWN,I)
Next I
Close 1
End Proc
Rem
Rem
Procedure SV_UNKNOWN
Cls
Print "Isim ?
Input NAME$
Open Out 1,NAME$
For I=0 To N_NODES-l
Print #1,SMPLR(N,I)
Next I
Close 1
End Proc
Rem
Rem
Procedure GT_SMPLRS
Cls
Print" Ornek numarasi Max ",N_SMPLRS
Input S
If((S>0) and(S<=N_SMPLRS))
INP_SAMPLE[S-1]
Else
ILLEGAL
End If
End Proc
Rem
Rem
Procedure INP_SAMPLE[S]
Cls
Locate 0,22
Print "Ornek verilerini gir "
Reserve Zone 64
Ink 0
For 1=0 To 7
For F=0 To 7
Set Zone I+8*F+1 ,I*20,F*20 To(I+1 )*20,(F+1 )*20
Box I*20,F*20To(I+l)*20,(F+l)*20
Next F
Next I
Do
Flash Off
Curs Off
T=Zone(X Screen(X Mouse),Y Screen(Y Mouse))
R=Int((T-l)/8)
C=T-8*R-1
If(Mouse Key>0 and T<>0) Then SETPIX[S,R,C]
If(Mouse Key>0 and T=0) Then Exit
Loop
End Proc
Rem
Rem
Procedure SETPIX[S,R,C]
If Mouse Key=l
Ink 2
iiDc
SMPLR(S,R*CLMNS+C)= 1
End If
If Mouse Key=2
Ink 1
SMPLR(S,R*CLMNS+C)=0
End If
X=X Screen(X Mouse)
Y=Y Screen(Y Mouse)
Paint X,Y,0
End Proc
Rem
Rem
Procedure PRT_SMPLRS
Cls
Print" Ornek numarasini ver Max ",N_SMPLRS
Input S
If((S>0) and(S<=N_SMPLRS))
SHW_SMPLR[S-1]
Else
ILLEGAL
End If
End Proc
Rem
Rem
Procedure SHW_SMPLR[S]
Cls
Locate 0,22
Print "Ornek ",S+1
InkO
For I=0 To 7
For F=0 To 7
Set Zone I+8*F+l,I*20,F*20To(I+l)*20,(F+l)*20
Box I*20,F*20To(I+l)*20,(F+l)*20
Next F
Next I
Rem
For R=0 To 7
For C=0 To 7
PRTPIX[S,R,C]
Next C
NextR
Wait Key
End Proc
Rem
Rem
Procedure PRTPIX[S,R,C]
If SMPLR(S,R*CLMNS+C)=1 Then Ink 2
IfSMPLR(S,R*CLMNS+C)=0 Then Ink 1
X=C*20+10
Y=R*20+10
Paint X,Y,0
End Proc
Rem
Rem
Procedure SHWJJNKNOWN
SHW_SMPLR[UNKNOWN]
End Proc
Rem
Rem
Procedure SET_WEIGHTS
Cls

COUNT=0
Print "Katsayilar hesaplaniyor"
For I=0 To N_NODES-l
For J=0 To N_NODES-l
W_MATRIX(I,J)=0
If(IoJ)
For S=0 To N_SMPLRS-l
W_MATR1X(U)=W_MATRIX(U>KSMPLR(S,I)*SMPLR(SJ))
Next S
End If
Inc COUNT
Next J
Next I
Print "Katsayi adedi ",COUNT
Wait Key
End Proc
Rem
Rem
Procedure PRT_WEIGHTS
Cls
Print "Katsayi matrisi"
For I=0 To N_NODES-l
Print
ForJ=0 To N_NODES-l
Print W_MATRIX(I,J)
Next J
Next I
Wait Key
End Proc
Rem
Rem
Procedure ITERATE
Cls
ITERATIONS=0
Print" Hesaplaniyor"
Repeat
Print
SHW_SMPLR[UNKNOWN]
For N=0 To N_NODES-l
SIGMA[N]
TEMP=Param
NLFUNC[TEMP]
SMPLR(RESULT,N)=Param
Next N
Inc ITERATIONS
COMPARE
TEMP=Param
If(TEMP<>N_NODES)
SWP_RESULT
End If
Until(ITERATIONS>MXT)or(TEMP=N_NODES)
Print "Islem tamam! Iterasyon sayisi ",ITERATIONS
Wait Key
End Proc
Rem
Rem
Procedure SIGMA[N]
SUM=0
For I=0 To N_NODES-l
SUM=SUM-KW_MATRIX(N,I)*SMPLR(UNKNOWN,I))
Next I
End Proc[SUM]
Rem
Rem
Procedure NLFUNQIN]
If IN>=0
Q=l
Else
Q=-i
End If
End Proc[Q]
Rem
Rem
Procedure SWP_RESULT
For I=0 To N_NODES-l
SMPLR(UNKNOWN,I)=SMPLR(RESULT,I)
Next I
End Proc
Rem
Rem
Procedure COMPARE
TEST=0
For I=0 To N_NODES-l
If(SMPLR(UNKNOWN,I)=SMPLR(RESULT,I))
Inc TEST
End If
Next I
End Proc[TEST]
Rem
Rem
Procedure ILLEGAL
Cls
Print "Hatali giriş, tekrar deneyin"
End Proc
Rem
Rem
Procedure INITSCRN
Screen Close 0
Screen Open 0.640,200,4,Hires
Cls
Flash Off
End Proc
Rem
Rem
Procedure MEN
Menu$(l)="Quit "
Menu$(l.l)="Cik"
Menu$(2)="Sampler "
Menu$(2.1)="Gir"
Menu$(2.2)="Kayitla "
Menu$(2,3)="Yukle"
Menu$(2,4)="Goster"
Menu$(3)="Katsayilar "
Menu$(3,l)="Hesapla"
Menu$(3.2)="Yaz"
Menu$(4)="Bilinmeyen "
MenuS(4,l)="Gir"
MenuS(4,2)="Kayitla"
MenuS(4,3)="Yukle "
Menu$(4,4)="Goster"
Menu$(5 )="Gurultu
MenuS(5,l)="Ekle"
Menu$(6)="Bul "
Menu$(6,l)="Basla"
Rem
Menu On
End Proc
Procedure FMEN
If TST2=1 and TST3=l Then End
If TST2=2 and TST3=1 Then GT_SMPLRS
If TST2=2 and TST3=2 Then SV_SMPLRS
If TST2=2 and TST3=3 Then LD_SMPLRS
If TST2=2 and TST3=4 Then PRT_SMPLRS
If TST2=3 and TST3=l Then SET.WEIGHTS
If TST2=3 and TST3=2 Then PRT_WEIGHTS
If TST2=4 and TST3=1 Then INPJJNKNOWN
If TST2=4 and TST3=2 Then SV_UNKNOWN
If TST2=4 and TST3=3 Then LD_UNKNOWN
If TST2=4 and TST3=4 Then SHW_UNKNOWN
If TST2=5 and TST3=1 Then AD_NOISE
If TST2=6 and TST3=1 Then ITERATE
End Proc