Newsgroup: it.comp.lang.c
Titolo: Matrici ,algebra e geometria ...

Credo che in questo newsgroup ci siano molti programmatori di quel
fantastico linguaggio che e' il C (non C++ e nemmeno Visual C++ :)  )
Mi servono aiuti, spunti, idee, sorgenti completi per la realizzazione
del seguente esercizio:
Scrivere un programma in linguaggio C che dopo aver acquisito da
tastiera una matrice quadrata di interi costruisca e visualizzi tutte
le rotazioni e simmetrie assiali che mutino in se' l'ipotetico
quadrato e verifichi, per ognuna se coincide o meno con quella di
partenza.
Grazie per la vostra disponibilita' ...
Rispondete via usenet e via mail magari ...
GRAZIE ANKORA
 /\_/\   The CAT 
( o o )  says you goodbye
  "*"    from Siena, Italy 
 
 
http://members.tripod.com/~Chesi/

partenza.
Lo scheletro del programma :
#include <stdio.h>
#include <stdlib.h>
typedef struct {
                 int dim ;   /* dimensione della matrice quadrata */
                 int * * a ; /* vettore dei vettori di elementi */
               } matrice ;
void alloca_matrice ( matrice * M, int dimensione )
{
     int i ;
     M->dim = dimensione ;
     M->a = malloc ( dimensione * sizeof ( int * ) ) ;
     for ( i = 0 ; i < dimensione ; i++ )
         M->a[i] = malloc ( dimensione * sizeof ( int ) ) ;
}
void dealloca_matrice ( matrice * M )
{
     int i ;
     for ( i = 0 ; i < M->dim ; i++ )
         free ( M->a[i] ) ;
     free ( M->a ) ;
}
void accetta_matrice ( matrice * M, int dimensione )
{
     int i, j ;
     for ( i = 0 ; i < M->dim ; i++ )
         for ( j = 0 ; j < M->dim ; j++ )
         {
             printf ( "a (%d, %d) = ", i + 1, j + 1 ) ;
             scanf ( "%d", &M->a[i][j] ) ;
         }
}
void scrivi_matrice ( const matrice M )
{
     int i, j ;
     for ( i = 0 ; i < M.dim ; i++ )
     {
         printf ( "|" ) ;
         for ( j = 0 ; j < M.dim ; j++ )
             printf ( "%5d", M.a [i][j] ) ;
         printf ( "|\n" ) ;
     }
}
void simm_orizz ( const matrice M, matrice * S )
{
     int i, j ;
     S->dim = M.dim ;
     for ( i = 0 ; i < M.dim ; i++ )
         for ( j = 0 ; j < M.dim ; j++ )
             S->a[i][j] = M.a[i][M.dim - j - 1] ;
}
void simm_vert ( const matrice M, matrice * S )
{
     int i, j ;
     S->dim = M.dim ;
     for ( i = 0 ; i < M.dim ; i++ )
         for ( j = 0 ; j < M.dim ; j++ )
             S->a[i][j] = M.a[M.dim - i - 1][j] ;
}
void simm_diag_sin ( const matrice M, matrice * S )
{
     int i, j ;
     for ( i = 0 ; i < M.dim ; i++ )
         for ( j = 0 ; j < M.dim ; j++ )
             S->a[M.dim - i - 1][j] = M.a[j][M.dim - i - 1] ;
}
void simm_diag_des ( const matrice M, matrice * S )
{
     int i, j ;
     for ( i = 0 ; i < M.dim ; i++ )
         for ( j = 0 ; j < M.dim ; j++ )
             S->a[i][M.dim - j - 1] = M.a[j][M.dim - i - 1] ;
}
int main()
{
    matrice M, Temp ;
    int dimensione ;
    printf ( "dimensione matrice quadrata : ") ;
    scanf ( "%d", &dimensione ) ;
    alloca_matrice ( &M, dimensione ) ;
    accetta_matrice ( &M, dimensione ) ;
    printf ( "matrice originale :\n" ) ;
    scrivi_matrice ( M ) ;
    alloca_matrice ( &Temp, dimensione ) ;
    simm_orizz ( M, &Temp ) ;
    printf ( "simmetrica in senso orizzontale :\n" ) ;
    scrivi_matrice ( Temp ) ;
    simm_vert ( M, &Temp ) ;
    printf ( "simmetrica in senso verticale :\n" ) ;
    scrivi_matrice ( Temp ) ;
    simm_diag_sin ( M, &Temp ) ;
    printf ( "simmetrica in senso diagonale (da sinistra, alto->basso)
:\n" ) ;
    scrivi_matrice ( Temp ) ;
    simm_diag_des ( M, &Temp ) ;
    printf ( "simmetrica in senso diagonale (da destra, basso->alto)
:\n" ) ;
    scrivi_matrice ( Temp ) ;
    return 0 ;
}