Inscription / Connexion Nouveau Sujet
Niveau terminale
Partager :

Algorithme

Posté par
Odessa
24-02-14 à 08:45

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

Posté par
Barney
re : Algorithme 24-02-14 à 11:12

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

Posté par
Odessa
Algorithme 24-02-14 à 13:23

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é ***

Posté par
tildou70
Algorithme 26-02-14 à 14:53

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 :


Rester sur la page

Inscription gratuite

Fiches en rapport

parmi 1741 fiches de maths

Désolé, votre version d'Internet Explorer est plus que périmée ! Merci de le mettre à jour ou de télécharger Firefox ou Google Chrome pour utiliser le site. Votre ordinateur vous remerciera !