#include<bits/stdc++.h>
using namespace std;
int main()
{
int i,j,choice;
int nt[]={0,1};
int x1[]={0,0,1,1};
int x2[]={0,1,0,1};
int b,w1,w2,nw,ip,op;
w1=w2=b=nw=0;
int dw1,dw2,dnw,db;
bool f[]={false,false,false,false};
bool ch;
cout<<"PERCEPTRON METHOD\n1-AND\n2-OR\n3-NOT\nEnter your choice: ";
cin>>choice;
switch(choice)
{
case 1:
{
cout<<"x1\t"<<"x2\t"<<"b\t"<<"t\t"<<"i/p\t"<<"o/p\t"<<"dw1\t"<<"dw2\t"<<"db\t"<<"nw1\t"<<"nw2\t"<<"nb\t"<<endl;
int t[]={0,0,0,1};
do
{
for(i=0;i<4;i++)
{
ip=x1[i]*w1+x2[i]*w2+b;
if(ip>=0)
op=1;
else
op=0;
if(t[i]==op)
{
f[i]=true;
dw1=dw2=db=0;
}
else
{
dw1=(t[i]-op)*x1[i];
dw2=(t[i]-op)*x2[i];
db=t[i]-op;
}
w1+=dw1;
w2+=dw2;
b+=db;
cout<<x1[i]<<"\t"<<x2[i]<<"\t"<<1<<"\t"<<t[i]<<"\t"<<ip<<"\t"<<op<<"\t"<<dw1<<"\t"<<dw2<<"\t"<<db<<"\t"<<w1<<"\t"<<w2<<"\t"<<b<<"\t\n";
}
ch=true;
for(j=0;j<4;j++)
{
if(f[j]==false)
ch=false;
f[j]=false;
}
cout<<"\n";
}while(!ch);
cout<<"End w1 w2 b: "<<w1<<" "<<w2<<" "<<b;
}break;
case 2:
{
cout<<"x1\t"<<"x2\t"<<"b\t"<<"t\t"<<"i/p\t"<<"o/p\t"<<"dw1\t"<<"dw2\t"<<"db\t"<<"nw1\t"<<"nw2\t"<<"nb\t"<<endl;
int t[]={0,1,1,1};
do
{
for(i=0;i<4;i++)
{
ip=x1[i]*w1+x2[i]*w2+b;
if(ip>=0)
op=1;
else
op=0;
if(t[i]==op)
{
f[i]=true;
dw1=dw2=db=0;
}
else
{
dw1=(t[i]-op)*x1[i];
dw2=(t[i]-op)*x2[i];
db=t[i]-op;
}
w1+=dw1;
w2+=dw2;
b+=db;
cout<<x1[i]<<"\t"<<x2[i]<<"\t"<<1<<"\t"<<t[i]<<"\t"<<ip<<"\t"<<op<<"\t"<<dw1<<"\t"<<dw2<<"\t"<<db<<"\t"<<w1<<"\t"<<w2<<"\t"<<b<<"\t\n";
}
ch=true;
for(j=0;j<4;j++)
{
if(f[j]==false)
ch=false;
f[j]=false;
}
cout<<"\n";
}while(!ch);
cout<<"End w1 w2 b: "<<w1<<" "<<w2<<" "<<b;
}break;
case 3:
{
cout<<"x\t"<<"b\t"<<"t\t"<<"i/p\t"<<"o/p\t"<<"dw\t"<<"db\t"<<"nw\t"<<"nb\t\n";
int t[]={1,0};
do
{
for(i=0;i<2;i++)
{
ip=nt[i]*nw+b;
if(ip>=0)
op=1;
else
op=0;
if(t[i]==op)
{
f[i]=true;
dnw=db=0;
}
else
{
dnw=(t[i]-op)*nt[i];
db=t[i]-op;
}
nw+=dnw;
b+=db;
cout<<nt[i]<<"\t"<<1<<"\t"<<t[i]<<"\t"<<ip<<"\t"<<op<<"\t"<<dnw<<"\t"<<db<<"\t"<<nw<<"\t"<<b<<"\t\n";
}
ch=true;
for(j=0;j<2;j++)
{
if(f[j]==false)
ch=false;
f[j]=false;
}
cout<<"\n";
}while(!ch);
cout<<"End w b: "<<nw<<" "<<b;
}break;
default:
cout<<"WRONG INPUT";
}
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKaW50IG1haW4oKQp7CiAgICBpbnQgaSxqLGNob2ljZTsKICAgIGludCBudFtdPXswLDF9OwogICAgaW50IHgxW109ezAsMCwxLDF9OwogICAgaW50IHgyW109ezAsMSwwLDF9OwogICAgaW50IGIsdzEsdzIsbncsaXAsb3A7CiAgICB3MT13Mj1iPW53PTA7CiAgICBpbnQgZHcxLGR3MixkbncsZGI7CiAgICBib29sIGZbXT17ZmFsc2UsZmFsc2UsZmFsc2UsZmFsc2V9OwogICAgYm9vbCBjaDsKICAgIGNvdXQ8PCJQRVJDRVBUUk9OIE1FVEhPRFxuMS1BTkRcbjItT1JcbjMtTk9UXG5FbnRlciB5b3VyIGNob2ljZTogIjsKICAgIGNpbj4+Y2hvaWNlOwogICAgc3dpdGNoKGNob2ljZSkKICAgIHsKICAgICAgICBjYXNlIDE6CiAgICB7CiAgICAgICAgY291dDw8IngxXHQiPDwieDJcdCI8PCJiXHQiPDwidFx0Ijw8ImkvcFx0Ijw8Im8vcFx0Ijw8ImR3MVx0Ijw8ImR3Mlx0Ijw8ImRiXHQiPDwibncxXHQiPDwibncyXHQiPDwibmJcdCI8PGVuZGw7CiAgICAgICAgaW50IHRbXT17MCwwLDAsMX07CiAgICAgICAgZG8KICAgICAgICB7CiAgICAgICAgICAgZm9yKGk9MDtpPDQ7aSsrKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpcD14MVtpXSp3MSt4MltpXSp3MitiOwogICAgICAgICAgICAgICAgaWYoaXA+PTApCiAgICAgICAgICAgICAgICAgICAgb3A9MTsKICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICBvcD0wOwogICAgICAgICAgICAgICAgaWYodFtpXT09b3ApCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgZltpXT10cnVlOwogICAgICAgICAgICAgICAgICAgIGR3MT1kdzI9ZGI9MDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBkdzE9KHRbaV0tb3ApKngxW2ldOwogICAgICAgICAgICAgICAgICAgIGR3Mj0odFtpXS1vcCkqeDJbaV07CiAgICAgICAgICAgICAgICAgICAgZGI9dFtpXS1vcDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHcxKz1kdzE7CiAgICAgICAgICAgICAgICB3Mis9ZHcyOwogICAgICAgICAgICAgICAgYis9ZGI7CiAgICAgICAgICAgICAgICBjb3V0PDx4MVtpXTw8Ilx0Ijw8eDJbaV08PCJcdCI8PDE8PCJcdCI8PHRbaV08PCJcdCI8PGlwPDwiXHQiPDxvcDw8Ilx0Ijw8ZHcxPDwiXHQiPDxkdzI8PCJcdCI8PGRiPDwiXHQiPDx3MTw8Ilx0Ijw8dzI8PCJcdCI8PGI8PCJcdFxuIjsKICAgICAgICAgICAgfQogICAgICAgICAgICBjaD10cnVlOwogICAgICAgICAgICBmb3Ioaj0wO2o8NDtqKyspCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGlmKGZbal09PWZhbHNlKQogICAgICAgICAgICAgICAgICAgIGNoPWZhbHNlOwogICAgICAgICAgICAgICAgZltqXT1mYWxzZTsKICAgICAgICAgICAgfQogICAgICAgICAgICBjb3V0PDwiXG4iOwogICAgICAgIH13aGlsZSghY2gpOwogICAgICAgIGNvdXQ8PCJFbmQgdzEgdzIgYjogIjw8dzE8PCIgIjw8dzI8PCIgIjw8YjsKICAgIH1icmVhazsKICAgIGNhc2UgMjoKICAgIHsKICAgICAgICBjb3V0PDwieDFcdCI8PCJ4Mlx0Ijw8ImJcdCI8PCJ0XHQiPDwiaS9wXHQiPDwiby9wXHQiPDwiZHcxXHQiPDwiZHcyXHQiPDwiZGJcdCI8PCJudzFcdCI8PCJudzJcdCI8PCJuYlx0Ijw8ZW5kbDsKICAgICAgICBpbnQgdFtdPXswLDEsMSwxfTsKICAgICAgICBkbwogICAgICAgIHsKICAgICAgICAgICAgZm9yKGk9MDtpPDQ7aSsrKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpcD14MVtpXSp3MSt4MltpXSp3MitiOwogICAgICAgICAgICAgICAgaWYoaXA+PTApCiAgICAgICAgICAgICAgICAgICAgb3A9MTsKICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICBvcD0wOwogICAgICAgICAgICAgICAgaWYodFtpXT09b3ApCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgZltpXT10cnVlOwogICAgICAgICAgICAgICAgICAgIGR3MT1kdzI9ZGI9MDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBkdzE9KHRbaV0tb3ApKngxW2ldOwogICAgICAgICAgICAgICAgICAgIGR3Mj0odFtpXS1vcCkqeDJbaV07CiAgICAgICAgICAgICAgICAgICAgZGI9dFtpXS1vcDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHcxKz1kdzE7CiAgICAgICAgICAgICAgICB3Mis9ZHcyOwogICAgICAgICAgICAgICAgYis9ZGI7CiAgICAgICAgICAgIGNvdXQ8PHgxW2ldPDwiXHQiPDx4MltpXTw8Ilx0Ijw8MTw8Ilx0Ijw8dFtpXTw8Ilx0Ijw8aXA8PCJcdCI8PG9wPDwiXHQiPDxkdzE8PCJcdCI8PGR3Mjw8Ilx0Ijw8ZGI8PCJcdCI8PHcxPDwiXHQiPDx3Mjw8Ilx0Ijw8Yjw8Ilx0XG4iOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGNoPXRydWU7CiAgICAgICAgICAgIGZvcihqPTA7ajw0O2orKykKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWYoZltqXT09ZmFsc2UpCiAgICAgICAgICAgICAgICAgICAgY2g9ZmFsc2U7CiAgICAgICAgICAgICAgICBmW2pdPWZhbHNlOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGNvdXQ8PCJcbiI7CiAgICAgICAgfXdoaWxlKCFjaCk7CiAgICAgICAgY291dDw8IkVuZCB3MSB3MiBiOiAiPDx3MTw8IiAiPDx3Mjw8IiAiPDxiOwogICAgfWJyZWFrOwogICAgY2FzZSAzOgogICAgewogICAgICAgIGNvdXQ8PCJ4XHQiPDwiYlx0Ijw8InRcdCI8PCJpL3BcdCI8PCJvL3BcdCI8PCJkd1x0Ijw8ImRiXHQiPDwibndcdCI8PCJuYlx0XG4iOwogICAgICAgIGludCB0W109ezEsMH07CiAgICAgICAgZG8KICAgICAgICB7CiAgICAgICAgICAgIGZvcihpPTA7aTwyO2krKykKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaXA9bnRbaV0qbncrYjsKICAgICAgICAgICAgICAgIGlmKGlwPj0wKQogICAgICAgICAgICAgICAgICAgIG9wPTE7CiAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgb3A9MDsKICAgICAgICAgICAgICAgIGlmKHRbaV09PW9wKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGZbaV09dHJ1ZTsKICAgICAgICAgICAgICAgICAgICBkbnc9ZGI9MDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBkbnc9KHRbaV0tb3ApKm50W2ldOwogICAgICAgICAgICAgICAgICAgIGRiPXRbaV0tb3A7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBudys9ZG53OwogICAgICAgICAgICAgICAgYis9ZGI7CiAgICAgICAgICAgICAgICBjb3V0PDxudFtpXTw8Ilx0Ijw8MTw8Ilx0Ijw8dFtpXTw8Ilx0Ijw8aXA8PCJcdCI8PG9wPDwiXHQiPDxkbnc8PCJcdCI8PGRiPDwiXHQiPDxudzw8Ilx0Ijw8Yjw8Ilx0XG4iOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGNoPXRydWU7CiAgICAgICAgICAgIGZvcihqPTA7ajwyO2orKykKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWYoZltqXT09ZmFsc2UpCiAgICAgICAgICAgICAgICAgICAgY2g9ZmFsc2U7CiAgICAgICAgICAgICAgICBmW2pdPWZhbHNlOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGNvdXQ8PCJcbiI7CiAgICAgICAgfXdoaWxlKCFjaCk7CiAgICAgICAgY291dDw8IkVuZCB3IGI6ICI8PG53PDwiICI8PGI7CiAgICB9YnJlYWs7CiAgICBkZWZhdWx0OgogICAgICAgIGNvdXQ8PCJXUk9ORyBJTlBVVCI7CiAgICB9Cn0K