Bonjour,
Je suis en Terminale S et je dois faire un algorithme.
Voici l'énoncé :
On considère un entier naturel n.
En partant de n, on construit une chaîne de nombres de la façon suivante :
Si un nombre k de la chaine est pair, le suivant s'obtient en divisant k par 2.
Si un nombre k de la chaine est impair, le suivant s'obtient en multipliant k par 3 et en ajoutant 1.
La chaine s'arrête quand elle atteint 1. On appelle alors longueur de la chaine le nombre d'entiers nécessaires pour atteindre le nombre 1.
Ecrire un algorithme sur algobox qui demande à l'utilisateur un entier et qui affiche l'integralité de la chaine a partir de cet entier ainsi que sa longueur.
J'ai donc fait cet algorithme, mais par la suite, je dois faire un autre algorithme qui affiche le nombre de termes calculés avant de rencontrer un terme inférieur à la valeur de départ.
Voila ce que j,ai fait :
variables
k est du type nombre
m est du type nombre
compteur est du type nombre
inf est du type nombrecompteur inf est du type nombre
début algorithme
lire k
m prend la valeur floor(k)
afficher m
compteur prend la valeur 1
inf prend la valeur m
Si ( inf<=(m+1)) alors
debut si
compteur inf prend la valeur 1
fin si
tant que (m>1) faire
debut tant que
si (floor(m/2)==(m/2)) alors
debut si
m prend la valeur m/2
si (inf<=(m+1)) alors
debut si
compteur inf prend la valeur compteur inf+1
fin si
compteur prend la valeur compteur + 1
afficher ->
afficher m
fin si
sinon
debut sinon
m prend la valeur (3*m)+1
si (inf<=(m+1)) alors
debut si
compteur inf prend la valeur compteur inf + 1
fin si
compteur prend la valeur compteur +1
afficher ->
afficher m
fin sinon
fin tant que
afficher "algorithme terminé""
afficher" longueur de la liste :"
afficher compteur
afficher "compteur inf :"
afficher compteur inf
fin algorithme
mais ça ne marche pas, car je dois arreter le compteur dès que je rencontre le premier terme inférieur. par exemple pour 7 (7-22-11-34-17-52-26-13-40-20-10-5-16-8-4-2), mon compteur m'affiche 13 au lieu de 11, car il y a des chiffre apres le 5 plus grand que 7 (16 et 8)
Pouvez-vous m'aider ?
Merci.
Odessa
Bonjour,
simplification de l'algo qui réalise c qui est demandé :
1 VARIABLES
2 k EST_DU_TYPE NOMBRE
3 m EST_DU_TYPE NOMBRE
4 compt EST_DU_TYPE NOMBRE
5 DEBUT_ALGORITHME
6 LIRE k
7 m PREND_LA_VALEUR floor(k)
8 AFFICHER "{"
9 AFFICHER m
10 compt PREND_LA_VALEUR 1
11 TANT_QUE (m>=k) FAIRE
12 DEBUT_TANT_QUE
13 SI (m%2==0) ALORS
14 DEBUT_SI
15 m PREND_LA_VALEUR m/2
16 FIN_SI
17 SINON
18 DEBUT_SINON
19 m PREND_LA_VALEUR 3*m+1
20 FIN_SINON
21 compt PREND_LA_VALEUR compt+1
22 SI (m>k) ALORS
23 DEBUT_SI
24 AFFICHER ";"
25 AFFICHER m
26 FIN_SI
27 FIN_TANT_QUE
28 AFFICHER "}"
29 AFFICHER "nombre d'éléments dans la liste : "
30 AFFICHER compt
31 FIN_ALGORITHME
Bonjour,
Je suis en Terminale S et je dois faire un algorithme.
Voici l'énoncé :
On considère un entier naturel n.
En partant de n, on construit une chaîne de nombres de la façon suivante :
Si un nombre k de la chaine est pair, le suivant s'obtient en divisant k par 2.
Si un nombre k de la chaine est impair, le suivant s'obtient en multipliant k par 3 et en ajoutant 1.
La chaine s'arrête quand elle atteint 1. On appelle alors longueur de la chaine le nombre d'entiers nécessaires pour atteindre le nombre 1.
Ecrire un algorithme sur algobox qui demande à l'utilisateur un entier et qui affiche l'integralité de la chaine a partir de cet entier ainsi que sa longueur.
Voici ce que j'ai fait :
Variables
k est du type nombre
m est du type nombre
compteur est du type nombre
debut algorithme
lire k
m prend la valeur floor(k)
afficher m
compteur prend la valeur 1
Tant que (m>1)
debut tant que
si (floor(m/2)==(m/2)) alors
debut si
m prend la valeur m/2
compteur prend la valeur compteur + 1
afficher ->
afficher m
fin si
sinon
debut sinon
m prend la valeur (3*m)+1
compteur prend la valeur compteur +1
afficher ->
afficher m
fin sinon
fin tant que
afficher "algorithme terminé"
afficher "longueur de la liste"
afficher m
fin algorithme
Mais je dois répondre à :
De quel entier (inferieur ou egal à 20) doit-on partir pour obtenir la chaine la plus longue ? Meme question pour un entier naturel inférieur ou egal à 100 (On pourra modifier l'algorithme initial).
Je ne comprend pas quoi modifier dans l'algorithme. Pouvez-vous m'aider ?
Merci.
Odessa.
*** message déplacé ***
Bonjour,
Il me semble que j'ai le même exercice qu'Odessa. J'ai créer un algorithme qui est le suivant:
1 VARIABLES
2 k EST_DU_TYPE NOMBRE
3 m EST_DU_TYPE NOMBRE
4 compteur EST_DU_TYPE NOMBRE
5 DEBUT_ALGORITHME
6 LIRE k
7 m PREND_LA_VALEUR floor(k)
8 AFFICHER "("
9 AFFICHER m
10 compteur PREND_LA_VALEUR 1
11 TANT_QUE (m<=k) FAIRE
12 DEBUT_TANT_QUE
13 SI ((m%2==0)) ALORS
14 DEBUT_SI
15 m PREND_LA_VALEUR m/2
16 AFFICHER ";"
17 AFFICHER m
18 FIN_SI
19 SINON
20 DEBUT_SINON
21 m PREND_LA_VALEUR 3*m+1
22 AFFICHER ";"
23 AFFICHER m
24 FIN_SINON
25 compteur PREND_LA_VALEUR compteur+1
26 SI (m>k) ALORS
27 DEBUT_SI
28 AFFICHER ";"
29 AFFICHER m
30 FIN_SI
31 FIN_TANT_QUE
32 AFFICHER ")"
33 AFFICHER "nombre d'éléments dans la liste"
34 AFFICHER compteur
35 FIN_ALGORITHME
Normalement mon algorithme devrait s'arrêter tout seul mais ce n'est pas le cas, il continue à l'infini. J'ai bien essayé de mettre une boucle "Pour" mais sans succès, je ne comprends donc pas ce qu'il faut que je modifie.
Pourriez-vous m'aider s'il vous plaît?
Vous devez être membre accéder à ce service...
Pas encore inscrit ?
1 compte par personne, multi-compte interdit !
Ou identifiez-vous :