Virüs Problemi Algoritmik problemler içerisinde En ilginç problemlerden birisi olmuştur.Burda herhangi 2 bilgisayar karşılıklı haberleşirken kendisinde bulunan virüsü karşı tarafa iletmesiyle birlikte gerçekleşen bir algoritmadır.Bu problem 2 aşamaya ayrılabilir 1 çift yönlü haberleşme yani A ile B bilgisayarı haberleşirken iki bilgisayarın virüsü birbirine geçme koşuluyla A nın virüsü ab olurken B ninkide yine ba olmuş olur Ancak Tek yönlü iletişimde A B ile haberşirse A nın virüsü ab olurken B ninki b olarak kalır.Ayrıca Tek Yönlü iletişimin Genel Analitik formülü ( 2*n-2 ) iken Çift Yönlünün ki ise ( 2*n -4 ) tür.Aşağıda C++ kodu verilmiştir iyi virüsleşmeler.
5 bilgisayarın tek yönlü iletişimi:
şimdide 5 bilgisayarın çift yönlü iletişimini görelim
#include<iostream>
using namespace std;
char **p,**q;
int i,x,j,k,counter=0;
bool control(char **p,int x)
{
bool bayrak=false;
for(i=0;i<x;i++)
{
for(j=0;j<x;j++)
if(p[i][j]==”)
{
bayrak=true;
break;
}
}
return bayrak;
}
void change(char **p,int x)
{
int t=x-1,y=x-1;
q=new char *[x];
for(i=0;i<x;i++)
q[i]=new char [x];
for(int k=0;k<x;k++)
{
for(int l=0;l<x;l++)
q[k][l]=p[t][y–];
t–;y=x-1;
}
int a=0,b=0;
for(int k=0;k<x;k++)
{
for(int l=0;l<x;l++)
p[k][l]=q[a][b++];
a++;b=0;
}
}
void recursive(char **p,int x)
{
bool bayrak=false;
int count=0;
for(i=0;i<x-1;i++)
{
for(j=0;j<x;j++)
{
for(k=0;k<x;k++)
if(p[i][j]!=p[i+1][k])
count++;
if(count==x)
{bayrak=true;
for(int b=0;b<x;b++)
{
if(p[i+1][b]==”)
{
p[i+1][b]=p[i][j];
break;
}}
}
count=0;
}
if(bayrak)
counter++;
bayrak=false;
}
if(control(p,x)){
change(p,x);
recursive(p,x);
}
}
void print(char **p,int x)
{
for(i=0;i<x;i++)
{
cout<<i+1<<“.Bilgisayarin Virusleri….”;
for(j=0;j<x;j++)
cout<<p[i][j];
cout<<endl;
}
cout<<endl<<endl;
cout<<“Counter “<<counter;
cout<<endl<<endl;
}
void kral(char **p,int x)
{
int count=0;
bool bayrak=false;
for(i=0;i<x-1;i++)
{
if(i>=0&&i<x-3){
for(j=0;j<x;j++)
if(p[i][j]!=”)
for(k=0;k<x;k++)
{
if(p[i+1][k]==”)
{
p[i+1][k]=p[i][j];
bayrak=true;
break;
}
}
if(bayrak)
counter++;
bayrak=false;
for(k=0;k<x;k++)
if(p[i+1][k]!=”)
{
for(int m=0;m<x;m++)
if(p[i][m]==p[i+1][k])
count++;
if(count==0)
{
for(int t=0;t<x;t++)
if(p[i][t]==”)
{
p[i][t]=p[i+1][k];
break;
}
}
count=0;
}
}
else if(i>x-4&&i<x)
{
for(i=x-2;i<x-1;i++)
{
for(j=0;j<x;j++)
if(p[i][j]!=”)
{
for(k=0;k<x;k++)
if(p[i+1][k]==”)
{
p[i+1][k]=p[i][j];
bayrak=true;
break;
}
if(bayrak)
counter++;
bayrak=false;
for(k=0;k<x;k++)
if(p[i+1][k]!=”)
{
for(int m=0;m<x;m++)
if(p[i][m]==p[i+1][k])
count++;
if(count==0)
{
for(int t=0;t<x;t++)
if(p[i][t]==”)
{
p[i][t]=p[i+1][k];
break;
}
}
count=0;
}
}
} }
}
}
void kuheylan(char **p,int x)
{
bool bayrak=false;
int count=0;
for(i=3;i<x-1;i++)
{
for(j=0;j<x;j++)
{
for(k=0;k<x;k++)
if(p[i][j]!=p[i+1][k])
count++;
if(count==x)
{bayrak=true;
for(int b=0;b<x;b++)
{
if(p[i+1][b]==”)
{
p[i+1][b]=p[i][j];
break;
}}
}
count=0;
}
if(bayrak)
counter++;
bayrak=false;
}
}
void rekursif(char **p,int x)
{
bool bayrak=false;
int t=0,r=0;
for(i=1;i<2;i++)
{
for(j=0;j<x;j++)
if(p[i][j]!=”)
{
for(k=0;k<x;k++)
if(p[i+1][k]==”)
{
p[i+1][k]=p[i][j];
bayrak=true;
break;
}
}
if(bayrak)
counter++;
bayrak=false;
}
for(i=2;i<3;i++)
{
for(j=0;j<x;j++)
{
for(int m=0;m<x;m++)
if(p[i][j]==p[i-1][m])
t++;
if(t==0)
{
for(k=0;k<x;k++)
if(p[i-1][k]==”)
{
p[i-1][k]=p[i][j];
break;
}
}t=0;
}
}
for(i=0;i<1;i++)
{
for(j=0;j<x;j++)
if(p[i][j]!=”)
{
for(k=0;k<x;k++)
if(p[i+3][k]==”)
{
p[i+3][k]=p[i][j];
bayrak=true;
break;
}
}
if(bayrak)
counter++;
bayrak=false;
}
for(i=3;i<4;i++)
{
for(j=0;j<x;j++)
{
for(int m=0;m<x;m++)
if(p[i][j]==p[i-3][m])
r++;
if(r==0)
{
for(k=0;k<x;k++)
if(p[i-3][k]==”)
{
p[i-3][k]=p[i][j];
break;
}
}
r=0;
}
}
kuheylan(p,x);
}
void define(char **p,int x,int y)
{
p=new char *[x];
for(i=0;i<x;i++)
p[i]=new char [x];
for(i=0;i<x;i++)
{
for(j=0;j<x;j++){
p[i][j]=”;
if(i==j)
p[i][j]=97+i;
} }
if(y==1)
{
recursive(p,x);
print(p,x);
}
else
{
kral(p,x);
change(p,x);
rekursif(p,x);
print(p,x);
}
}
main()
{ int y;
cout<<“\t\tVirus Kontrol sistemine Hosgeldiniz….\n\n”;
cout<<“Bilgisayar Sayisini Giriniz:”;
cin>>x;
cout<<“\nTek Yonlu iletisim icin 1 e Cift yonlu iletisim icin 2 e bas..”;
cin>>y;
if(y==1)
define(p,x,y);
else
{
define(p,x,y);
}
system (“pause”);
}
MEHMET SALİH DEVECİ
YAZILIM MÜHENDİSİ