samedi 13 novembre 2010

Ramz I programme C++

Un programme de Philipe DAX considère  ce qui suit :
un carré magique d'ordre n est un tableau à deux dumensions dont les cases qui sont remplies par les n*n premiers nombres entiers sont organisées de façon que les sommes des éléments de chaque ligne, de chaque colonne ou de chaque diagonale soient égales.

Il existe un algorithme simple de constitution de carré magique pour un ordre impair, les nombres entiers progressent de 1 jusqu'à n*n, le premier nombre doit se substituer dans la case centrale, puis la pression normale consiste à suivre la diagonale vers la direction nord-est ; soit i-- et j++, si i et j sont respectivement les indices de ligne et de colonne.

Dés qu'il ya un dépassement des limites i < 0, j < 0 alord ou report à la ligne du bas avec i = n-1 ou à la dernière colonne avec j = n-1 ; de même si j = n  in repart à la première colonne avec j = 0 , si on atteint une case féja occupe par un nombre présédement rangé, on change de direction (nord-ouest) i-- et j-- pour reprendre à nouveau une diaginale nord-est.

Il est bien évident qu'en doit chaque fois verifiée les cas de débordement du carré, celui-ci peut d'ailleurs s'imaginer comme un cyclindre pour chaque dimension oû la ligne du bas est située au-dessus de la ligne de haut et la dérnière colonne est située avant ma première colonne :

/* programme.c */
# definie MAX 13
int carré [MAX][MAX] ; /*tableau externe*/
main ()
{
   int i ;  /* indice ligne */
   int j ; /* indice colonne */
   int k ; /* nombre entier */
   int n ; /* ordre du carré*/

   prinf ( " donner l'irdre du carré ;") ;
   scanf ("%d",&n);
   if (n <= 2 || n > MAX || n%2 == 0)
      printf ( "l'ordre du carré est inconnu , n ")
  else {
         razcarré (n) ; /* remise à zéro du carré */
         j = n/2 ; i = j-1 ; /* coordonnées initiales */
         k = 1 ;              /* valeur initiale */
         carré [i][j] = k ;
         i++ ; j++;k++;
         WHILE (k <= n*n) { /*boucle centrale*/
                       if (i < 0) i = n-1;
                       if (j < 0) j = n-1;
                       if (j > n ) j = 0 ;
                       if ( carré [i][j] = = 0 ) { /* test si case vide */
                                     carré  [i][j] = k ; /*oui on range*/
                                     i -- ; j++ ; k++ ; /*direction N-E */
                        {
                        else {
                                i-- ; j-- ;  /*direction N-O*/
                               }
                               {
                               printcarré (n) ;
                              }
                         }
              razcarré (n)
              int n ;
              {
                     register i, j ;
                     for ( i=0 ; i <= n-1 ; i++ )
                           for ( j=0 ; j < = n-1 ; j++ ) carré [i][j] = 0 ;
               }
               printcarré (n)
               int n ;
               {
                      registre i , j , SOM ;
                      for ( i = 0 ; i < = n-1 ; i++ ) {
                           for ( SOM = 0 , j = 0 ; j <= n-1 ; j++)
                                   print ("% 4d, carré [i][j] ) ;
                                   SOM += carré [i][j] ;
                      {
                      printf ( " %4d\n " , SOM) ; /* impression somme de ligne */
                      printf ( "\" ) ;                      /* saut d'une ligne */
                      for ( j = 0 ; j <= n-1 ; j++) {
                           for ( SOM = 0 , i = 0 ; i <= n-1 ; i++ SOM + = carré[i][j] ;
                           printf (" %4d " , SOM ) ; /* impression somme des colonnes */
                      }
                 }


       

Aucun commentaire:

Enregistrer un commentaire