Mathc matrices/Fichiers c : p02a

Un livre de Wikilivres.
Sauter à la navigation Sauter à la recherche


Installer et compiler ce fichier dans votre répertoire de travail.

Crystal Clear mimetype source c.png p02a.c
ctrl le nb de colonnes
/* ------------------------------------ */
/*  Save as : p02a.c                    */
/* ------------------------------------ */
#include "v_a.h"
/* ------------------------------------ */
void p2_mR(
double **A,
int     Cx
)
{
int r;
int c;

int firstc;
int lastc;

int tempc  = C1;

while(tempc<A[C_SIZE][C0])
     {
		 
/*   Select the last column  to draw  */
	
      firstc = tempc;
	  
      tempc += Cx;       
      
      if(tempc<A[C_SIZE][C0])
      
           lastc  = tempc;
      else                 
           lastc  = A[C_SIZE][C0];

/*          Draw the Cx columns         */

 	  for(r=R1; r<A[R_SIZE][C0]; r++)
         {
          printf("\n");
          
 	      for (c=firstc; c<lastc; c++)
 	      
                   printf("%+4.0f ",A[r][c]);
          }

/* A line between each part of the matrix  */    
       
      printf("\n");
     }
}
/* ------------------------------------ */
void fun(int r,int c)
{
double **A     = r_mR(i_mR(r,c),9);

  clrscrn();

  printf(" A[R%d,C%d] : \n",rsize_mR(A),csize_mR(A));
  p_mR(A,4,0,C3);

  p2_mR(A,C3);

  f_mR(A);
}
/* ------------------------------------ */
int main(void)
{
time_t t;

  srand(time(&t));
  
   do 
        fun(rp_I(R4),rp_I(C8));
        
    while(stop_w());
        
  return 0;
}


La fonction p_mR(); existant déjà dans la librairie je l'ai ici renommé p2_mR();


Exemple de sortie écran :

 A[R3,C5] : 

  +4   +6   +8 
  +4   +2   -9 
  -1   -1   +8 

  -5   -3 
  +2   -5 
  +8   -9 


  +4   +6   +8 
  +4   +2   -9 
  -1   -1   +8 

  -5   -3 
  +2   -5 
  +8   -9 

 Press return to continue
 Press X      to stop

Nous pouvons désormais choisir le nombre de colonnes par ligne.


Etudions le code de la fin de la fonction.

/*          Draw the Cx columns         */

 	  for(r=R1; r<A[R_SIZE][C0]; r++)
         {
          printf("\n");
          
 	      for (c=firstc; c<lastc; c++)
 	      
               printf("%+4.0f ",A[r][c]);
          }


Ce sont les deux boucles for que nous avons déjà vu pour les autres fonctions d'impression.

Il suffit de déplacer la fonction printf();


Par exemple essayez :

/*          Draw the Cx columns         */

 	  for(r=R1; r<A[R_SIZE][C0]; r++)
         {
     	   for (c=firstc; c<lastc; c++)
 	      
               printf("%+4.0f ",A[r][c]);

          printf("\n");
          }


Voyons maintenant la dernière ligne de code.

/* A line between each part of the matrix  */     
     
      printf("\n");

Si vous supprimer cette fonction, la matrice sera toujours imprimer correctement, mais il n'y aura plus de ligne de séparation entre les différentes partie de votre matrice.


Exemple de sortie écran :

 A[R3,C5] : 

  +4   +6   +8 
  +4   +2   -9 
  -1   -1   +8 

  -5   -3 
  +2   -5 
  +8   -9 


  +4   +6   +8 
  +4   +2   -9 
  -1   -1   +8     Le problème est ici.
  -5   -3 
  +2   -5 
  +8   -9 

 Press return to continue
 Press X      to stop


Remontons dans le code de la matrice

/*   Select the last column  to draw  */
	
	  firstc = tempc;
	  
      tempc += Cx;       
      
      if(tempc<A[C_SIZE][C0])
      
           lastc  = tempc;
      else                 
           lastc  = A[C_SIZE][C0];


Cx correspond à notre choix de colonnes à imprimer par ligne. Les (C1,C2,C3...) dans l'appel de la fonction.

tempc est incrémenté de Cx colonnes à chaque passage.


Si tempc est inférieure à la taille de la matrice,

  • Cela veut dire que l'on va pouvoir imprimer Cx colonnes de plus.
  • C'est à dire que la dernière colonne à imprimer sera celle indiqué par la valeur de tempc.


Si tempc est supérieur ou égal à la taille de la matrice;

  • Il faut choisir comme dernière colonne à imprimer la dernière colonne de la matrice.
  • Dans le cas contraire on prend le risque d'imprimer des colonnes qui n'appartiennent pas à la matrice.