[C] colonne de lettre
Fermé
johan
-
27 nov. 2005 à 20:11
emmanuelP Messages postés 137 Date d'inscription vendredi 8 février 2002 Statut Contributeur Dernière intervention 7 mai 2006 - 28 nov. 2005 à 00:21
emmanuelP Messages postés 137 Date d'inscription vendredi 8 février 2002 Statut Contributeur Dernière intervention 7 mai 2006 - 28 nov. 2005 à 00:21
A voir également:
- [C] colonne de lettre
- Déplacer une colonne excel - Guide
- Formule somme excel colonne - Guide
- Trier colonne excel - Guide
- Colonne word - Guide
- Telecharger macro convertir chiffre en lettre excel - Télécharger - Tableur
14 réponses
emmanuelP
Messages postés
137
Date d'inscription
vendredi 8 février 2002
Statut
Contributeur
Dernière intervention
7 mai 2006
161
27 nov. 2005 à 21:03
27 nov. 2005 à 21:03
Slt,
Il y a fort à parier que ça ne t'affichera pas grand chose de cohérent...
en effet:
*)dans ton printf, tu affichera des caractères commençant à 1 jusqu'à 25 or l'oridinateur utilise la table de codage ascii (http://www.commentcamarche.net/base/ascii.php3), ce qui fait qu'il faut rajouter une constante à j (65 pour le A et 97 pour le a).
La structure de ton programme est bonne dans l'ensemble avec le prog suivant ca devrait marcher:
Good luck
Il y a fort à parier que ça ne t'affichera pas grand chose de cohérent...
en effet:
for ( j = 0; j < 26; j++ ) { printf("%c :", j+1);<= là tu ne commencera qu'à b (voir *) } printf("\n"); <= tu ne passera à la ligne qu'à la toute fin...
*)dans ton printf, tu affichera des caractères commençant à 1 jusqu'à 25 or l'oridinateur utilise la table de codage ascii (http://www.commentcamarche.net/base/ascii.php3), ce qui fait qu'il faut rajouter une constante à j (65 pour le A et 97 pour le a).
La structure de ton programme est bonne dans l'ensemble avec le prog suivant ca devrait marcher:
for ( j = 97; j < 123; j++ ) { printf("%c :\n", j); }
Good luck
mais non , je me suis mal exprimé , mon code entier est celui ci :
ce code m'affiche un histogramme de la fréquence des lettres rencontrées en entrée , mais cet histogramme moi je veux qu'il affiche ( c'est un exemple ) :
a: __
b: ____
c: _
d: _________
donc avec mon code çà m'affichera çà , ou alors çà tu crois :
1: __
2: ___
3: _
4: _________
#include <stdio.h> int main(void) { int a, i, j; int tab[26]; for ( i = 0; i <1000; i++) tab[i] = 0; while ( ( a = getchar() ) != EOF ) { if ( a >= '97' && a =< '122' ) tab[a-'a']++; } for ( j = 0; j < 26; j++ ) { printf("%c :", j+1); } printf("\n");
ce code m'affiche un histogramme de la fréquence des lettres rencontrées en entrée , mais cet histogramme moi je veux qu'il affiche ( c'est un exemple ) :
a: __
b: ____
c: _
d: _________
donc avec mon code çà m'affichera çà , ou alors çà tu crois :
1: __
2: ___
3: _
4: _________
pardon , le bon code c'est :
#include <stdio.h> int main(void) { int a, i, j; int tab[26]; for ( i = 0; i <1000; i++) tab[i] = 0; while ( ( a = getchar() ) != EOF ) { if ( a >= '97' && a =< '122' ) tab[a-'a']++; } for ( j = 0; j < 26; j++ ) { printf("%c :", j+1); for ( i = 0; i < tab[j]; i++ ) { printf("_"); } printf("\n"); } return0; }
j'ai une erreur de compilation avec ce code :
ligne 15-17 warning : multi character constant , error syntax before < , ...
ligne 15-17 warning : multi character constant , error syntax before < , ...
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
emmanuelP
Messages postés
137
Date d'inscription
vendredi 8 février 2002
Statut
Contributeur
Dernière intervention
7 mai 2006
161
27 nov. 2005 à 21:38
27 nov. 2005 à 21:38
Ah, je vois un peu mieux ce que tu veux faire...
Ca ne change pas mes observations pour ta 2ème boucle for!
Ensuite prends garde car tu déclares
un tableau de 1000 cases!! (attention le C le permet!)
compte tenu de tout ca:
Good luck
Ca ne change pas mes observations pour ta 2ème boucle for!
Ensuite prends garde car tu déclares
int tab[26]soit un tableau d'entiers de 26 cases et tu initialises:
for ( i = 0; i <1000; i++) tab[i] = 0;
un tableau de 1000 cases!! (attention le C le permet!)
compte tenu de tout ca:
#include <stdio.h> int main(void) { int a, i, j; int tab[26]; for ( i = 0; i <25; i++) tab[i] = 0; /*initialisation du tableau dans ses limites*/ while ( ( a = getchar() ) != EOF ) { if (( a >= 97) && (a =< 122) ) tab[a-'a']++; /*code numerique donc pas de cote sinon utiliser : if (( a >= 'a') && (a =< 'z') )*/ } for ( j = 0; j < 26; j++ ) { printf("%c :", j+97);/* on commence à 'a'*/ for ( i = 0; i < tab[j]; i++ ) { printf("_"); } printf("\n"); } return 0; }
Good luck
int tab[26];
for ( i = 0; i <1000; i++)
tab[i] = 0;
donc ce code veut dire : j'initialise un tableau de 26 cases contenant des données de types int . tant que la i èeme case est infénieure à 1000 , je mets les cases à la valeur 0 , c'est bien ceci?
for ( i = 0; i <1000; i++)
tab[i] = 0;
donc ce code veut dire : j'initialise un tableau de 26 cases contenant des données de types int . tant que la i èeme case est infénieure à 1000 , je mets les cases à la valeur 0 , c'est bien ceci?
2 autres petites question :
if (( a >= 'a') && (a =< 'z') )*
pourquoi mettre a>='a' entre paranthèses?
printf("%c :", j+97);/* on commence à 'a'*/
la fonction printf considère 97 comme le code ascii de a ? je ne savais pas...
if (( a >= 'a') && (a =< 'z') )*
pourquoi mettre a>='a' entre paranthèses?
printf("%c :", j+97);/* on commence à 'a'*/
la fonction printf considère 97 comme le code ascii de a ? je ne savais pas...
emmanuelP
Messages postés
137
Date d'inscription
vendredi 8 février 2002
Statut
Contributeur
Dernière intervention
7 mai 2006
161
27 nov. 2005 à 22:09
27 nov. 2005 à 22:09
Négatif!
En fait tu fais:
tab[0]=0
tab[1]=0
...
tab[59]=0
...
tab[999]=0
dans:
Good luck
En fait tu fais:
tab[0]=0
tab[1]=0
...
tab[59]=0
...
tab[999]=0
dans:
for ( i = 0; i <1000; i++) tab[i] = 0;c'est i que tu incrémente de 0 à 999 alors que tu n'as déclaré qu'un tableau de 26 cases...
Good luck
mon compilateur m'affiche une erreur de syntaxe à la compilation , ligne 15 :
if ((a >= 'a') && (a =< 'z'))
error syntax before '<' token , ce qui veut dire?
if ((a >= 'a') && (a =< 'z'))
error syntax before '<' token , ce qui veut dire?
emmanuelP
Messages postés
137
Date d'inscription
vendredi 8 février 2002
Statut
Contributeur
Dernière intervention
7 mai 2006
161
27 nov. 2005 à 22:29
27 nov. 2005 à 22:29
Pour répondre à tes 2 derniers posts:
- les parenthèses ont la même utilité qu'en maths en assurant le respect des règles d'associativité car en fait, ce que tu mets dans le if est une opération de calcul (&& est une fonction) qui a pour résultat un booléen.
- ce n'est pas seulement le printf qui "considère" le caractère 'a' égal à 97, en fait, tous les caractères sont manipulés par toutes les fonctions sous forme codée (cf + haut). La fonction printf permet de retranscrire ce code sous forme d'un 'a' à l'écran...
- l'erreur qui s'affiche est un pb de syntaxe avant le jeton (token) '<' qui correspond à la fraction de code que le compilateur examine(analyse syntaxique). En fait c'est une erreur qui m'a échappé: il faut mettre le égal après < soit:
Good luck
- les parenthèses ont la même utilité qu'en maths en assurant le respect des règles d'associativité car en fait, ce que tu mets dans le if est une opération de calcul (&& est une fonction) qui a pour résultat un booléen.
- ce n'est pas seulement le printf qui "considère" le caractère 'a' égal à 97, en fait, tous les caractères sont manipulés par toutes les fonctions sous forme codée (cf + haut). La fonction printf permet de retranscrire ce code sous forme d'un 'a' à l'écran...
- l'erreur qui s'affiche est un pb de syntaxe avant le jeton (token) '<' qui correspond à la fraction de code que le compilateur examine(analyse syntaxique). En fait c'est une erreur qui m'a échappé: il faut mettre le égal après < soit:
if ((a >= 'a') && (a <= 'z'))
Good luck
c'est bon , le programme marche parfaitement , mais j'ai une dernière interrogation sur la variable i :
for ( i = 0; i <25; i++) tab[i] = 0;
ici le "i" représente toutes les cases tu tableau on est bien d'accord .
mais ici regarde :
for ( i = 0; i < tab[j]; i++ ) , le i représente la valeur contenu la case j n'est ce pas?
donc notre variable i dans notre programme représente non seulement les cases 0 à 25 , mais également la valeur de leur contenu ?
ce qui est étrange c'est que au départ i représente toutes les cases , et que par la suite on utilise j pour représenter les cases avec tab[j]...
for ( i = 0; i <25; i++) tab[i] = 0;
ici le "i" représente toutes les cases tu tableau on est bien d'accord .
mais ici regarde :
for ( i = 0; i < tab[j]; i++ ) , le i représente la valeur contenu la case j n'est ce pas?
donc notre variable i dans notre programme représente non seulement les cases 0 à 25 , mais également la valeur de leur contenu ?
ce qui est étrange c'est que au départ i représente toutes les cases , et que par la suite on utilise j pour représenter les cases avec tab[j]...
emmanuelP
Messages postés
137
Date d'inscription
vendredi 8 février 2002
Statut
Contributeur
Dernière intervention
7 mai 2006
161
27 nov. 2005 à 23:12
27 nov. 2005 à 23:12
Encore une fois non...
i est un entier, quand tu le fais varier de 0 à 25, cela te permet d'accéder à la ième case de ton tableau en faisant tab[i].
Si tu reprends ton code:
tu constates qu'il signifie que:
for ( i = 0; ====>pour i initialisé à 0,
i < tab[j]; ====>tant que i est inférieur à la valeur de la case j de tab
i++) ========> je rajoute 1 à i
{ printf("_");} ==>j'affiche un "_"
autrement dit : admettons que j=5 et tab[5]=2 (tu as donc 2 fois la lettre 'e' dans ta saisie),
la boucle va donc commencer à 0 qui est inférieur à tab[5] augmenter i de 1 et afficher "_"
puis i étant égal à 1 on recommence encore une fois: i+1=2 et on affiche "_"
cette fois i est égal à tab[5] donc on sort (et on repart dans la boucle de niveau supérieur qui correspond à j=6 donc la lettre 'f' ... jusqu'à
'z').
Il faut voir les variables i et j comme des index que tu fais varier pour ouvrir un tiroir (tab[]) correspondant à leur numéro...
Good luck
i est un entier, quand tu le fais varier de 0 à 25, cela te permet d'accéder à la ième case de ton tableau en faisant tab[i].
Si tu reprends ton code:
for ( i = 0; i < tab[j]; i++ ) { printf("_"); }
tu constates qu'il signifie que:
for ( i = 0; ====>pour i initialisé à 0,
i < tab[j]; ====>tant que i est inférieur à la valeur de la case j de tab
i++) ========> je rajoute 1 à i
{ printf("_");} ==>j'affiche un "_"
autrement dit : admettons que j=5 et tab[5]=2 (tu as donc 2 fois la lettre 'e' dans ta saisie),
la boucle va donc commencer à 0 qui est inférieur à tab[5] augmenter i de 1 et afficher "_"
puis i étant égal à 1 on recommence encore une fois: i+1=2 et on affiche "_"
cette fois i est égal à tab[5] donc on sort (et on repart dans la boucle de niveau supérieur qui correspond à j=6 donc la lettre 'f' ... jusqu'à
'z').
Il faut voir les variables i et j comme des index que tu fais varier pour ouvrir un tiroir (tab[]) correspondant à leur numéro...
Good luck
emmanuelP
Messages postés
137
Date d'inscription
vendredi 8 février 2002
Statut
Contributeur
Dernière intervention
7 mai 2006
161
28 nov. 2005 à 00:21
28 nov. 2005 à 00:21
de rien...