Oppure

Loading
07/02/11 11:22
ColonelCurtiss
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[i][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.

#include <stdlib.h>
#include <stdio.h>
#include <time.h>
#define MAX 100
void generamatrice(int A[MAX][MAX], int n, int m);
int sommamatrice(int A[MAX][MAX], int n, int m, int i, int j);
void stampamatrice(int A[MAX][MAX], int n, int m);
main() 
{
    int A[MAX][MAX], n, m, somma, sommamax, i, j, imax, jmax;
    printf("numero di righe e di colonne: ");
    scanf("%d %d", &n, &m);
    generamatrice(A, n, m);
    stampamatrice(A, n, m);
    sommamax = 0;
    imax = 0;
    jmax = 0;
    for (i=0; i<n-2; i++) {
        for (j=0; j<m-2; j++) {
            somma = sommamatrice(A, n, m, i, j);
            if (somma > sommamax) {
               sommamax = somma;
               imax = i;
               jmax = j;
            }
        }
    }
    printf ("\n\nla sottomatrice 3 x 3 massima:\n");
    for (i=imax; i<imax+3; i++) {
        for (j=jmax; j<jmax+3; j++)
            printf("%4d", A[i][j]);
        printf("\n");
    }
    system ("pause");
    return(0);
}


void generamatrice(int A[MAX][MAX], int n, int m) {
    int i, j;
    srand(time(NULL));
    for (i=0; i<n; i++)
        for (j=0; j<m; j++)
            A[i][j] = rand() % 50;
    return;
}

void stampamatrice(int A[MAX][MAX], int n, int m) {
    int i, j;
    for (i=0; i<n; i++) {
        for (j=0; j<m; j++)
            printf("%4d", A[i][j]);
        printf("\n");
    }
    return;
}

int sommamatrice(int A[MAX][MAX], int n, int m, int i, int j) {
    int s, h, k;
    s = 0;
    for (h=0; h<3; h++)
        for (k=0; k<3; k++)
            s = s+A[i+h][j+k];
    return(s);
}


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?
aaa