1
0
Files
2024-03-22 17:37:24 +01:00

89 lines
1.9 KiB
C

// Laboratorio 2 - Esercizio 2
// Matteo Schiff - s295565
#include <stdio.h>
#include <stdlib.h>
int ** matrmalloc(int * nc, int * nr) {
FILE *fp_read;
if ((fp_read = fopen("mat.txt", "r")) == NULL)
{
puts("Impossibile aprire il file");
return NULL;
}
fscanf(fp_read, "%u %u\n", nr, nc);
int ** mat = malloc(*nr * sizeof(int *));
for (int i = 0; i < *nr; i++) {
int * row = malloc(*nc * sizeof(int));
for (int j = 0; j < *nc; j++) {
fscanf(fp_read, "%d ", &row[j]);
}
mat[i] = row;
}
fclose(fp_read);
return mat;
}
void matrfree(int **mat, int nr) {
for (int i = 0; i < nr; i++) {
free(mat[i]);
}
free(mat);
}
void separa(int **mat, int nr, int nc, int ** bianchi, int ** neri, int * nbianchi, int * nneri) {
int a = nc % 2;
int x = nc / 2;
int b = nr % 2;
int y = nr / 2;
*nneri = (x + a) * y + x * (y + b);
*nbianchi = x * y + (x+a) * (y + b);
*bianchi = malloc(*nbianchi * sizeof(int));
*neri = malloc(*nneri * sizeof(int));
int conta_bianchi = 0, conta_neri = 0;
for (int i = 0; i < nr; i++) {
for (int j = 0; j < nc; j++) {
if ((i+j) % 2 == 0) {
(*bianchi)[conta_bianchi++] = mat[i][j];
} else {
(*neri)[conta_neri++] = mat[i][j];
}
}
}
}
int main(int argc, char ** argv) {
int nc, nr;
int ** mat = matrmalloc(&nc, &nr);
if (mat == NULL) {
return 1;
}
int *bianchi, *neri, n_bianchi, n_neri;
separa(mat, nr, nc, &bianchi, &neri, &n_bianchi, &n_neri);
puts("Numeri su caselle bianche:");
for (int i = 0; i < n_bianchi; i++)
printf("%u\n", bianchi[i]);
puts("Numeri su caselle nere:");
for (int i = 0; i < n_neri; i++)
printf("%u\n", neri[i]);
matrfree(mat, nr);
free(bianchi);
free(neri);
return 0;
}