VİRÜS PROBLEMİ-(BİLGİSAYARLARIN KARŞILIKLI HABERLEŞMESİ)

Yayınlandı: Haziran 22, 2010 / Algoritmalar, C/C++
Etiketler:, , , , , , , , , , ,

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İ

Reklamlar

Bir Cevap Yazın

Aşağıya bilgilerinizi girin veya oturum açmak için bir simgeye tıklayın:

WordPress.com Logosu

WordPress.com hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap / Değiştir )

Twitter resmi

Twitter hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap / Değiştir )

Facebook fotoğrafı

Facebook hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap / Değiştir )

Google+ fotoğrafı

Google+ hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap / Değiştir )

Connecting to %s