Aller au contenu

algorithme (1ere S)


fab's #123#

Messages recommandés

Tout d'abord bonjour ! J'ai un peu de mal à écrire un algorithme sur ma TI-82.

Il s'agit de la Conjecture de syracuse. mon programme devrait faire exactement ça : http://trucsmaths.free.fr/js_syracuse.htm#conj mais je ne sais pas comment m'y prendre.

Ou j'en suis :

Prompt N

I=0 ( I sera la durée de vol )

while N=/=1 (tant que N est différent de 1)

if partDéc(N/2)=0 (si N est pair )

then

N/2 -> N

Else

N*3+1 -> N

I+1 -> I

EndWhile

disp ''durée de vol",I

Déja ce programme ne fonctionne pas, il m'affiche "fait", je ne sais pas comment faire, les tutoriels ne m'aident pas, et on a seulement fait quelques trucs de base en cours...

De plus je n'ai aucune idée comment afficher l'altitude maximale et toutes les étapes...

Quelqu'un peut m'aider ? Merci. :)

Lien vers le commentaire
Partager sur d’autres sites

  • E-Bahut

Bonsoir,

Je doute que ton programme fonctionne car la commande EndWhile n'existe pas en langage TI-BASIC de TI-82. De plus, évite de mettre ta TI en français. Il y a des bugs quand on change la langue (encore que, je trouve ton exo brouillon car il n'y a qu'une commande en français. As tu copié sans comprendre d'un site ?)

Ensuite, tu n'affectes la valeur 0 à l, mais tu testes si I vaut 0. Chose vraie en langage TI car toute variable non déclarée est nulle.

Après, pour tester la parité de N, tu peux aussi utiliser le pgcd. Si gcd(N,2) = 2 c'est paire. Mais, là dessus, tu fais comme tu veux.

Par contre, pour l'affichage du vol, de l'altitude. Il n'y a aucune difficulté si tu es l'auteur du début. Pour le max et le min, tu fais une comparaison à chaque tour

Pour conclure, je trouve ton code bizarre car de mon point de vue, il n'aurait même pas du démarrer. Mais, tu n'es pas loin (l'algo est juste, c'est juste les mots qui sont pas toujours jutes). Donne moi un code réellement fonctionnel et je te corrigerai les erreurs restantes.

Lien vers le commentaire
Partager sur d’autres sites

L'algo je ne l'ai recopié nul part, j'ai commencé sur papier, et ensuite je l'ai taper dans ma TI-82 stats. Et aussi, elle n'est pas en français, tout est anglais.

Je ne serais pas en mesure de te donner un code fonctionnel car je ne sais pas le faire.

Les seuls programmes que j'ai fait tout seul, ce sont les algo qui permettent de résoudre des calculs avec des nombres super long en physique, du genre, la loi de Wien ou les interactions gravitationnelles/electriques, pour gagner du temps dans les inters.

Lien vers le commentaire
Partager sur d’autres sites

j'ai passer de longues heures sur ma calculette pour en parvenir ici :

Prompt N

for(I,0,X)

while N=/=1

If partDéc(N/2)=0

then

n/2 -> N

Disp N

I+1 -> I

Else

N*3+1 -> N

Disp N

I+1 ->I

End

End

Disp "DUREE DE VOL",I

Ce programme fonctionne, il me manque juste encore l'altitude maximum. J'ai déja essayé "Disp max(N)" mais ça, ça ne marche pas, quelqu'un peut m'aider ??

Lien vers le commentaire
Partager sur d’autres sites

  • E-Bahut

Bonsoir,

Je ne te ferai pas de programme mais je vais t'aider dans les raisonnements.

Déjà, il te manque un End (il en faut 1 pour le For, 1 pour le While et 1 pour le If).

Ensuite, c'est quoi ce For avec un X dont on ignore tout ! Il ne sert à rien. C'était mieux avant.

Après, soit ta TI est en français et tu as en effet partDec(). Si ta TI est en anglais, tu devrais avoir fPart()

Maintenant, parlons des choses inélégantes. Quand tu affiches le vol. Mets au moins une phrase pour savoir à quoi correspondent l'étape de vol. Et mets l'affichage après le test. Ca réduit le code d'une ligne.

Parlons des erreurs pour finir. Si tu fais directement max(N), il te donnera forcément 1. C'est normal car tu cherches le maximum d'un unique entier (N vaut 1 à la fin, tu le sais). Je t'avais dit de faire une comparaison !!! Mais si tu tiens à utiliser les fonctions min et max, tu dois stocker l'ensemble du vol dans une liste. Mais cette technique est un chouilla plus compliqué. Par contre, l'avantage, c'est que tu gardes en mémoire l'ensemble de vol.

