Fatto ti ringrazio, ma comunque il problema non è risolto!! Se la matrice viene acquisita correttamente (anche con la correzione che mi hai suggerito) perché quando la passo all'altra funzione mi riconosce solo l'elemento 0,0 ?
Fatto ti ringrazio, ma comunque il problema non è risolto!! Se la matrice viene acquisita correttamente (anche con la correzione che mi hai suggerito) perché quando la passo all'altra funzione mi riconosce solo l'elemento 0,0 ?
Ma l'hai ricompilato con le modifiche e provato? A me dà questo risultato
Regione 1: estr. sup. SX = <0,0> b = 2, h = 1, Area = 2
Regione 2: estr. sup. SX = <1,2> b = 2, h = 2, Area = 4
Regione 3: estr. sup. SX = <2,5> b = 1, h = 3, Area = 3
Regione 4: estr. sup. SX = <4,0> b = 1, h = 1, Area = 1
Regione 5: estr. sup. SX = <4,2> b = 1, h = 1, Area = 1
P.S. Correggi il \code in /code nel post con il codice in modo che si legga.
No MP tecnici (non rispondo nemmeno!), usa il forum.
Si giuro l'ho fatto! Ho cambiato le intestazioni delle funzioni sia nel prototipo che nella dichiarazione come hai detto tu, ma niente ottengo lo stesso risultato... visto che a te funziona allora vuol dire che è il mio compilatore o pc il problema proprio come speravo, ciò vuol dire che il codice è giusto! Ti ringrazio dei suggerimenti!
ps la prossima volta proverò a impostare il tag code correttamente, purtroppo non mi faceva già più accedere alla domanda per modificarla dopo che hai risposto tu.
Mi sembra strano ... riproponi adesso tutto il codice modificato (con i tag code corretti) così lo controllo ...
No MP tecnici (non rispondo nemmeno!), usa il forum.
codice:#include <stdio.h> #include <stdlib.h> #include <string.h> #include <ctype.h> #define FILE_IN "file_in.txt" #define MAXR 50 int leggiMatrice(int maxr, int m[][maxr], int *r, int *c); int riconosciRegione(int nr, int nc, int M[][nc],int r, int c, int *bp, int *hp); int main() { int b,h,i,j,nr,nc,p; int regione=1; int M[MAXR][MAXR]; p = leggiMatrice(MAXR,M,&nr,&nc); if(p==-1) { printf("ERRORE: impossibile aprire %s.", FILE_IN); exit(-2); } if(p==0) { printf("ERRORE: le dimensioni della matrice devono essere al piu' %d x %d.", MAXR, MAXR); exit (-1); } for(i=0; i<nr; i++) for(j=0; j<nc; j++) if(riconosciRegione(nr,nc,M,i, j, &b, &h)==1) { printf("Regione %d: estr. sup. SX = <%d,%d> b = %d, h = %d, Area = %d\n", regione, i, j, b, h, b*h); regione++; } return 0; } int leggiMatrice(int maxr, int m[][maxr], int *r, int *c) { int i,j; FILE *fr; fr=fopen(FILE_IN, "r"); if(fr==NULL) return -1; fscanf(fr, "%d %d", &(*r), &(*c)); if((*r) > maxr || (*c) > maxr) return 0; for(i=0; i<(*r); i++) for(j=0; j<(*c); j++) fscanf(fr, "%d ", &m[i][j]); fclose(fr); return 1; } int riconosciRegione(int nr, int nc, int M[][nc], int r, int c, int *bp, int *hp) { int i,j,k,l,flag; i=r; j=c; if(M[i][j] == 1) { flag=1; for((*bp)=0,k=0; (j+k)<nc && flag==1; k++) { if(M[i][j+k] == 1) (*bp)++; else flag=0; } flag=1; for(k=1,(*hp)=1; (k+i)<nr && flag==1; k++) { for(l=0; l<(*bp) && flag==1; l++) if(M[i+k][j+l] != 1) flag=0; if(flag==1) (*hp)++; } for(i=0; i<(r+(*hp)); i++) for(j=c; j<(c+(*bp)); j++) M[i][j]=-1; return 1; } return 0; }
Il codice NON è modificato ... ti avevo chiesto di riproporre il codice dopo le modifiche.
No MP tecnici (non rispondo nemmeno!), usa il forum.