A voir également:
- À l’aide des tableaux ci-dessous, trouvez le mot dont le code ascii est le suivant : 61 64 6d 69 73 73 69 6f 6e
- À l'aide des tableaux ci-dessous, trouvez le mot dont le code ascii est le suivant : 61 64 6d 69 73 73 69 6f 6e - Guide
- Comment trouver le mot de passe wifi sur son téléphone - Guide
- Winrar 64 bits windows 10 - Télécharger - Compression & Décompression
- Comment déverrouiller un téléphone quand on a oublié le code - Guide
- Le mode suivi des modifications - Guide
20 réponses
Salut
C'est tout a fait ca, mais en d'autres termes on pourrait tout simplement dire que "nlettre[nl]++" comptabilise (ici en incrémentant) le nombre de lettres contenues dans la ligne numero "nl"
Humm je sais pas si c'est plus clair, mais en tout cas t'avais raison ;-)
C'est tout a fait ca, mais en d'autres termes on pourrait tout simplement dire que "nlettre[nl]++" comptabilise (ici en incrémentant) le nombre de lettres contenues dans la ligne numero "nl"
Humm je sais pas si c'est plus clair, mais en tout cas t'avais raison ;-)
d'accord , bon maintenant j'ai un petit soucis d'affichage , mon programme doit afficher ceci :
1: ___
2:__
3:__________
4:______
5:__
6:_________
7:______
8:_______
9:___
10 :_________
tu vois , c'est un histogramme , le caractère '_' est utilisé pour dessiner l'histogramme , et la taille de la barre correspond au nombre de fois ou un mot de 1 lettre est présent , ou un mot de 2 lettres est présent..., donc je dois utiliser printf ici , mais coment faire pour afficher tout ceci...
1: ___
2:__
3:__________
4:______
5:__
6:_________
7:______
8:_______
9:___
10 :_________
tu vois , c'est un histogramme , le caractère '_' est utilisé pour dessiner l'histogramme , et la taille de la barre correspond au nombre de fois ou un mot de 1 lettre est présent , ou un mot de 2 lettres est présent..., donc je dois utiliser printf ici , mais coment faire pour afficher tout ceci...
scol30
Messages postés
22
Date d'inscription
samedi 19 novembre 2005
Statut
Membre
Dernière intervention
2 décembre 2005
19 nov. 2005 à 21:43
19 nov. 2005 à 21:43
pour faire un printf tu as seulement besoin de faire un while sur chaque valeur du tableau et de faire
Quelque chose comme ça
C'est probablement pas le plus beau code mais ca marche plutôt bien je crois.
Stef
printf("_");
Quelque chose comme ça
int i =0; int val = tab[0]; while(i!=INDEXMAXTAB) { printf("_"); val--; if(val==0) { printf("\n"); i++; val = tab[i]; } }
C'est probablement pas le plus beau code mais ca marche plutôt bien je crois.
Stef
je n'ai jamais vu INDEXMAXTAB , j'ai pas le droit de l'utiliser , j'ai juste printf et je ne comprends pas bien la démarche , c'est gentil de m'aider , mais je préfèrerai des indices que du code tout fait , sinon je progresse pas...
scol30
Messages postés
22
Date d'inscription
samedi 19 novembre 2005
Statut
Membre
Dernière intervention
2 décembre 2005
19 nov. 2005 à 22:27
19 nov. 2005 à 22:27
La variable INDEXMAXTAB indiquait juste la valeur max du nombre d'élément que tu as dans ton tableau.
tab[40] ici 40
Pour la démarche:
ton but et de faire printf autant de fois que les int pointés par tab[i]
val = tab[0]; ici tu réccupères la valeur à tab[0]
tant que tu n'as pas atteinds le dernier index de ton tableau
printf _
val -- ; tu décrémentes val
si tu a val == 0 tu sais que tu as printé toutes les valeurs de tab[i], tu dois donc aller à la ligne et printer les valeurs de l'index suivant.
aller à la ligne
incrémenter index tableau
Voila,
Dis moi si tu veux + d'explications,
Stef
tab[40] ici 40
Pour la démarche:
ton but et de faire printf autant de fois que les int pointés par tab[i]
val = tab[0]; ici tu réccupères la valeur à tab[0]
tant que tu n'as pas atteinds le dernier index de ton tableau
printf _
val -- ; tu décrémentes val
si tu a val == 0 tu sais que tu as printé toutes les valeurs de tab[i], tu dois donc aller à la ligne et printer les valeurs de l'index suivant.
aller à la ligne
incrémenter index tableau
Voila,
Dis moi si tu veux + d'explications,
Stef
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
je ne comprends vraiment pas , le but de l'exo c'est de faire un programme qui affiche la longueur des mots reçu en entrée , donc à l'écran je dois avoir çà comme résultat :
1: __
2:_____
3:___
4:____
5:_____
6:___
7:
çà veut dire qu'il y a 2 mots de 1 caractère , 5 mots de 2 caractères , 3 mots de 3 caractères , 4 mots de 4 caractères5 mots de 5 caractères , 3 mots de 6 caractères , et 0 mots de 7 .
est ce que si je fais çà çà peut marcher :
printf("1:\n"; nl * _ );
je crois pas , car le n * _ , çà veut pas dire nl * longueur de _ , puis je vais devoir me taper 7 écriture de printf .
1: __
2:_____
3:___
4:____
5:_____
6:___
7:
çà veut dire qu'il y a 2 mots de 1 caractère , 5 mots de 2 caractères , 3 mots de 3 caractères , 4 mots de 4 caractères5 mots de 5 caractères , 3 mots de 6 caractères , et 0 mots de 7 .
est ce que si je fais çà çà peut marcher :
printf("1:\n"; nl * _ );
je crois pas , car le n * _ , çà veut pas dire nl * longueur de _ , puis je vais devoir me taper 7 écriture de printf .
scol30
Messages postés
22
Date d'inscription
samedi 19 novembre 2005
Statut
Membre
Dernière intervention
2 décembre 2005
19 nov. 2005 à 23:04
19 nov. 2005 à 23:04
de toute façon tu n'as pas d'autres choix que d'afficher le nombre de _ que tu retrouves dans ton tableau.
Le printf te permet juste de faire l'affichage d'une donnée dans un format précis.
Donc tu dois utiliser un itérateur qui va te permettre de balayer tous les éléments de ton tableau et d'afficher pour chacun d'eux _.
Pour cela tu as plusieurs possibiolités, boucle for, while et surement beaucoup d'autres.
Stef
Le printf te permet juste de faire l'affichage d'une donnée dans un format précis.
Donc tu dois utiliser un itérateur qui va te permettre de balayer tous les éléments de ton tableau et d'afficher pour chacun d'eux _.
Pour cela tu as plusieurs possibiolités, boucle for, while et surement beaucoup d'autres.
Stef
alors en français mon algorithme donne donc :
tant que je ne suis pas arrivé à la valeur 7 de mon tableau , j'affiche '_'
mais comment faire pour que 1 corresponde à _ , que 2 corresponde à __ , que 3 à ___ , bref comment multiplier à longueur du _ en fonction de la taille de la variable dans le tableau...
tant que je ne suis pas arrivé à la valeur 7 de mon tableau , j'affiche '_'
mais comment faire pour que 1 corresponde à _ , que 2 corresponde à __ , que 3 à ___ , bref comment multiplier à longueur du _ en fonction de la taille de la variable dans le tableau...
je pense après avoir relu tes messages avoir compris l'algo , mais ce que je ne comprends vraiment pas c'est comment le _ sera multiplié en fonction de la taille de la variable du tableau , si à la case 1 du tableau j'ai nl qui vaut 3 , comment afficher ___ au lieu de _ ?
scol30
Messages postés
22
Date d'inscription
samedi 19 novembre 2005
Statut
Membre
Dernière intervention
2 décembre 2005
20 nov. 2005 à 18:59
20 nov. 2005 à 18:59
Ce que je te conseille c'est de prendre l'exemple suivant et de l'écrire entièrement en écrivant tout se qui se passe a chaque étapes.
Prenons l'exemple suivant qui résulte de ton traitement de la chaine de caractère:
tab[3] = {2, 3, 4}
cela donne
tab[0] = 2
tab[1] = 3
tab[2] = 4
avant la boucle while tu mémorises tab[0] dans val. Ta boucle while elle se terminera quand tu auras balayé tous les index de ton tableau, dans notre cas 3.
1ere itération
print _
val-- = 1
test if false
test while false
print _
val-- = 0
test if true => incrémente index tab et val =tab[1) = 3
aller à la ligne
A la fin de cette itération tu a bien afficher
__
Maintenant tu es à la ligne suivante le test du while est false donc tu recommence la même méthode sauf que maintenant val = tab[1] = 3
Voila
Stef
Prenons l'exemple suivant qui résulte de ton traitement de la chaine de caractère:
tab[3] = {2, 3, 4}
cela donne
tab[0] = 2
tab[1] = 3
tab[2] = 4
avant la boucle while tu mémorises tab[0] dans val. Ta boucle while elle se terminera quand tu auras balayé tous les index de ton tableau, dans notre cas 3.
1ere itération
print _
val-- = 1
test if false
test while false
print _
val-- = 0
test if true => incrémente index tab et val =tab[1) = 3
aller à la ligne
A la fin de cette itération tu a bien afficher
__
Maintenant tu es à la ligne suivante le test du while est false donc tu recommence la même méthode sauf que maintenant val = tab[1] = 3
Voila
Stef
j'ai pas le droit d'utiliser les mots false .... , j'ai uniquement droit à printf c'est tout , rien d'autre ( hormis les boucles ... ) .
Donc moi je veux que quelquechose ( je sais meme pas ce que c'est ) , parcours mon tableau , mon tableau fait 10 cases , il se nomme int nlettre[10] , donc je dois nommer une variable qui parcours le tableau? ok , je la nomme i , int i;
int i;
ensuite j'affiche le caractère _ , ( je vois vraiment pas pq )
printf("_")
comment coder en C une variable qui parcourt , ensuite comment dire en C par exemple :
i est à la case 1 , i lit la valeur de la variable dans la case 1 , et printf affiche cette valeur sous forme de barre multipliée par la valeur , putin là je nage complètement , stp essaye d'employer un minimum de mots car je débute vraiment et je commence franchement à m'énerver sur cet exercice car je croyais avoir compris mais je nage encore plus .
Merci de ta patience :-(
Donc moi je veux que quelquechose ( je sais meme pas ce que c'est ) , parcours mon tableau , mon tableau fait 10 cases , il se nomme int nlettre[10] , donc je dois nommer une variable qui parcours le tableau? ok , je la nomme i , int i;
int i;
ensuite j'affiche le caractère _ , ( je vois vraiment pas pq )
printf("_")
comment coder en C une variable qui parcourt , ensuite comment dire en C par exemple :
i est à la case 1 , i lit la valeur de la variable dans la case 1 , et printf affiche cette valeur sous forme de barre multipliée par la valeur , putin là je nage complètement , stp essaye d'employer un minimum de mots car je débute vraiment et je commence franchement à m'énerver sur cet exercice car je croyais avoir compris mais je nage encore plus .
Merci de ta patience :-(
que penses tu de ce code ( je galère avec les { } :
for ( int j = 0; j < 10; j++)
{
printf("%d :", j);
for ( int i=0; i<nlettre[j]; i++)
{
printf("_");
}
}
ya un soucis dans les { à en regarder l'affichage sous emacs...
ici i et j sont des variables justes utilisées par la boucle , donc je ne les ai pas déclaré au départ .
for ( int j = 0; j < 10; j++)
{
printf("%d :", j);
for ( int i=0; i<nlettre[j]; i++)
{
printf("_");
}
}
ya un soucis dans les { à en regarder l'affichage sous emacs...
ici i et j sont des variables justes utilisées par la boucle , donc je ne les ai pas déclaré au départ .
scol30
Messages postés
22
Date d'inscription
samedi 19 novembre 2005
Statut
Membre
Dernière intervention
2 décembre 2005
21 nov. 2005 à 07:49
21 nov. 2005 à 07:49
C'est une des autres facon que je comptait te presenter pour resoudre ton probleme. Ton cobde me parait plutot bien. Le seul inconvenient est que tu ne geres par le retour a la ligne quand tu as fini de traiter les index de ton tableau.
Pour cela tu as juste a ajouter
printf("\n"); au bon endroit et c'est bon.
Pour ce qui est des {, ton soucis n'est pas dans le bout de code que tu as mis.
A+
Stef
Pour cela tu as juste a ajouter
printf("\n"); au bon endroit et c'est bon.
Pour ce qui est des {, ton soucis n'est pas dans le bout de code que tu as mis.
A+
Stef
voici le code complet du programme qui affiche l'histogramme des longueurs des mots rencontrés en entrée , ya forcément un problème avec les { } :
il manque forcément des { } quelquepart , je ne sais pas où les placer car je n'ai jamais fait 2 boucles for à la suite , ( j'ai demandé de l'aide pour écrire ces 2 boucles mais on m'a pas trop expliqué le principe de 2 boucles for ) , ceci dit je comprends fort bien le principe de 1 boucle , while ou for , mais un for dans un for j'ai jamais vu ...
#include <stdio.h> int main(void) { int a; int nlettre[10]; int nl = 0; while ( ( a = getchar() ) != EOF ) { if ( a == ' ' || a == '\n' || a == '\t' ) nl=0 else nl++; nlettre[nl]++; } for ( int j = 0; j < 10; j++) printf("%d :", j); for ( int i=0; i<nlettre[j]; i++) printf("_"); return 0;
il manque forcément des { } quelquepart , je ne sais pas où les placer car je n'ai jamais fait 2 boucles for à la suite , ( j'ai demandé de l'aide pour écrire ces 2 boucles mais on m'a pas trop expliqué le principe de 2 boucles for ) , ceci dit je comprends fort bien le principe de 1 boucle , while ou for , mais un for dans un for j'ai jamais vu ...
scol30
Messages postés
22
Date d'inscription
samedi 19 novembre 2005
Statut
Membre
Dernière intervention
2 décembre 2005
21 nov. 2005 à 14:17
21 nov. 2005 à 14:17
Le principe des boucles for imbriquees ou non et toujours le meme. Tu dois mettre entre accolades le code correspondant a toutes las actions qui doivent etre accomplies dans ta/tes boucles. Il est dit que si 1 seule action doit etre effectuee il n'y a pas besoin d'accolade neanmoins les mettre te permet d'etre sur de ne rien oublier
Dans ton cas:
Penses par contre a ajouter un printf("\n"); dans ton code pour aller a la ligne.
Stef
Dans ton cas:
for ( int j = 0; j < 10; j++) { printf("%d :", j); for ( int i=0; i<nlettre[j]; i++) { printf("_"); } }
Penses par contre a ajouter un printf("\n"); dans ton code pour aller a la ligne.
Stef
#include <stdio.h> int main(void) { int a; int nlettre[10]; int nl = 0; while ( ( a = getchar() ) != EOF ) { if ( a == ' ' || a == '\n' || a == '\t' ) nl=0 else nl++; nlettre[nl]++; } for ( int j = 0; j < 10; j++) { printf("%d :", j); for ( int i=0; i<nlettre[j]; i++) { printf("_"); } } return 0; } return 0;
j'ai bien fait ce que tu m'as dit pour les accolades , et à la copilation j'ai ceci :
ligne 21 : 'for' loop initial declaration used outside C99 mode
ligne 24: 'for' loop initial declaration used outside C99 mode
je savais bien qu'il y allait avoir une erreur car mon code dans emacs n'est pas bien aligné dans les boucles for :-)
scol30
Messages postés
22
Date d'inscription
samedi 19 novembre 2005
Statut
Membre
Dernière intervention
2 décembre 2005
21 nov. 2005 à 20:29
21 nov. 2005 à 20:29
Ton problème de compilo vient du fait qu'en C tu ne peut pas déclarer la variable de boucle for dans la déclaration du for. Donc
int i;
for(i=0;i <... ; i++)
De plus attention car dans ton dernier code tu as un return 0; à la fin qui risque de poser problème à la compil.
Voila,
Stef
int i;
for(i=0;i <... ; i++)
De plus attention car dans ton dernier code tu as un return 0; à la fin qui risque de poser problème à la compil.
Voila,
Stef
oh la la , mdr on va jamais yarriver , ave ce code ( bon ) :
avec çà j'obtiens un défilement de _ _ _ _ _ _ _ _ qui ne s'arrête jamais :-)
#include <stdio.h> int main(void) { int a; int nlettre[10]; int nl = 0; while ( ( a = getchar() ) != EOF ) { if ( a == ' ' || a == '\n' || a == '\t' ) nl=0 else nl++; nlettre[nl]++; } int j; for ( j = 0; j < 10; j++) { printf("%d :", j); int i; for ( i=0; i<nlettre[j]; i++) { printf("_"); } } return 0; }
avec çà j'obtiens un défilement de _ _ _ _ _ _ _ _ qui ne s'arrête jamais :-)
scol30
Messages postés
22
Date d'inscription
samedi 19 novembre 2005
Statut
Membre
Dernière intervention
2 décembre 2005
21 nov. 2005 à 21:40
21 nov. 2005 à 21:40
premier conseil, initialises ton tableau car par défaut les valeur associées aux index de ton tableau peuvent êre très importante.
ensuite c'est bon je crois. Voila tout le code reformaté chez moi qui fonctionne
for ( j = 0; j < 10; j++) { nlettre[j]=0; }
ensuite c'est bon je crois. Voila tout le code reformaté chez moi qui fonctionne
#include <stdio.h> int main(void) { int a, i, j;; int nlettre[10]; int nl = 0; for ( j = 0; j < 10; j++) { nlettre[j]=0; } while ( ( a = getchar() ) != EOF) { if ( a == ' ' || a == '\n' || a == '\t' ) nl=0; else nl++; nlettre[nl]++; } for ( j = 0; j < 10; j++) { printf("%d :", j); for ( i=0; i<nlettre[j]; i++) { printf("_"); } } return 0; }
scol30
Messages postés
22
Date d'inscription
samedi 19 novembre 2005
Statut
Membre
Dernière intervention
2 décembre 2005
21 nov. 2005 à 22:14
21 nov. 2005 à 22:14
Je viens de reprendre le code car il y avait quelques petits soucis avec la prise de la phrase en utilisant getchar (chez moi j'utilisais un tableau char tab[]. Voila ce que ça donne:
Je l'ai testé en écrivant la phrase suivante:
je suis a ecole dans un pré avec des oiseaux
résultat:
0 :
1 :_
2 :__
3 :__
4 :___
5 :_
6 :
7 :_
8 :
9 :
Voila,
Stef
#include <stdio.h> int main(void) { int a; int nlettre[10]; int pl =0, nl = 0; int i, j, k; char tc[80]; for ( j = 0; j < 10; j++) { nlettre[j]=0; } a = getchar(); while ( a != '\n' ) { tc[k]=a; if ( tc[k] == ' ' || tc[k] == '\n' || tc[k] == '\t' ) nl=0; else pl = ++nl; if(nl == 0) nlettre[pl]++; k++; a=getchar(); } nlettre[pl]++; for ( j = 0; j < 10; j++) { printf("%d :", j); for ( i=0; i<nlettre[j]; i++) { printf("_"); } printf("\n"); } return 0; }
Je l'ai testé en écrivant la phrase suivante:
je suis a ecole dans un pré avec des oiseaux
résultat:
0 :
1 :_
2 :__
3 :__
4 :___
5 :_
6 :
7 :_
8 :
9 :
Voila,
Stef