6.3. Implemente a função

Void transpor(int v[MAX] [MAX]))

Que transpões a matriz v com MAX por MAX elementos.

Passo 1

Vamos lá.

A matriz é definida pelo comando i n t   v M A X [ M A X ] .

Cada colchete é um índice. Então se tivermos v 2 [ 3 ] estamos na segunda linha e na terceira coluna. O que queremos fazer é transformar tudo que é linha em coluna e tudo que é coluna em linha, então depois da transposição v 2 [ 3 ] tem que virar v 2 [ 3 ] .

Para isso podemos usar dois laços de repetição, um dentro do outro, um deles vai rodar desde a primeira linha até a última, e dentro do segundo laço roda da coluna logo com o próximo índice da linha que estamos analisando até o final.

Passo 2

A implementação fica mais ou menos assim:

v o i d   t r a n s p o r   ( i n t   v [ M A X ] [ M A X ] )

{

        i n t   i ,   j ,   t m p ;

        f o r   ( i = 0 ;   i < M A X ;   i + + )

                f o r   ( j = i + 1 ;   j < M A X ;   j + + )

                {

                        t m p   =   v [ i ] [ j ] ;

                        v [ i ] [ j ] = v [ j ] [ i ] ;

                        v [ j ] [ i ] = t m p ;

                }

}

Vamos entender o que está acontecendo. A cada iteração a gente troca o valor de v i [ j ] com o valor de v j [ i ] , que seria o mesmo que dizer que estamos transformando todas as linhas em colunas.

É interessante que j sempre começa de i + 1 , porque tudo antes disso já foi transposto. Na primeira iteração por exemplo, a gente não precisa transpor v 1 [ 1 ] , ele já está na posição correta, então ajeitamos todo o resto de v 1 [ 2 ] até v 1 [ M A X ] vira v 2 [ 1 ] até v M A X [ 1 ] . Na segunda iteração, começamos de i = 2 , mas a posição v 2 [ 1 ] já foi transposta no laço anterior.

Resposta

v o i d   t r a n s p o r   ( i n t   v [ M A X ] [ M A X ] )

{

        i n t   i ,   j ,   t m p ;

        f o r   ( i = 0 ;   i < M A X ;   i + + )

                f o r   ( j = i + 1 ;   j < M A X ;   j + + )

                {

                        t m p   =   v [ i ] [ j ] ;

                        v [ i ] [ j ] = v [ j ] [ i ] ;

                        v [ j ] [ i ] = t m p ;

                }

}