Bonjour,
J'ai reçu un exercice de maths à faire sur le logiciel algobox sur la suite de Syracuse. On me demande de tester la suite de Syracuse avec Algobox (pas de problème de ce côté la). On me demande également le temps de vol (pas de souci non plus)mais on me demande le temps de vol en altitude ce qui correspond au nombre de valeurs supérieures au premier nombre de la suite. Je n'arrive pas à trouver cette valeur avec l'algorithme et je ne sais pas comment faire pour l'obtenir.Je ne sais pas quel "code" rentrer ni quels instructions donner pour trouver cette valeur.
Merci d'avance pour votre aide.
Bonjour,
Est-ce que tu peux nous montrer le code que tu as utilisé pour calculer le temps de vol ? Normalement pour le temps de vol en altitude il y a juste besoin de faire une petite modification de ce code.
J'ai rentré le code "C prend la valeur N+1" C étant la valeur du temps de vol et N celle de la suite de nombres.
Attends... ton algo tu lui donne quoi comme entrée ?
Normalement, tu entre un entier et l'algo calcule le temps de vol associé. C'est pas un algo énorme mais ça fait plus qu'une ligne. Est-ce que tu peux me copier tout l'algoritme que tu as écrit ?
Variables
N est du type nombre
C est du type nombre
DEBUT ALGORITHME
Lire N
TANT QUE (N!=1) FAIRE
DEBUT TANT QUE
SI (N%2==0)ALORS
DEBUT SI
N prend la valeur N/2
FIN SI
SINON
DEBUT SINON
N prend la valeur N*3+1
C prend la valeur N+1
FIN SINON
Afficher N
FIN TANT QUE
Afficher C
Ah ok, alors c'est quasiment bon
Sauf que le temps de vol, c'est le temps que la suite met pour atteindre 1. Donc pour le déterminer il suffit de compter le nombre de passage dans la boucle, ce qui donnerait plutôt :
Variables
N est du type nombre
C est du type nombre
DEBUT ALGORITHME
Lire N
C prend la valeur 0
TANT QUE (N!=1) FAIRE
DEBUT TANT QUE
SI (N%2==0)ALORS
DEBUT SI
N prend la valeur N/2
FIN SI
SINON
DEBUT SINON
N prend la valeur N*3+1
FIN SINON
C prend la valeur C+1
Afficher N
FIN TANT QUE
Afficher C
Au début C vaut 0, puis on ajoute 1 à chaque passage dans la boucle. On est d'accord là dessus ?
On est d'accord mais si on entre la donnée C prend la valeur de 0, on pourra toujours avoir le temps de vol parce que en fait sur un même algorithme on doit pouvoir trouver la suite, le temps de vol, le temps de vol en altitude et l'altitude maximale.
Je ne vois pas bien le problème... On veut compter le nombre de termes de la suite avant d'arriver à 1, donc on part de 0, et on ajoute 1 à chaque nouveau terme calculé, c'est tout. Ça n'empêche pas de calculer tout ce qu'on veut. Par ailleurs ce que tu avais écrit était faux et ne calculait pas le temps de vol.
Maintenant, pour calculer le temps de vol en altitude : au lieu d'ajouter 1 à chaque passage dans la boucle, on ajoute 1 uniquement si N est plus grand que le premier terme de la suite. Il suffit donc d'ajouter un IF avant d'augmenter la valuer de C. Tu vois ce qu'il faut écrire ?
Justement on arrive au problème. C'est que je voudrais exprimer, que la valeur H (temps de vol en altitude) est égale à N> à la première valeur mais je ne sais pas comment l'exprimer et où placer cette indication?
Alors déjà :
Ah d'accord je comprends mieux. Mais par contre où est ce que l'on doit placer SI (N>P) ALORS
DEBUT SI
etc... ?
Yep c'est ça. Ecris tout l'algo si t'es pas sûr, que je vérifie.
Tant qu'on y est, tu parlais de calculer l'altitude max : tu vois comment faire ?
Oui je veux bien:
N est du type nombre
C est du type nombre
H est du type nombre
P est du type nombre
DEBUT ALGORITHME
Lire N
C prend la valeur 0
P prend la valeur N
TANT QUE (N!=1) FAIRE
DEBUT TANT QUE
SI (N%2==0)ALORS
DEBUT SI
N prend la valeur N/2
FIN SI
SINON
DEBUT SINON
N prend la valeur N*3+1
FIN SINON
C prend la valeur C+1
Afficher N
FIN TANT QUE
Si (N>P) ALORS
DEBUT SI
H prend la valeur H+1
FIN SI
Afficher C
Afficher H
Voila mon algo mais en fait quand je teste pour 14 (le prof nous a donné les reponses pr que l'on puisse tester) je ne tombes pas sur 8 comme il l'indique mais sur 0.
Le but est de compter le nombre de fois que N est supérieur à P, donc il faut faire le test DANS la boucle, et pas après comme ce que tu as proposé. Donc il faut placer le IF... avant le FIN TANT QUE, sinon ce qu'il se passe c'est que tu fais le test une seule fois, tout à la fin. A ce moment N vaut 1 (c'est pour ça qu'on est sorti du TANT QUE), et donc H reste à 0. Pour résumer, la fin de ton programme doit ressembler à ça :
...
FIN SINON
C prend la valeur C+1
SI (N>P) ALORS
DEBUT SI
H prend la valeur H+1
FIN SI
Afficher N
FIN TANT QUE
Afficher C
Afficher H
Et là normalement ça marche
Merci beaucoup,en effet ça marche. Heu par contre j'avoue qu'un coup de main pour l'altitude maximale est le bienvenue parce que je galère un peu
Le principe pour calculer un maximum est assez simple : on regarde toute les valeurs une par une, et si on en voit une plus grande que celles qu'on a vu avant, alors elle devient le max.
Disons qu'on utilise la variable M pour le max. Au début on ne connaît que la prmière valeur de la suite, qui est celle qu'on a entrée, et donc M vaut N. Ensuite, à chaque passage dans la boucle, on va calculer un nouveau N. On compare ce nouveau N à M, et s'il est plus grand, alors M prend la valeur de N.
Donc il suffit de rajouter à la fin de la boucle (DANS la boucle ) un truc du type "si N>M alors M prend la valeur de N".
Ok, je viens de me rendre compte que c'est pas si clair que ça... Pourtant c'est simple ^^ Exécute l'algo à la main sur un exemple pour te rendre compte de ce qu'il se passe, ça peut aider.
D'accord donc si j'ai bien compris l'algo c'est ça:
N est du type nombre
C est du type nombre
H est du type nombre
P est du type nombre
M est du type nombre
DEBUT ALGORITHME
Lire N
C prend la valeur 0
P prend la valeur N
M prend la valeur N
TANT QUE (N!=1) FAIRE
DEBUT TANT QUE
SI (N%2==0)ALORS
DEBUT SI
N prend la valeur N/2
FIN SI
SINON
DEBUT SINON
N prend la valeur N*3+1
C prend la valeur C+1
FIN SINON
SINON
SI (N>P) ALORS
DEBUIT SI
H prend la valeur H+1
FIN SI
SI (N>M)
DEBUT SI
M prend la valeur N
FIN SI
Afficher N
FIN TANT QUE
Afficher C
Afficher H
Afficher M
Ça m'a l'air tout bon. Vérifie quand même que ça donne les bons résultats quand tu lance l'algo, on sait jamais.
(Pour M c'est facile à vérifier vu que tu affiche aussi tous les termes de la suite)
Vous devez être membre accéder à ce service...
Pas encore inscrit ?
1 compte par personne, multi-compte interdit !
Ou identifiez-vous :