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

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İ

About Mehmet Salih Deveci

I am Founder of SysDBASoft IT and IT Tutorial and Certified Expert about Oracle & SQL Server database, Goldengate, Exadata Machine, Oracle Database Appliance administrator with 10+years experience.I have OCA, OCP, OCE RAC Expert Certificates I have worked 100+ Banking, Insurance, Finance, Telco and etc. clients as a Consultant, Insource or Outsource.I have done 200+ Operations in this clients such as Exadata Installation & PoC & Migration & Upgrade, Oracle & SQL Server Database Upgrade, Oracle RAC Installation, SQL Server AlwaysOn Installation, Database Migration, Disaster Recovery, Backup Restore, Performance Tuning, Periodic Healthchecks.I have done 2000+ Table replication with Goldengate or SQL Server Replication tool for DWH Databases in many clients.If you need Oracle DBA, SQL Server DBA, APPS DBA,  Exadata, Goldengate, EBS Consultancy and Training you can send my email adress [email protected].-                                                                                                                                                                                                                                                 -Oracle DBA, SQL Server DBA, APPS DBA,  Exadata, Goldengate, EBS ve linux Danışmanlık ve Eğitim için  [email protected] a mail atabilirsiniz.

Leave a Reply

Your email address will not be published. Required fields are marked *