Tableau en C
Fermé
limbergh
Messages postés
658
Date d'inscription
dimanche 8 juillet 2007
Statut
Membre
Dernière intervention
29 juin 2010
-
8 nov. 2008 à 17:03
limbergh Messages postés 658 Date d'inscription dimanche 8 juillet 2007 Statut Membre Dernière intervention 29 juin 2010 - 9 nov. 2008 à 22:11
limbergh Messages postés 658 Date d'inscription dimanche 8 juillet 2007 Statut Membre Dernière intervention 29 juin 2010 - 9 nov. 2008 à 22:11
A voir également:
- Tableau en C
- Tableau croisé dynamique - Guide
- Tableau ascii - Guide
- Tableau word - Guide
- Trier tableau excel - Guide
- Comment imprimer un tableau excel sur une seule page - Guide
14 réponses
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 844
8 nov. 2008 à 17:57
8 nov. 2008 à 17:57
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.
limbergh
Messages postés
658
Date d'inscription
dimanche 8 juillet 2007
Statut
Membre
Dernière intervention
29 juin 2010
140
8 nov. 2008 à 18:10
8 nov. 2008 à 18:10
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
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 844
8 nov. 2008 à 18:20
8 nov. 2008 à 18:20
Toi, tu as juste mis i. Or, cette variable est dans ta boucle for et prends ses valeurs entre 0 et 8 compris. Du coup, seule la première partie de ton tableau sera initialisée.
Or en faisant i*9+j, tu vas prendre successivement tous les indices du tableau.
Or en faisant i*9+j, tu vas prendre successivement tous les indices du tableau.
limbergh
Messages postés
658
Date d'inscription
dimanche 8 juillet 2007
Statut
Membre
Dernière intervention
29 juin 2010
140
8 nov. 2008 à 18:30
8 nov. 2008 à 18:30
donc c'est pas un pointeur, c'est juste i fois neuf plus j , c'est ça?
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 844
8 nov. 2008 à 18:37
8 nov. 2008 à 18:37
Oui une simple multiplication. Sois pas traumatisé par les pointeurs ;)
limbergh
Messages postés
658
Date d'inscription
dimanche 8 juillet 2007
Statut
Membre
Dernière intervention
29 juin 2010
140
8 nov. 2008 à 19:03
8 nov. 2008 à 19:03
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
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 844
8 nov. 2008 à 20:02
8 nov. 2008 à 20:02
Dans ta fonction EncodeTT(), remplace le printf par :
printf("%d\t",TT[i+j*9]=1+(3*j+i%3)%9);
limbergh
Messages postés
658
Date d'inscription
dimanche 8 juillet 2007
Statut
Membre
Dernière intervention
29 juin 2010
140
9 nov. 2008 à 11:59
9 nov. 2008 à 11:59
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
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 844
9 nov. 2008 à 12:20
9 nov. 2008 à 12:20
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
limbergh
Messages postés
658
Date d'inscription
dimanche 8 juillet 2007
Statut
Membre
Dernière intervention
29 juin 2010
140
9 nov. 2008 à 19:18
9 nov. 2008 à 19:18
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
limbergh
Messages postés
658
Date d'inscription
dimanche 8 juillet 2007
Statut
Membre
Dernière intervention
29 juin 2010
140
9 nov. 2008 à 19:36
9 nov. 2008 à 19:36
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.
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 844
9 nov. 2008 à 19:42
9 nov. 2008 à 19:42
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.
limbergh
Messages postés
658
Date d'inscription
dimanche 8 juillet 2007
Statut
Membre
Dernière intervention
29 juin 2010
140
9 nov. 2008 à 21:18
9 nov. 2008 à 21:18
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"); } }
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 844
9 nov. 2008 à 21:35
9 nov. 2008 à 21:35
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
limbergh
Messages postés
658
Date d'inscription
dimanche 8 juillet 2007
Statut
Membre
Dernière intervention
29 juin 2010
140
9 nov. 2008 à 21:50
9 nov. 2008 à 21:50
ça veut dire quoi cette ligne ci :
if(! i%9) puts("");
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 844
9 nov. 2008 à 22:10
9 nov. 2008 à 22:10
Si i est un multiple de 9, alors tu sautes une ligne.
puts("blabla") signifie printf("blabla\n")
Cdlt
puts("blabla") signifie printf("blabla\n")
Cdlt
limbergh
Messages postés
658
Date d'inscription
dimanche 8 juillet 2007
Statut
Membre
Dernière intervention
29 juin 2010
140
9 nov. 2008 à 22:11
9 nov. 2008 à 22:11
ok, et encore merci pour ton aide...