2007 – 2

Si consideri il seguente programma:

#include 
#define DMAX  5

void ES2(int M[][DMAX], int R, int C)
{
    int I, K;
    int V[DMAX];
    for(I=0; I < R; I++)
        V[I]=M[I][0];
    for(I=0; I < C-1; I++)
        for(K=0; K < R; K++)
            M[K][I]=M[K][I+1];
    for(I=0; I < R; I++)
        M[I][C-1]=V[I];
}

int main ()
{
    int M[DMAX][DMAX];
    int I;
    M[0][0]=1; M[0][1]=2; M[0][2]=3; M[0][3]=4; M[0][4]=5;
    M[1][0]=1; M[1][1]=2; M[1][2]=3; M[1][3]=4; M[1][4]=5;
    M[2][0]=1; M[2][1]=2; M[2][2]=3; M[2][3]=4; M[2][4]=5;
    M[3][0]=1; M[3][1]=2; M[3][2]=3; M[3][3]=4; M[3][4]=5;
    M[4][0]=1; M[4][1]=2; M[4][2]=3; M[4][3]=4; M[4][4]=5;
    for(I=0; I < 3; I++)
        ES2(M, 5, 5);
    return 0;
}
La matrice M inizialmente contiene tutti 1 nella prima colonna, tutti 2 nella seconda colonna e così via.
Indicare il contenuto della matrice M al termine del programma.

Risposte:

  1. 4 5 1 2 3
    4 5 1 2 3
    4 5 1 2 3
    4 5 1 2 3
    4 5 1 2 3
  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 4 3 2 1
    5 4 3 2 1
    5 4 3 2 1
    5 4 3 2 1
    5 4 3 2 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 2 3 4 5
1 2 3 4 5
1 2 3 4 5
1 2 3 4 5
1 2 3 4 5

e ognuna delle 3 chiamate di ES2(M, 5, 5) esegue il codice

for(I=0; I < 5; I++)
    V[I]=M[I][0];
for(I=0; I < 4; I++)
    for(K=0; K < 5; K++)
        M[K][I]=M[K][I+1];
for(I=0; I < 5; I++)
    M[I][4]=V[I];

Quindi

  • V[] = {1, 1, 1, 1, 1}
  • 2 3 4 5 5
    2 3 4 5 5
    2 3 4 5 5
    2 3 4 4 5
    2 3 4 5 5
  • 2 3 4 5 1
    2 3 4 5 1
    2 3 4 5 1
    2 3 4 5 1
    2 3 4 5 1
  • V[] = {2, 2, 2, 2, 2}
  • 3 4 5 1 1
    3 4 5 1 1
    3 4 5 1 1
    3 4 5 1 1
    3 4 5 1 1
  • 3 4 5 1 2
    3 4 5 1 2
    3 4 5 1 2
    3 4 5 1 2
    3 4 5 1 2
  • V[] = {3, 3, 3, 3, 3}
  • 4 5 1 2 2
    4 5 1 2 2
    4 5 1 2 2
    4 5 1 2 2
    4 5 1 2 2
  • 4 5 1 2 3
    4 5 1 2 3
    4 5 1 2 3
    4 5 1 2 3
    4 5 1 2 3