Bestsubmatrix problem

di
Anonimizzato6694
il
1 risposte

Bestsubmatrix problem

Salve a tutti ho un problemino (se si può chimare ino) con un programma...
il testo richeideva:

"Una regione di forma rettangolare di territorio è stata suddivisa in settori quadrati di eguale dimensione e per ognuno di essi è stato valutato il rischio sismico misurato da un opportuno indice di rischio sismico. Quindi, l'intera valutazione è stata sintetizzata in una matrice rettangolare S che per ogni settore di coordinate (i, j) riporta l'indice di rischio sismico S[j] di quel settore. Una sottoregione formata da uno o più settori contigui ha indice di rischio sismico dato dalla media degli indici dei suoi settori. Si è interessati a determinare la più grande sottoregione costituita da un gruppo contiguo di settori formanti un quadrato o un rettangolo che ha l'indice di rischio sismico non oltre una certa soglia M. Ciò equivale a determinare la più grande sottomatrice della matrice S la cui media dei valori dei suoi elementi non eccede la soglia M. Una sottomatrice è determinata da un insieme di righe e colonne consecutive.
Implementare una funzione int bestsubmatrix(int nr, int nc, double S[nr][nc], double m) che ritorna l'area (cioè il numero di elementi) della più grande sottomatrice quadrata o rettangolare della matrice S (avente nr righe e nc colonne) con indice di rischio sismico non superiore a m. Ecco alcuni esempi di input e output (in grassetto sono evidenziate alcune sottomatrici di massima area):

nr = 6, nc = 8, m = 3.7
6.46 3.36 4.29 3.64 5.97 3.15 5.66 3.20
3.40 6.22 2.44 6.66 5.55 6.83 1.44 7.70
4.73 3.52 5.87 7.52 2.96 7.20 6.24 0.72
3.34 1.65 7.81 3.57 2.25 3.52 0.89 7.02
5.93 2.19 5.87 3.38 7.01 7.73 7.66 4.11
7.72 7.07 7.04 1.66 0.64 2.05 7.84 6.60
La funzione ritorna 9
"

io ho scritto qualcosa ma c'è un problema:
stampa sempre l'area massima (quindi nr*nc) =(

QUESTO è IL CODICE: (grazie in anticipo )

#include <stdio.h>

int bestsubmatrix(int nr, int nc, float S[nr][nc], float m);
int media(int nr, int nc, float S[nr][nc],int pr, int ar,int pc, int ac);
int main () {
  int i,j,n,m,c;
  scanf("%d %d",&n,&m);
  float M[n][m];
  float soglia;
  for(i=0; i<n;i++) {
    for (j=0; j<m;j++) {
      scanf("%f",&M[i][j]);
    }
  }
  scanf("%f",&soglia);
  c= bestsubmatrix(n,m,M,soglia);
  printf("%d",c);
return 0;
}

int bestsubmatrix(int nr, int nc, float S[nr][nc], float m) {
  int i,j,righe,colonne,a,b,area=0;
  for(i=0;i<nr;i++) {
    for(j=0;j<nc;j++) {
      for(righe=(nr-1);righe>=i;righe--) {
        for (colonne=(nc-1);colonne>=j;colonne--) {
          a=(righe-i)+1;
          b=(colonne-j)+1;
          /*printf("righe=%d; i=%d; colonne=%d; j=%d; ",righe,i,colonne,j);
            printf("nr=%d;nc=%d\n",nr,nc);*/
          if((media(nr,nc,S,i,righe,j,colonne)<=m)&&((a*b)>area)) {
            
            area=a*b;
          }
        }
      }
    }
  }
  return area;
}

int media(int nr, int nc, float S[nr][nc],int pr, int ar,int pc, int ac) {
  int i,j;
  float temp=0,media;
  for(i=pr;i<=ar;i++) {
    for(j=pc;j<=ac;j++) {
      temp += S[i][j];
    }
  }

  media=temp/(((ar-pr)+1)*((ac-pc)+1));
  return media;
}

1 Risposte

  • Re: Bestsubmatrix problem

    RISOLTO per metà

    mi sono accorto che come un idiota avevo dichiarato che la funzione "media" restituiva un int mentre doveva restituire un float

    la domanda ora è un altra: perchè se cambio le variabili e le assegno a double (invece che float) il programma nn va più?
Devi accedere o registrarti per scrivere nel forum
1 risposte