2008 – 4

Si consideri il seguente frammento di codice:

void esegui(int M[][5], int C, int R1, int R2) 
{
    int i;
    for(i=0; i < C; i++)
        M[R1][i]=M[R1][i]+M[R2][i];
}

main()
{
    int i,
        M[5][5];
    for(i=0; i < 2; i++)
        esegui(M, 5, i, 3);
}

La matrice M inizialmente contiene tutti 1 nella prima riga, tutti 2 nella seconda riga e cosi via.
Indicare il contenuto della matrice M al termine del programma.

Risposte:

  1. 5 5 5 5 5
    6 6 6 6 6
    3 3 3 3 3
    4 4 4 4 4
    5 5 5 5 5
  2. 1 2 3 4 5
    1 2 3 4 5
    1 2 3 4 5
    1 2 3 4 5
    1 2 3 4 5
  3. 5 5 5 5 5
    4 4 4 4 4
    3 3 3 3 3
    2 2 2 2 2
    1 1 1 1 1
  4. 1 1 1 1 1
    2 2 2 2 2
    3 3 3 3 3
    4 4 4 4 4
    5 5 5 5 5

Soluzione: a.


La situazione iniziale è

1 1 1 1 1
2 2 2 2 2
3 3 3 3 3
4 4 4 4 4
5 5 5 5 5

Dopo la chiamata

esegui(M, 5, 0, 3);

esegue

for(i=0; i < 5; i++)
    M[0][i]=M[0][i]+M[3][i];

e la matrice diventa

5 5 5 5 5
2 2 2 2 2
3 3 3 3 3
4 4 4 4 4
5 5 5 5 5

La seconda e ultima chiamata

esegui(M, 5, 1, 3);

esegue

for(i=0; i < 5; i++)
    M[1][i]=M[1][i]+M[3][i];

e la matrice diventa

5 5 5 5 5
6 6 6 6 6
3 3 3 3 3
4 4 4 4 4
5 5 5 5 5