Enrere Mòdul 5
Fonaments de Programació. Llenguatge C/C++---
Pràctica    Resum teòric Exercicis
Pràctica d'ampliació

 
Càlcul de la matriu transposada d’una matriu quadrada

En aquesta pràctica aprendrem com es passen vectors multidimensionals a una funció.

 

Desenvolupament de la pràctica

Si tenim una matriu A d'n files i m columnes, s'anomena transposada d'A, i es nota AT , com la matriu d'm files i n columnes que resulta de canviar l'element aij per l'element aji. De moment, i per simplificar aquesta pràctica, suposarem matrius quadrades, això vol dir del mateix nombre de files que de columnes. 

Esquemàticament, si tenim la matriu A:

La matriu transposada és:

En aquesta pràctica construirem una funció anomenada transposada que farà la transposició d'una matriu passada com argument.

Definiu un projecte nou anomenat m5p06 i afegiu-li un arxiu de font C/C++ anomenat m5p06.cpp. Escriviu el següent codi:

 
//m5p06.cpp: Transposada d'una matriu quadrada


#include <stdio.h>
#define MAX_FILES 10


void transposada(double [][MAX_FILES],int);

void main(){

    double a[MAX_FILES][MAX_FILES];
    int n,i,j; //nombre de files i de columnes

    printf("\nIntroduïu el nombre de files de la matriu A:");
    scanf("%d", &n);



    //introducció dels elements d’A

    for (i=0;i<n;i++){
        for(j=0;j<n;j++){
            printf("\na[%d,%d]=",i,j);
            scanf("%lf",&a[i][j]);
        }
    }


    // Matriu A abans de la transposició

    for (i=0;i<n;i++){
        for(j=0;j<n;j++){
            printf("a[%d,%d]=%lf\t",i,j,a[i][j]);
        }
        printf("\n");
    }

    transposada(a,n);

    // Matriu A després de la transposició

    printf("\n");
    for (i=0;i<n;i++){
        for(j=0;j<n;j++){
            printf("a[%d,%d]=%lf\t",i,j,a[i][j]);
        }
        printf("\n");
    }

}



void transposada(double a[][MAX_FILES],int n){ 
                    
    double temp;
    int i,j;

    for (i=1;i<n;i++){
        for(j=0;j<i;j++){
            temp=a[i][j];
            a[i][j]=a[j][i];
            a[j][i]=temp;
        }
    }
}

Explicació del programa

El programa demana els elements de la matriu A, una vegada introduïts tots, mostra la matriu, la transposa i la torna a mostrar per veure com s'ha produït la transposició.

La transposició es fa a través de la funció transposada(). Fixeu-vos que en el protocol d'aquesta funció s'ha posat double [][MAX_FILES] com a primer argument. És obligatori indicar totes les dimensions menys la primera.

La crida es fa amb el nom de la matriu. En els vectors multidimensionals el nom és un punter al primer element d'un vector de punters. En aquest cas, a = &a[0] i a[0]=&a[0][0].