Installer et compiler ce fichier dans votre répertoire de travail.
![]() |
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.