A voir également:
- Tableau en C
- Tableau word - Guide
- Tableau ascii - Guide
- Trier un tableau excel - Guide
- Tableau croisé dynamique - Guide
- Imprimer tableau excel sur une page - Guide
14 réponses
Salut,
Ton tableau est mal rempli.
Remplace :
Par :
Cdlt.
Ton tableau est mal rempli.
Remplace :
printf("%d\t", TT[i]=k++);
Par :
printf("%d\t", TT[i*9+j]=k++);
Cdlt.
Salut, merci pour ta réponse mais je n'ai pas comprs ce que ça fait ,
========> [i*9+j] C'est ça que je comprend pas...
Merci d'avnce
========> [i*9+j] C'est ça que je comprend pas...
Merci d'avnce
c'est encore moi. Ppour l'instant, mon tableau est inititalisé de la sorte :
j'aimerais l'initialisé de cette façon
mais je ne vois pas trop par ou commencer... Si tu as une idée à me suggérer je suis preneur.
123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789
j'aimerais l'initialisé de cette façon
123123123 456456456 789789789 123123123 456456456 789789789 123123123 456456456 789789789
mais je ne vois pas trop par ou commencer... Si tu as une idée à me suggérer je suis preneur.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Salut, super ça foncitonne mais je ne vois pas comment.... J'ai juste changer de place i et j
Pour encoder le premier chiffre, on fait 1 + 3 fois i (qui vaut 0) + j (qui vaut 0) modulo 3 et après modulo 9 ça fait donc 1
Pour encoder le deuxième chiffre, on fait 1 + 3 fois i (qui vaut donc 1) + j(qui vaut 0 ) modulo 3 et après modulo 9.===> seulement je ne comprend pas le calcul. 1+ 3*1+0%3%9 car quand je calcul ça je devrais trouver 2 et moi je trouve 4,
Merci d'avance
printf("%d\t",TT[i+j*9]=1+(3*i+j%3)%9);
Pour encoder le premier chiffre, on fait 1 + 3 fois i (qui vaut 0) + j (qui vaut 0) modulo 3 et après modulo 9 ça fait donc 1
Pour encoder le deuxième chiffre, on fait 1 + 3 fois i (qui vaut donc 1) + j(qui vaut 0 ) modulo 3 et après modulo 9.===> seulement je ne comprend pas le calcul. 1+ 3*1+0%3%9 car quand je calcul ça je devrais trouver 2 et moi je trouve 4,
3*1=3 , +o%3=0 ==> 3%9= 3 ==> 1+3 = 4donc j'ai une erreur de compréhension.
Merci d'avance
Salut,
Ah, désolé. J'ai oublié de te dire d'inverser i et j dans les boucles for.
Ce qui donne en fait :
Et là, tu devrais mieux comprendre en refaisant les calculs.
Sinon je t'explique pourquoi. En fait, ton calcul est bon, et celui de l'ordi aussi. Mais tu n'affiches pas à l'écran ton tableau (en matrice) tel qui l'est vraiment. Dans ta version, tu calcules en colonnes, et tu affiches en ligne. D'où le quiproquo.
Sinon, je te conseille de séparer le printf de ta fonction EncodeTT(), et de faire une fonction d'affichage.
Car, comme je t'ai expliqué, tu ne remplis pas forcément de la même façon que tu souhaites l'afficher à l'écran, donc tu risques d'avoir des problèmes de visualisations du tableau si tu fais pas attention.
Cdlt
Ah, désolé. J'ai oublié de te dire d'inverser i et j dans les boucles for.
Ce qui donne en fait :
for(j=0;j<9;j++) for(i=0;i<9;i++) printf("%d\t",TT[i+j*9]=1+(3*j+i%3)%9);
Et là, tu devrais mieux comprendre en refaisant les calculs.
Sinon je t'explique pourquoi. En fait, ton calcul est bon, et celui de l'ordi aussi. Mais tu n'affiches pas à l'écran ton tableau (en matrice) tel qui l'est vraiment. Dans ta version, tu calcules en colonnes, et tu affiches en ligne. D'où le quiproquo.
Sinon, je te conseille de séparer le printf de ta fonction EncodeTT(), et de faire une fonction d'affichage.
Car, comme je t'ai expliqué, tu ne remplis pas forcément de la même façon que tu souhaites l'afficher à l'écran, donc tu risques d'avoir des problèmes de visualisations du tableau si tu fais pas attention.
Cdlt
Salut,
si j'ai bien compris, comme c'est indiqué, ça rempli le tableau verticalement... C'est ça non? Seulement avec cette façon :
ça rempli le tableau comme suit :
et mes deux fonctions pour trouver la ligne ou la colonne fonctionnent
fonctions :
Seulement quand je change l'ordre des boucles dans l'encodage du tableau, mes deux fonctions ne focntionnes plus... Je comprend pas pourquoi, qu'est ce qui change?
changement des boucles
ça donne comme affichage :
Merci d'avance pour tes explications
si j'ai bien compris, comme c'est indiqué, ça rempli le tableau verticalement... C'est ça non? Seulement avec cette façon :
for(j=0;j<9;j++) for(i=0;i<9;i++) printf("%d\t",TT[i+j*9]=1+(3*j+i%3)%9);
ça rempli le tableau comme suit :
147147147 258258258 369369369 147147147 258258258 369369369 147147147 258258258 369369369
et mes deux fonctions pour trouver la ligne ou la colonne fonctionnent
fonctions :
int CheckCC (int c, int nombre) { int j; for (j=c;j<=80;j+=9) { if (TT[j]==nombre) return 1; } return 0; } int CheckCL (int l, int nombre) { int j; for (j=l*9;j<=l+9;j++) { if (TT[j]==nombre) return 1; }
Seulement quand je change l'ordre des boucles dans l'encodage du tableau, mes deux fonctions ne focntionnes plus... Je comprend pas pourquoi, qu'est ce qui change?
changement des boucles
for(i=0;i<9;i++) for(j=0;j<9;j++) printf("%d\t",TT[i+j*9]=1+(3*j+i%3)%9);
ça donne comme affichage :
123123123 456456456 789789789 123123123 456456456 789789789 123123123 456456456 789789789
Merci d'avance pour tes explications
En fait j'ai compris pour mes fonctions, comme ça rempli le tableau verticalement, c'est normal que je ne trouve pas le nombre demandé comme si le tableau était encodé horizontalement.
Par contre, je ne vois pas comment remplir ce tableau horizontalement comme verticalement.
Par contre, je ne vois pas comment remplir ce tableau horizontalement comme verticalement.
Non,
Regarde bien. i évolue plus souvent, et il n'est pas multiplié par 9. Donc tu restes le long de la ligne.
Donc tu le remplis horizontalement. Et ça m'étonnerait fort que ça donne donne le résultat que t'as donné.
Ca te donne plutôt :
Autrement dit le bon résultat.
Là j s'incrémente plus souvent et est multiplié par 9. Donc on remplit en colonne. Et les colonnes s'affiche en ligne.
Car avec le printf, tu affiches le nombre, puis tabulation, puis tu affiches l'autre terme (celui de l'autre colonne).
Donc le tableau n'est pas conforme à ce que tu vois à l'écran. En gros, ce que tu vois à l'écran c'est ce que tu veux. Mais en fait ton tableau est différent.
C'est pour ça que je te conseille de ne pas mettre de printf dans ta fonction et d'utiliser seulement l'affectation. (TT[...]=...).
Et tu fais une autre fonction d'affichage. Comme ça tu n'auras pas ce problème.
for(j=0;j<9;j++) for(i=0;i<9;i++) printf("%d\t",TT[i+j*9]=1+(3*j+i%3)%9);
Regarde bien. i évolue plus souvent, et il n'est pas multiplié par 9. Donc tu restes le long de la ligne.
Donc tu le remplis horizontalement. Et ça m'étonnerait fort que ça donne donne le résultat que t'as donné.
Ca te donne plutôt :
1 2 3 1 2 3 ... 4 ...
Autrement dit le bon résultat.
for(i=0;i<9;i++) for(j=0;j<9;j++) printf("%d\t",TT[i+j*9]=1+(3*j+i%3)%9);
Là j s'incrémente plus souvent et est multiplié par 9. Donc on remplit en colonne. Et les colonnes s'affiche en ligne.
Car avec le printf, tu affiches le nombre, puis tabulation, puis tu affiches l'autre terme (celui de l'autre colonne).
Donc le tableau n'est pas conforme à ce que tu vois à l'écran. En gros, ce que tu vois à l'écran c'est ce que tu veux. Mais en fait ton tableau est différent.
C'est pour ça que je te conseille de ne pas mettre de printf dans ta fonction et d'utiliser seulement l'affectation. (TT[...]=...).
Et tu fais une autre fonction d'affichage. Comme ça tu n'auras pas ce problème.
rebonsoir,
je t'affiche mes deux fonctions car je n'ai rien changé de ça
et tout fonctionne correctement, j'ai bien à l'affichage ça :
par contre dans ma fonction AfficheTT() j'ai utilisé des conditions if, y'aurait pas plus court tu penses???
je t'affiche mes deux fonctions car je n'ai rien changé de ça
for(j=0;j<9;j++) for(i=0;i<9;i++) printf("%d\t",TT[i+j*9]=1+(3*j+i%3)%9);
et tout fonctionne correctement, j'ai bien à l'affichage ça :
123123123 456456456 789789789 123123123 456456456 789789789 123123123 456456456 789789789
par contre dans ma fonction AfficheTT() j'ai utilisé des conditions if, y'aurait pas plus court tu penses???
void EncodeTT() { int i=0, j=0; for (j=0;j<=8; j++) { for (i=0; i<=8;i++) { TT[i*9+j]=1+(3*i+j%3)%9; } } } void AfficheTT() { int i; for (i=0; i<=80; i++) { printf("%d\t", TT[i]); if (i==8%17) printf("\n"); if (i==17%26) printf("\n"); if (i==26%35) printf("\n"); if (i==35%44) printf("\n"); if (i==44%53) printf("\n"); if (i==53%62) printf("\n"); if (i==62%71) printf("\n"); if (i==71%80) printf("\n"); } }
Ouh là, si si, il y a plus court lool.
Ou tu peux aussi avec deux boucles for, en t'inspirant de ta fonction de remplissage de tableau.
Cdlt
int i; for(i=0;i<81;i++){ if(! i%9) puts(""); printf("%d\t",TT[i]); }
Ou tu peux aussi avec deux boucles for, en t'inspirant de ta fonction de remplissage de tableau.
Cdlt