Valori errati durante la normalizzazione dell’array 2d in C

Sto cercando di normalizzare un array 2D basato su un paio di equazioni date. L’array è stato riempito con valori compresi tra 0 e 255 utilizzando la funzione rand (). Il problema è che normalizziamo la matrice, usando un paio di equazioni date, il valore normalizzato è 0 o 255.

#include  #include  #include  main () { int x,y; srand(time(NULL)); int i,j = 0; int max = NULL; int min = 255; long double d; long double e; printf("Hello user.\n"); printf("Please enter the horizontal dimension of the array.\n"); scanf("%d", &x); printf("Please enter the vertical dimension of the array.\n"); scanf("%d", &y); int MyArray[x][y]; float MyArray1[x][y]; int *point = (int *) malloc(x * y * sizeof(int)); float *point1 = (float *) malloc(x * y * sizeof(float)); for (i = 0; i <= (x-1); i++) { for (j = 0; j  max ) { max = MyArray[i][j]; } if (MyArray[i][j] < min) { min = MyArray[i][j]; } } } for (i = 0; i <= (x-1); i++) { for (j = 0; j <= (y-1); j++) { d = (MyArray[i][j] - min); printf("d is: %d\n", d); e =( d / (max - min)); e = (e * 255); printf ("e is: %f\n", e); MyArray1[i][j] = e; } } printf("the max is: %d\n", max); printf("the min is: %d\n", min); free(point); free(point1); } 

Il problema che posso trovare nel tuo codice,

  1. int max = NULL; non è raccomandato usa invece un semplice 0 .
  2. Si prega di non trasmettere il risultato di malloc() .
  3. Qual è il punto di avere point e point1 qui? Puoi rimuoverli.
  4. printf("d is: %d\n", d); è sbagliato. Devi usare %Lf per un long double
  5. Infine , printf ("e is: %f\n", e); è anche sbagliato. È necessario utilizzare l’identificatore di conversione corretto. usa %Lf per il long double .

Detto questo, la firma raccomandata di main() è int main(void)

ecco una versione del codice pubblicato.

compila e lavora in modo pulito

include il controllo degli errori

Questa versione non contiene nulla che non viene utilizzato

né tutto ciò che non è visualizzato all’utente.

Si noti che i valori visualizzati (min e max) dipendono esclusivamente dai valori restituiti da rand ()% 256

 #include  #include  #include  int main () { unsigned int x; // horizontal array dimension unsigned int y; // vertical array dimension srand(time(NULL)); int i,j = 0; // loop counters int max = 0; int min = 255; printf("Hello user.\n"); printf("Please enter the horizontal dimension of the array.\n"); if( 1 != scanf("%u", &x) ) { // then scanf failed perror( "scanf for x failed" ); exit( -1 ); } // implied else, scanf successful printf("Please enter the vertical dimension of the array.\n"); if( 1 != scanf("%d", &y) ) { // then scanf failed perror( "scanf for y failed" ); exit( -1 ); } // implied else, scanf successful int MyArray[x][y]; for (i = 0; i <= (x-1); i++) { for (j = 0; j <= (y-1); j++) { MyArray[i][j] = (int) (rand() % 256); printf("the int is:\n"); printf("\t %d\n", MyArray[i][j]); if (MyArray[i][j] > max ) { max = MyArray[i][j]; } if (MyArray[i][j] < min) { min = MyArray[i][j]; } } } printf("the max is: %d\n", max); printf("the min is: %d\n", min); return(0); } // end function: main