/* File: swapmatr.c */
/* Scopo: esercizio sull'uso di matrici quadrate */

/* Effettua lo scambio di righe con colonne in una matrice quadrata utilizzando
   una matrice di appoggio. */

#include <stdio.h>

#define DIM 3

void IniziaMatrice(float [][DIM], float);
void SalvaMatrice(float [][DIM], float [][DIM]);
void ScriviMatrice( float [][DIM], char [10] );
void ScambiaMatrice(float [][DIM], float [][DIM] );
void fine(void);

int main(void)

{
  float A[DIM][DIM];                    /* matrice iniziale    */
  float Appoggio[DIM][DIM] = { 0.0 };   /* matrice di appoggio */
  float v;

  IniziaMatrice(A, 1.5);

  ScriviMatrice (A, "A:");
  ScriviMatrice (Appoggio, "Appoggio:");

  fine();

  printf("\nsalvo A in Appoggio\n");
  SalvaMatrice(Appoggio, A);

  printf("\ncopio Appoggio in A, scambiando righe con colonne\n");
  ScambiaMatrice (A,Appoggio);

  printf("\nle matrici dopo lo scambio sono:\n");
  ScriviMatrice (A, "A:");
  ScriviMatrice (Appoggio, "Appoggio:");

  fine();
  return 0;
}


void IniziaMatrice(float X[][DIM], float z)
{
  int riga, col;
  printf("inizializzo\n");
  for (riga = 0; riga < DIM; riga++)
    for (col = 0; col < DIM; col++)
      X[riga][col] = z * (riga * riga+1) * (col+1);
}

void SalvaMatrice(float X[][DIM], float Y[][DIM])
{
  int i, j;

  for (i = 0; i < DIM; i++)
    for (j = 0; j < DIM; j++)
      X[i][j] = Y[i][j];
}

void ScriviMatrice(float X[][DIM], char *nome)
{
  int riga,col;
  printf("%s\n", nome);
  for (riga = 0; riga < DIM; riga++) {
    printf("\t\t|" );
    for (col = 0; col < DIM; col++)
      printf("%7.1f", X[riga][col]);
    printf("|\n");
  }
}

void ScambiaMatrice(float X[][DIM], float Y[][DIM])
{
  int riga, col;
  for (riga = 0; riga < DIM; riga++)
    for (col = 0; col < DIM; col++)
      X[riga][col] = Y[col][riga];
}

void fine(void)
{
  printf("\ninvio  per continuare");
  while (getchar() !='\n');
}