Documente Academic
Documente Profesional
Documente Cultură
h>
#include <stdlib.h>
#define max 1010
int Acopy[max][max],A[max][max],n,m,k,nrmax=0;
char optiune;
void read()
{
int i,j;
scanf("%c%d%d%d",&optiune,&m,&n,&k);
for(i=1; i<=n; i++)
for(j=1; j<=m; j++)
scanf("%d",&A[i][j]);
}
void print()
{
int i,j;
for(i=1; i<=n; i++)
{
for(j=1; j<=m; j++)
printf("%d ",A[i][j]);
printf("\n");
}
}
void copy()
//Subprogram pentru reactualizarea grid-ului
{
int i,j;
for(i=1; i<=n; i++)
for(j=1; j<=m; j++)
A[i][j]=Acopy[i][j];
}
void bordare()
//In cazul toroidului matricea se va borda dupa 3
cazuri, pentru a nu se lua anumiti vecini de 2 ori{
{
int i,j;
if(n<=2&&m>2)
// Cazul I, nu vom actualiza colturile
{
for(i=1; i<=n; i++)
{
A[i][0]=A[i][m];
A[i][m+1]=A[i][1];
}
}
else if(m<=2&&n>2)
//Cazul II, nu vom actualiza colturile
{
for(i=1; i<=m; i++)
{
A[0][i]=A[n][i];
A[n+1][i]=A[1][i];
}
}
else
//Cazul III, vom actualiza colturile, fiecare celu
la putand avea 8 vecini
{
for(i=1; i<=m; i++)
{
A[0][i]=A[n][i];
A[n+1][i]=A[1][i];
}
for(i=1; i<=n; i++)
{
A[i][0]=A[i][m];
A[i][m+1]=A[i][1];
}
//Actulizez colturile
A[0][0]=A[n][m];
A[0][m+1]=A[n][1];
A[n+1][0]=A[1][m];
A[n+1][m+1]=A[1][1];
}
}
void nr_celule_vii()
ari populatii de celule vii
{
int i,j,nr=0;
Acopy[i][j]=1;
else if(A[i][j]==1&&vecini>3)
Acopy[i][j]=0;
else if(A[i][j]==0&&vecini==3)
Acopy[i][j]=1;
}
}
void generare_Plan()
{
int i,j,d,generari;
for(generari=1; generari<=k; generari++)
{
generare();
copy();
//Folosind functia copy, reactualizez m
atricea initiala cu schimbarile facute
}
nr_celule_vii();
}
void generare_Toroid()
{
int i,j,generari,d;
for(generari=1; generari<=k; generari++)
{
if(n<=2&&m<=2)
{
nr_celule_vii();
generare_Plan();
}
else
{
nr_celule_vii();
bordare();
//Pt cazul toroidului principiul
de functionare este acelasi, difera doar vecinii
generare();
//celulelor marginale care vor avea si ele 8
vecini, in acest caz matricea va fi bordata
}
copy();
}
nr_celule_vii();
}
int main()
{
float procent;
read();
switch(optiune)
{
case 'P':
{
generare_Plan();
printf("\n");
print();
procent=gradM_populare();
printf("%.3f%c",procent,'%');
}
break;
case 'T':
{
generare_Toroid();
printf("\n");
print();
procent=gradM_populare();
printf("%.3f%c",procent,'%');
}
break;
}
return 0;
}