Pour résumer, pour faire la comparaison tu déclares une nouvelle variable dans laquelle tu compares cette variation à la nouvelle valeur de A.

Lien vers le commentaire
Partager sur d’autres sites

le X je ne sais pas ce que c'est mais au moins ça marche. Quand je mets I=0, ça ne foncionne pas, quand je mets For(I,1,X), ça fonctionne.

Si je rajoute un 3e End, ça ne change rien ça marchait aussi avant.

Comparaison c'est quoi ? il faut utiliser "inférieur à" et "supérieur à"

Ah au fait, si je rajoute un 3e "End", la durée de vol est incorrect, il me rajoute 1 a chauqe fois.

Lien vers le commentaire
Partager sur d’autres sites

  • E-Bahut

le X je ne sais pas ce que c'est mais au moins ça marche. Quand je mets I=0, ça ne foncionne pas, quand je mets For(I,1,X), ça fonctionne.

Si je rajoute un 3e End, ça ne change rien ça marchait aussi avant.

Comparaison c'est quoi ? il faut utiliser "inférieur à" et "supérieur à"

Ah au fait, si je rajoute un 3e "End", la durée de vol est incorrect, il me rajoute 1 a chauqe fois.

Lien vers le commentaire
Partager sur d’autres sites

Prompt N

while N=/=1

If partDéc(N/2)=0

then

n/2 -> N

Disp N

I+1 -> I

Else

N*3+1 -> N

Disp N

I+1 ->I

End

End

Disp "DUREE DE VOL",I

EffVar I

voila j'ai trouver un autre truc, j'ai enlevé le for(I,0,X) dont on ne comprenais rien.

Cette algo tourne parfaitement bien, il faut juste encore trouver comment afficher l'altitude maximale.

j'ai essayé ça :

Prompt N

N->M

while N=/=1

If partDéc(N/2)=0

then

n/2 -> N

Disp N

I+1 -> I

Else

N*3+1 -> N

If N>M

Then

N->M

Else

M->M

Disp N

I+1 ->I

End

End

End

Disp "DUREE DE VOL",I

EffVar I

Disp "ALTITUDE MAX", M

Dans ce cas l'algo tourne, l'altitude est correct, je suis super content, malheureusement maintenant la durée de vol n'est plus correct... Peux tu me corriger Boltzmann ?

______________________________________________________________________________________________________

j'ai trouvé !

Prompt N

N->M

while N=/=1

If partDéc(N/2)=0

then

n/2 -> N

Disp N

I+1 -> I

Else

N*3+1 -> N

Disp N

I+1 ->I

If N>M

Then

N->M

Else

M->M

End

End

End

Disp "DUREE DE VOL",I

EffVar I

Disp "ALTITUDE MAX", M

tout fonctionne maintenant ! Est-ce que quelque chose n'est pas correct Boltzmann ?

Lien vers le commentaire
Partager sur d’autres sites

  • E-Bahut

Tu as bien travaillé.

Maintenant, je peux te donner une correction que te sera utile, je l'espère.

Ton code présente plusieurs choses inutiles.

- Quand tu testes si N > M, inutile de faire le else. En effet, M dans M, ça ne change rien !

- Tu pourrais effectuer le Disp après le test, histoire de l'écrire une seule fois.

Ton code présente des fautes d'algo qui sont compensées par les valeurs par défaut de la TI.

- Tu n'initialises pas I mais tu penses à l'effacer à la fin. Cela fait marcher le code sauf si tu utilises la variable I dans un autre programme. Au lieu de Delvar, place au début du code 0 -> I. Tout simplement et non I=0 !!!!!

- Un End est mal placé.

Correction de ton code.

Prompt N

1->I

N->M

While N neq 1

If fPart(N/2)=0

Then

N/2->N

Else

3*N+1->N

If N>M

Then

N->M

End (Du test pour l'altitude)

End (Du test de parité)

Disp N

I+1->I

End (De la boucle While)

Disp "Durée du vol",I

Disp "Altitude du vol",M

Proposition de code un peu amélioré.

Disp "Entier naturel"

Disp "non nul"

Input A

Delvar L1

1->I

A->L1(1)

While A neq 1

If gcd(A,2)=2

Then

A/2->A

Else

3*A+1->A

End

I+1->I

A->L1(I)

End

Disp "Le vol est de"

Pause L1

Disp "Sa durée est de",I

Disp "L'altitude est de",max(L1)

Lien vers le commentaire
Partager sur d’autres sites

Archivé

Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.

×
×
  • Créer...
spam filtering
spam filtering