codice:
#include<stdio.h>
#include<string.h>
#define M 100
int getline(char[], FILE*);
void riempiuno(int[][], int[][]);
int carica(char *, char[][]);
void output (char[][] , int[][] , int[][], int);
void itoa(int, char[]);
void reverse (char[]);
void ricorda(char[][], int[][], int);
void ricorda1(char[][], int[][], int);
void stampa (char *, char[][], int);
main(int argc, char *argv[])
{
int q;int r,c;
char matrice [M] [M];
int ver[M][4],
ori[M][4];
char finale[M][M];
riempiuno(ori,ver);
q=carica(argv[1], matrice);
ricorda(matrice, ori, q);
q=carica(argv[2], matrice);
ricorda1(matrice, ver, q);
output(finale, ori, ver, q);
stampa(argv[3], finale,q);
}
int carica (char *input, char matrice[][M])
{
FILE *fin;
fin=fopen(input, "r");
char line[M];
int r,c,len;
r=0;
while((len=getline(line, fin))>0)
{
for(c=0; c<len; c++)
matrice[r][c]=line[c];
r++;
}
return len;
}
int getline(char line[] , FILE *f )
{
int i=0,c;
while((c=getc(f))!='\0' && c!= '\n')
line[i++]=c;
if (c=='\n')
line[i++]=c;
line[i]='\0';
return i;
}
void ricorda( char matrice[M][M], int ori[M][3], int e)
{
int q,w,r,i=0,c;
for (r=0; r<e; r++)
{
for (c=0; c<e; c++)
{
if(matrice[r][c]== 'x' && matrice [r][c-1]!='x')
w=c;
if(matrice[r][c]== 'x' && matrice [r][c+1]!= 'x')
{
q=c;
ori[i][0]=r;
ori[i][1]=w;
ori[i][2]=q-w;
i++;
}
}
}
}
void ricorda1( char matrice[M][M], int ori[M][3], int e)
{
int q,w,r,c;
int i=0;
for (r=0; r<e; r++)
{
for (c=0; c<e; c++)
{
if(matrice[c][r]== 'x' && matrice [c][r-1]!='x')
w=r;
if(matrice[c][r]== 'x' && matrice [c][r+1]!= 'x')
{
q=r;
ori[i][0]=c;
ori[i][1]=w;
ori[i][2]=q-w;
i++;
} }
}
}
void riempiuno(int ori[M][3], int ver[M][3])
{int r,c ;
for(r=0; r<M; r++)
for(c=0; c<3; c++)
{
ori[r][c]=-1;
ver[r][c]=-1;
}
}
void output(char matrice[M][M], int ori[M][3], int ver[M][3],int e)
{ int j,r,c;
char slun[2];
for(r=0; r<e; r++)
for(c=0; c<e; c++)
matrice[r][c]= '.';
for(r=0; r<M; r++)
{
if(ori[r][0]>=0)
{
matrice[ori[r][0]][ori[r][1]]='O';
itoa(ori[r][2],slun);
for(j=0;slun[j]!='\0'; j++);
matrice[ori[r][0]][ori[r][1]+j+1]=slun[j];
}
}
for(r=0; r<M; r++)
{
if(ver[r][0]>=0)
{
matrice[ver[r][0]][ver[r][1]]='V';
itoa(ver[r][2],slun);
for(j=0;slun[j]!='\0'; j++);
matrice[ver[r][0]][ver[r][1]+j+1]=slun[j];
}
}
}
void itoa(int n, char s[])
{
int i=0;
do{
s[i++]=n%10 + '0';
}while((n/=10)>0);
s[i]='\0';
reverse(s);
}
void reverse(char s[]){
int c,i,j;
for(i=0, j=strlen(s)-1; i<j; i++,j--) {
c = s[i];
s[i]=s[j];
s[j]=c;
}
}
void stampa(char *input, char matrice[][M], int q)
{
FILE *fout;
int r,c;
fout=fopen(input,"w");
for(r=0; r<q; r++)
{
for(c=0; c<q; c++)
fprintf(fout, "%c", matrice[r][c]);
fprintf(fout, "\n");
}
}