Bonjour ,
Une âme charitable pourrait m'écrire ce pseudocode en language c s'il vous plaît , je ne le comprends pas bien![]()
Bonjour ,
Une âme charitable pourrait m'écrire ce pseudocode en language c s'il vous plaît , je ne le comprends pas bien![]()
Hello,
Il y a une erreur dans le pseudo code (ou alors je n'ai pas compris la question): les lettres majuscules (en ascii) vont de 65 ('A') à 90 ('Z'). Donc le test (rng>=0 et rng<=25) ne sera jamais vrai....
C'est le texte en entier , il est peu probable que ça soit faux![]()
@edgarjacobs : oui selon ce que l'on a pris l'habitude de penser. Mais non, si on reprend doucement.
Si l'on fait ascii(lettre) et que l'on a 65 c'est certes unA.
Mais si "A" doit être compté à l'indice zéro c'est que l'on a dû faire un ascii(lettre) - ascii("A") -> 65-65==0.
Bon, perso, dans ma conception, le rang de A serait plutôt 1. Là, c'est juste penser en terme d'indice dans un tableau.
Ce qui est important dans l'énoncé est la définition précise de ce qu'est un rang dans le pseudo-code. En français on dit que dans l'alphabet A est le premier donc rang de A serait 1 (ça manquait dans le 1er texte.)
Cependant, le pseudo-code veut "penser en C", et en C tout ce qui est indice commence à 0.
Ici, la ligne la plus piégeuse du pseudo-code à traduire en C est: "rng <-- rang de txt[i]", qui doit s'écrire :
On pouvait deviner ça par le test indiqué juste après: "si rng<=0 ou rng>=25", le rang (du pseudo-code) est bien un nombre de 0 à 25 pour 'A' à 'Z'.
Code : Sélectionner tout - Visualiser dans une fenêtre à part int rng = txt[i] - 'A'; // la lettre A a le rang 'A'-'A' donc 0, la lettre B a le rang 'B'-'A' donc 1...
J'avais ien compris le pseudo code, j'étais bien conscient que le rang de 'A' est zéro et qu'il faut faire rng=txt[i]-'A'. Je critiquais juste la manière de présenter l'exercice.
j'ai essayer de suivre le pseudocode mais je suis vraiment perdu ........ Est-ce que quelqu'un peut me faire le programme pour que je voie mes fautes s'il vous plaît
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 #include<stdio.h> int main() { printf("Saisissez un texte") ; int num[26] ; int i ; for (i=0;i<25;i++) num[i]=0 ; char txt[80] ; for (i=0;i<(txt)-1;i++) int rng = txt[i]-A if (rng=>0 and 25=>rng) { printf("%i" , rng); } for (i=0;i<25;i++) printf("%i" , num[i]) ;
Faire ton exercice, surement pas.Est-ce que quelqu'un peut me faire le programme pour que je voie mes fautes s'il vous plaît
T'aider à le faire, d'accord. Alors question: où demandes-tu à l'utilisateur d'entrer son texte ?
Et pour poster du code, il faut uliliser la bonne balise![]()
> Afficher "Saisissez un texte", là c'est ok !
> Saisir txt, tu ne l'as pas fait. pour cela tu peux utiliser la fonction scanf ou fgets si tu l'as vu !
Ensuite le but, c'est de compter chaque lettre de txt et d'obtenir le résultat dans le tableau num (Par exemple s'il y a 5 'a' dans txt, num[0] comportera la valeur 5 à la fin du comptage.
Site : http://chgi.developpez.com
Pourquoi faire simple quand on peut faire compliqué ? (Jacques Rouxel)
oki merci beaucoup j'ai un peut modifier, comment je fais le "i<-- 0..... longueur de txt -1" Je ne sais pas comment implémenter le longueur txt-1 en code c
int len=strlen(txt)-1;je ne sais pas comment implémenter le longueur txt-1 en code c
"Pour i<-- 0..... longueur de txt -1" correspond à faire une boucle qui va aller de 0 jusqu'au dernier caractère de txt.
Ça peut s'écrire:
ou bien, une forme équivalente que tu as pu apprendre
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 for ( int i = 0 ; i < strlen(txt) ; i++ ) // les i valides sont inférieur à strlen(txt), donc le dernier vaut strlen(txt)-1 { // et entre les accolades tu mets ce que le pseudo-code t'indique } // jusqu'à FinBoucle
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 for ( int i = 0 ; txt[i]!='\0' ; i++ ) // on détecte que chaque caractère txt[i] n'est pas l'indicateur de fin { // et entre les accolades tu mets ce que le pseudo-code t'indique } // jusqu'à FinBoucle
merci pour vos proposition , le for ( int i = 0 ; txt[i]!='\0' ; i++ ) Est la seule proposition qui me compile un programme, en revanche, je crois que mon programme est quand même faux, j'ai fait ceci :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30 #include<stdio.h> #include<string.h> int main() { char txt [80] ; int num[25] ; int i ; printf("Saisissez un texte"); scanf("%c" ,txt); for(i=0 ; i<25;i++) num[i]=0 ; for ( int i = 0 ; txt[i]!='\0' ; i++ ){ int rng = txt[i] - 'A' ; if (rng >=0 && 25>=rng) {printf("%i" , num[rng] ) ; } } for(i=0;i<25;i++) printf("%i%i\n" , i , num[i]) ; return 0 ; }
scanf avec le format "%c" ne permet pas de saisir un texte, mais seulement un seul caractère. Pour un texte il faut utiliser "%s" (et de plus avec "%s" la lecture s'arrête au premier espace).
En ce qui concerne le tableau num il doit aller de 0 à 25 compris (l'alphabet comporte 26 lettres). Donc un tableau de 26 entier.
Dans la boucle for qui passe en revue le texte (tableau txt) il ne t'est pas demandé d'afficher les cases du tableau num mais d'incrémenter la case qui correspondante à la lettre lu dans txt.
Site : http://chgi.developpez.com
Pourquoi faire simple quand on peut faire compliqué ? (Jacques Rouxel)
Ce qu'on appelle l'incrémentation, c'est d'ajouter 1 à une variable.
Par exemple si la variable x vaut 2 après l'avoir incrémenté, elle vaudra 3.
On peut l'écrire de cette façon : x=x+1 , il existe un syntaxe courte qui est x++ .
Tu as surement eu un cours qui explique tout cela ?
Site : http://chgi.developpez.com
Pourquoi faire simple quand on peut faire compliqué ? (Jacques Rouxel)
merci pour l'explication , j'ai vu dans mon cours c'est quoi mais je ne sais pas comment l'appliquer avec l'exo car j'ai juste l'exemple de ++i qui devient i++ je vais revoir après , le reste de mon code est-il correct si on oublie ça ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29 #include<stdio.h> #include<string.h> int main() { char txt [80] ; int num[26] ; int i ; printf("Saisissez un texte\n"); scanf("%s" ,txt); for(i=0 ; i<25;i++) num[i]=0 ; for ( int i = 0 ; txt[i]!='\0' ; i++ ){ int rng = txt[i] - 'A' ; if (rng >=0 && 25>=rng) {printf("%i" , num[rng++] ) ; } } for(i=0;i<25;i++) printf("%i\n %i/n" ,i, num[i]) ; return 0 ; }
Je me répète, mais il ne t'es pas demandé d'afficher mais d'incrémenté la case correspondante dans num de la lettre lu dans txt. (la case, ce n'est pas l'indice). Donc le printf qui sert à afficher à l'écran, n'a rien à faire ici.
L'affichage, il fait dans la dernière boucle for.
Site : http://chgi.developpez.com
Pourquoi faire simple quand on peut faire compliqué ? (Jacques Rouxel)
Oui, pardon, j'ai enlevé le printf et j'ai mis num[rng]++ mais j'obtiens ça quand je compile
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29 #include<stdio.h> #include<string.h> int main() { char txt [80] ; int num[26] ; int i ; printf("Saisissez un texte\n"); scanf("%s" ,txt); for(i=0 ; i<25;i++) num[i]=0 ; for ( int i = 0 ; txt[i]!='\0' ; i++ ){ int rng = txt[i] - 'A' ; if (rng >=0 && 25>=rng) { num[rng]++ ; } } for(i=0;i<25;i++) printf("%i\n" , num[i]) ; return 0 ; }
Site : http://chgi.developpez.com
Pourquoi faire simple quand on peut faire compliqué ? (Jacques Rouxel)
Partager