Bonjour,
Je dois faire un algorithme avec le logiciel Algobox, j'ai essayé quelque-chose mais comme on ne m'a jamais vraiment expliqué, je me suis trompée quelque-part, et je ne sais pas où ...
L'algorithme est :
ENTREE
un entier naturel a non nul
TRAITEMENT
Tant que a>1
Si a est pair alors
mettre a/2 dans a
sinon mettre 3a+1 dans a
Fin du si
Fin du tant que
SORTIE
Afficher a
J'ai donc rentré :
VARIABLES
- a EST DU TYPE NOMBRE
DÉBUT ALGORITHME
- LIRE a
TANT QUE (a>1) FAIRE
- DÉBUT TANT QUE
SI (a%0) ALORS
- DÉBUT SI
- a PREND LA VALEUR a/2
- FIN SI
SINON
- DÉBUT SINON
- a PREND LA VALEUR 3*a+1
- FIN SINON
FIN TANT QUE
- AFFICHER a
FIN ALGORITHME
a%0 correspond au reste de la division euclidienne de a/2, soit si a est pair 0.
Je suis bloquée à la ligne 13 soit "a prend la valeur 3*a+1", ça me dit qu'il y a une erreur, j'ai essayé avec "affecter calcul" plutôt que "affecter valeur à variable" mais ça me donne une suite infinie de chiffres...
Voilà, si quelqu'un pouvait m'éclairer je lui en serai très reconnaissante
Bonjour,
bonjour,
que doit faire ton algorithme ?
avec le tant que a>1 , on sortira toujours a=1 à la fin..
remarque : pour savoir si a est pair, ton test a%0 est faux , tu devrais écrire SI (a%2)=0 alors ..
ca donne :
1 VARIABLES
2 a EST_DU_TYPE NOMBRE
3 DEBUT_ALGORITHME
4 LIRE a
5 TANT_QUE (a>1) FAIRE
6 DEBUT_TANT_QUE
7 SI ((a%2)==0) ALORS
8 DEBUT_SI
9 a PREND_LA_VALEUR a/2
10 FIN_SI
11 SINON
12 DEBUT_SINON
13 a PREND_LA_VALEUR (a*3)+1
14 FIN_SINON
15 FIN_TANT_QUE
16 AFFICHER a
17 FIN_ALGORITHME
mais encore une fois, je doute que ta condition Tant que soit juste..
Modifier la condition du SI
Placer le AFFICHER dans la boucle...
VARIABLES
a EST_DU_TYPE NOMBRE
DEBUT_ALGORITHME
LIRE a
TANT_QUE (a>1) FAIRE
DEBUT_TANT_QUE
SI (a%2==0) ALORS
DEBUT_SI
a PREND_LA_VALEUR a/2
FIN_SI
SINON
DEBUT_SINON
a PREND_LA_VALEUR 3*a + 1
FIN_SINON
AFFICHER* a
FIN_TANT_QUE
FIN_ALGORITHME
Merci,
Oui, effectivement cet algorithme n'a pas beaucoup d'intérêt, je l'avais déjà fait à la main.
Je pense que le but était qu'on se rende compte qu'on obtient toujours 1 au final.
Pour a%0, j'avais cru comprendre que c'était ce qu'il fallait faire d'après un message du professeur, je n'étais pas sûre donc j'ai essayé avec a%2 aussi mais malgré cette erreur ce n'est pas ça qui bloquait
L'erreur que cela m'indiquait se trouve à la 13ème ligne, c'est principalement ça que je ne comprends pas, avec ou sans parenthèse, rien ne marche...
Merci LeDino,
Plus d'erreur à la ligne 13 à présent, mais toujours des résultats pas très convaincants, j'obtiens par exemple 21 avec a=4 ou 168421 avec a=5.
Cachouille as tu remarqué l'astérisque sur AFFICHER* ??
cela veut dire passer à la ligne
sinon il affiche les résultats successifs par exemple 16, 8, 4, 2, 1, à la queue leu leu sans espaces ni rien = 168421
par ailleurs l'erreur sur le "SI" (le a%0) est la vraie erreur qui fait dire à algobox à tort que l'erreur est ligne 13
en mettant la bonne condition dans le SI sans rien changer d'autre, l'erreur prétendue ligne 13 n'existe plus
elle n'était donc pas ligne 13 cette erreur et c'est algobox qui nous bourre le mou (bug sur les diagnostics dans algobox lui-même).
Ah oui !
Désolé je n'avais pas pris ça en compte, je l'avais remarquée mais je ne savais pas à quoi cela correspondait, ça marche très bien maintenant !
Merci beaucoup
Si le sujet t'intéresse, ça s'appelle l'algorithme de Syracuse. tu trouveras plein de compléments sur le site (comme Suite de Syracuse ou
Dm Suite Vecteur d'un plan ou
L'algorithme de Syracuse ou
suite de Syracuse) notamment qui trouve les valeurs initiales qui donnent le temps de vol maximum ou encore l'altitude maximum entre 1 et 10000 ou plus).
Vous devez être membre accéder à ce service...
Pas encore inscrit ?
1 compte par personne, multi-compte interdit !
Ou identifiez-vous :