Pagini recente » Cod sursa (job #1811609) | Cod sursa (job #441560)
Cod sursa(job #441560)
#include<stdio.h>
#include<stdlib.h>
int **M;
int **Mr;
int **mat;
FILE *f;
int** allocMatrix(int N)
{
int i;
int **matr = (int**)malloc(255*sizeof(int*)); // aloca memorie pt n linii
for(i=0;i<N;++i)
matr[i] = (int*)malloc(255*sizeof(int)); // aloca coloanele pt fiecare linie
return matr;
}
int** readMatrix(const char* fis,int* N){
int i,j;
FILE* f = fopen(fis,"r");
fscanf(f,"%d",N); // citesc numarul de linii si de coloane
for(i=0;i<(*N);i++)
{
for (j=0;j<(*N);j++)
{
fscanf(f,"%01d",&mat[i][j]);
}
}
fclose(f);
return mat;
}
void printMatrix(int N){
int i,j,maxp=0,k=0, maxr=0, p=0;
for(i=0; i<N; ++i)
{
for (j=0; j<N; j++)
{
if (M[i][j] > maxp)
{
maxp = M[i][j];
k=1; // in k retin numarul de patrate cu latura maxima
}
else if (M[i][j] == maxp)
k++;
if (Mr[i][j] > maxr)
{
maxr = Mr[i][j];
p=1; // in p retin numarul de romburi cu latura maxima
}
else if (Mr[i][j] == maxr)
p++;
}
}
fprintf(f,"%d ", maxp);
fprintf(f,"%d\n", k);
fprintf(f,"%d ", maxr);
fprintf(f,"%d", p);
}
// minimul pentru patrat :
int minim(int** mat,int i,int j)
{
int min=1000;
if ( mat[i][j] == 0 )
{
return 0;
}
if( i == 0 || j == 0 ) // in cazul cand nu sunt vecini
{
return mat[i][j];
}
if ( mat [i][j] == 1)
{
//pentru patrat calculez minimul vecinilor
if (mat[i][j-1] && mat[i-1][j-1] && mat[i-1][j])
{
if (M [i][j-1] < min)
{
min = M[i][j-1];
}
if (M [i-1][j-1] < min)
{
min = M[i-1][j-1];
}
if (M [i-1][j] < min)
{
min = M[i-1][j];
}
return min+1;
}
return 1;
}
return 0;
}
// minimul pentru romb :
int minimr(int** mat,int i,int j,int n)
{
int min=1000;
if ( mat[i][j] == 0 )
{
return 0;
}
if( i == 0 || j == 0 || j==n-1) // in cazul cand nu sunt vecini
{
return mat[i][j];
}
if ( mat [i][j] == 1)
{
// pentru romb aflu minimul dintre vecinii de deasupra
if (mat [i-1][j-1] == 1 && mat [i-1][j] == 1 && mat [i-1][j+1] == 1)
{
if (Mr[i-1][j-1] < min)
{
min = Mr[i-1][j-1];
}
if (Mr[i-1][j] < min)
{
min = Mr[i-1][j];
}
if (Mr[i-1][j+1] < min)
{
min = Mr[i-1][j+1];
}
}
else
return 1;
if (i-2*min >=0 && mat [i-2*min][j] == 1)
{
return min+1;
}
return min;
}
return 0;
}
int main ()
{
int N=3,i,j;
mat = allocMatrix(255);
mat = readMatrix("figuri2.in",&N);
M = allocMatrix(N);
Mr = allocMatrix(N);
f = fopen("figuri2.out","w");
for (i=0; i<N; i++)
{
for (j=0; j<N; j++)
{
M[i][j] = minim(mat, i, j);
Mr[i][j] = minimr(mat, i, j, N);
}
printf("\n");
}
printMatrix(N);
fclose(f);
return 0;
}