Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Spiegazione esercizio
Forum - C/C++ - Spiegazione esercizio

Avatar
ColonelCurtiss (Normal User)
Newbie


Messaggi: 5
Iscritto: 30/11/2010

Segnala al moderatore
Postato alle 12:22
Lunedì, 07/02/2011
Ragazzi, avrei bisogno di una mano per capire bene un esercizio. Vi posto la traccia e il codice:

Il programma costruisce una matrice  n x m  di numeri casuali tali che  0 <= A[j] <= 50. Poi la matrice viene stampata. Poi viene individuata la sottomatrice  3 x 3  la cui somma degli elementi sia massima.  Tale sottomatrice viene stampata.
Ad esempio, se la matrice generata è:

3    1    2    1
1    8    7    9
4    7    8    7
2    7    1    5

vi sono quattro sottomatrici  3 x 3:

la somma degli elementi della prima vale  41
la somma della seconda vale  50
la somma della terza vale  45
la somma della quarta vale  59

per cui viene stampata la quarta sottomatrice.

Codice sorgente - presumibilmente C++

  1. #include <stdlib.h>
  2. #include <stdio.h>
  3. #include <time.h>
  4. #define MAX 100
  5. void generamatrice(int A[MAX][MAX], int n, int m);
  6. int sommamatrice(int A[MAX][MAX], int n, int m, int i, int j);
  7. void stampamatrice(int A[MAX][MAX], int n, int m);
  8. main()
  9. {
  10.     int A[MAX][MAX], n, m, somma, sommamax, i, j, imax, jmax;
  11.     printf("numero di righe e di colonne: ");
  12.     scanf("%d %d", &n, &m);
  13.     generamatrice(A, n, m);
  14.     stampamatrice(A, n, m);
  15.     sommamax = 0;
  16.     imax = 0;
  17.     jmax = 0;
  18.     for (i=0; i<n-2; i++) {
  19.         for (j=0; j<m-2; j++) {
  20.             somma = sommamatrice(A, n, m, i, j);
  21.             if (somma > sommamax) {
  22.                sommamax = somma;
  23.                imax = i;
  24.                jmax = j;
  25.             }
  26.         }
  27.     }
  28.     printf ("\n\nla sottomatrice 3 x 3 massima:\n");
  29.     for (i=imax; i<imax+3; i++) {
  30.         for (j=jmax; j<jmax+3; j++)
  31.             printf("%4d", A[i][j]);
  32.         printf("\n");
  33.     }
  34.     system ("pause");
  35.     return(0);
  36. }
  37.  
  38.  
  39. void generamatrice(int A[MAX][MAX], int n, int m) {
  40.     int i, j;
  41.     srand(time(NULL));
  42.     for (i=0; i<n; i++)
  43.         for (j=0; j<m; j++)
  44.             A[i][j] = rand() % 50;
  45.     return;
  46. }
  47.  
  48. void stampamatrice(int A[MAX][MAX], int n, int m) {
  49.     int i, j;
  50.     for (i=0; i<n; i++) {
  51.         for (j=0; j<m; j++)
  52.             printf("%4d", A[i][j]);
  53.         printf("\n");
  54.     }
  55.     return;
  56. }
  57.  
  58. int sommamatrice(int A[MAX][MAX], int n, int m, int i, int j) {
  59.     int s, h, k;
  60.     s = 0;
  61.     for (h=0; h<3; h++)
  62.         for (k=0; k<3; k++)
  63.             s = s+A[i+h][j+k];
  64.     return(s);
  65. }



Il programma funziona, ho provato, ma essendo le variabili tutte lettere ho qualche problema a seguire il procedimento con cui è stato svolto l'esercizio. Allora, ho capito che n ed m sono i contatori delle righe e delle colonne della matrice. Vorrei sapere, cosa sono i, j, imax, jmax, s, h e k?

PM Quote