/* File: mattras1.c */
/* Time-stamp: "2002-05-14 15:20:43 calvanes" */
/* Scopo: uso di array multidimensionali */

/* Legge una matrice di double, calcola la matrice trasposta e la stampa. */

#include <stdio.h>

#define N 3


void leggiMatrice(double m[N][N])
{
  int i, j;

  printf("Inserire gli elementi di una matrice di double %dx%d\n", N, N);
  for (i = 0; i < N; i++)
    for (j = 0; j < N; j++)
      scanf("%lg", &m[i][j]);
}


void stampaMatrice(double m[N][N])
{
  int i, j;

  for (i = 0; i < N; i++) {
    for (j = 0; j < N; j++)
      printf("%6.2g", m[i][j]);
    printf("\n");
  }
}


void copiaMatrice(double m[N][N], double copia[N][N])
  /* Restituisce in copia una copia della matrice m. */
{
  int i, j;

  for (i = 0; i < N; i++)
    for (j = 0; j < N; j++)
      copia[i][j] = m[i][j];
}


void trasposta(double m[N][N])
  /* Trasforma la matrice m nella sua trasposta. */
{
  int i, j;
  double app;

  for (i = 0; i < N; i++)
    for (j = 0; j < i; j++) {
      app = m[i][j];
      m[i][j] = m[j][i];
      m[j][i] = app;
    }
}


int main(void)
{
  double mat[N][N], trasp[N][N];

  leggiMatrice(mat);
  printf("\nLa matrice inserita e`:\n");
  stampaMatrice(mat);

  copiaMatrice(mat, trasp);
  trasposta(trasp);
  printf("\nLa trasposta e`:\n");
  stampaMatrice(trasp);

  return 0;
}