#include <stdio.h> #include <stdlib.h> #define MAX 100 struct Caratteristiche{ char carattere; int pos[2]; int numero_asterischi; }; typedef struct Caratteristiche caratteristiche; void leggi_matrice(char mat[MAX][MAX], int *rig, int *col); void stampa_matrice(char mat[MAX][MAX], int rig, int col); void definisci_struct(char mat[MAX][MAX], int rig, int col, caratteristiche vet[MAX*MAX]); void creaMatrice(caratteristiche vet[MAX*MAX],int rig, int col, int newMatrix[MAX][MAX]); int main() { char matrice[MAX][MAX]; int rig = 0; int col= 0; int newMat[MAX][MAX]; leggi_matrice(matrice,&rig, &col); stampa_matrice(matrice, rig, col); caratteristiche vettore[MAX*MAX]; definisci_struct(matrice,rig, col, vettore); creaMatrice(vettore,rig,col,newMat); printf("\n"); for(int i=0;i<rig;i++){ for(int j=0;j<col;j++) printf("%d", newMat[i][j]); printf("\n"); } } void leggi_matrice(char mat[MAX][MAX], int *rig, int *col){ FILE *fp; fp = fopen("input.txt","r"); if(fp!=NULL){ fscanf(fp,"%d",rig); fscanf(fp,"%d",col); fgetc(fp); for(int i=0;i<*rig;i++) { for(int j=0; j<*col; j++) { fscanf(fp,"%c",&mat[i][j]); } fgetc(fp); } fclose(fp); } else{ printf("errore, file non esiste"); } } void stampa_matrice(char mat[MAX][MAX], int rig, int col){ for(int i=0;i<rig;i++){ for(int j=0;j<col;j++) printf("%c", mat[i][j]); printf("\n"); } } void definisci_struct(char mat[MAX][MAX], int rig, int col, caratteristiche vet[MAX*MAX]){ int contaAsterischi = 0; for(int i=0; i<rig;i++){ for(int j=0; j<col; j++) { vet[i*col+j].carattere = mat[i][j]; vet[i*col+j].pos[0] = i; vet[i*col+j].pos[1] = j; if(i!=0 && j!= 0) { if(mat[i-1][j-1] == '*') { contaAsterischi++; } } if(i!=0) { if(mat[i-1][j] == '*') { contaAsterischi++; } } if(i!=0 && j!=col-1) { if(mat[i-1][j+1] == '*') { contaAsterischi++; } } if(j!=0) { if(mat[i][j-1]=='*') { contaAsterischi++; } } if(j!=col-1) { if(mat[i][j+1] == '*') { contaAsterischi++; } } if(i!=rig-1 && j!=0) { if(mat[i+1][j-1] == '*'){ contaAsterischi++; } } if(i!=rig-1) { if(mat[i+1][j] == '*') { contaAsterischi++; } } if(i!=rig-1 && j!= col-1) { if(mat[i+1][j+1] == '*') { contaAsterischi++; } } vet[i*col+j].numero_asterischi = contaAsterischi; contaAsterischi = 0; } } } void creaMatrice(caratteristiche vet[MAX*MAX],int rig, int col, int newMatrix[MAX][MAX]){ for(int i=0; i<rig; i++){ for(int j=0; j<col; j++){ if(vet[i*col+j].carattere == '*'){ newMatrix[i][j] = 0; } else if(vet[i*col+j].carattere == '-') { newMatrix[i][j] = vet[i*col+j].numero_asterischi; } else{ printf("ERRORE"); } } } }