| While et Repeat |
| Auteur |
Message |
Alain
Invité
|
Posté le : Lun 12 Aoû 2013, 15:26
|
|
|
Bonjour,
Je dispose d'un algorithme que je souhaite entrer sur ma TI82.
Je n'y arrive cependant pas.
Voici le programme en langage naturel :
Entrée : U
Traitement : Afficher U
et sortie :
Tant que A différent de 1
Si U est pair
Affecter la valeur U/2 à U
Sinon
Affecter la valeur (3U + 1)/2 à U
Afficher U
Voici ce que j'ai tapé :
Prompt U
While U=/1
Repeat
If int(U/2)=U
Then (U/2)-> U
Else
(3*U+1)/2->U
End
Disp "U=",U
Je ne suis pas très doué, quelqu'un pourrait-il m'expliquer pourquoi cela ne fonctionne pas ? (apparemment ca plante au niveau du Repeat)
|
| |
|
| |
m@thieu41
Autorisation : Membre
Nb de messages : 848
Inscrit le : Mer 18 Juil 2012, 18:44
|
Posté le : Lun 12 Aoû 2013, 20:43
|
|
|
Bonjour!
Après // ce sont des commentaires
| Code | //Explications par rapport à ton code:
Prompt U
While U!=1 //Te serait tu trompé dans ton code en langage "naturel"? (tu as mis A
//Repeat équivaut à jusqu'à, et n'a rien à faire ici
If int(U/2)=U
Then
(U/2)->U //Retour à la ligne obligatoire!
Else
(3*U+1)/2->U
End
Disp "U=",U
End //Fin de la boucle (tu l'as oublié je ne sais pas où le mettre précisément) |
Le code épuré de commentaires:
| Code | Prompt U
While U!=1
If int(U/2)=U
Then
(U/2)->U
Else
(3*U+1)/2->U
End
Disp "U=",U
End |
Est tu sur d'avoir bien recopié le code en langage naturel? il manque la fin du tant que, je ne suis pas sur d'où le placer...
Et le traitement et la sortie semblent être inversés...
---------------------- Pour vous aidez dans vos débuts (et même ensuite ^^) :
*Tuto Algo->Ti Basic (par Linkakro) : Traduisez vos algo (de type algobox) en prgm pour votre TI!
*Catalogue des emplacements et traductions (anglais/français) des fonctions sur la TI.
*Faites vos propres programmes de maths (par ash)
Et au fait: la politesse n'a jamais tué personne  |
 |
|
| |
Alain
Invité
|
Posté le : Lun 12 Aoû 2013, 22:07
|
|
|
Bonjour,
Merci pour ta réponse.
Je me suis effectivement trompé pour le A (il s'agissait de U).
Je te remercie de m'avoir fait remarquer qu'il fallait aller à la ligne après le Then
Je m'étais par ailleurs trompé : u pair équivaut à int(U/2) = U/2 (j'avais oublié le /2)
L'algorithme en langage naturel ne précise pas où est la fin du Tant que. (après le Afficher U vu la présentation).
En tout cas, le programme semble donner ce qu'il faut.
Merci.
|
| |
|
| |
m@thieu41
Autorisation : Membre
Nb de messages : 848
Inscrit le : Mer 18 Juil 2012, 18:44
|
Posté le : Lun 12 Aoû 2013, 22:49
|
|
|
Effectivement ça marche en faisant If U/2=int(U/2
C'est ce que j'ai trouvé dans certains des prgm proposé par le manuel de 1ère, mais je ne comprends pas la logique de faire ça: plutot que d'introduire la fonction partie entière, pourquoi ne pas tester directement la partie décimale tant qu'à faire?
Enfin...
Donc on peut aussi considérer que si U/2 a une partie décimale, c'est qu'il est impair. Sinon (si sa partie décimale est nulle), il est pair.
Il existe pour ça la fonction fPart (PartDéc en français), qui renvoi la partie décimale d'un nombre passé en argument.
Ex:
fPart(5.6 //Renvoi .6
fPart(89 //Renvoi 0
fPart(3.5 //Renvoi .5
fPart(4/2 //Renvoi 0
fPart(7/2 //Renvoi .5
Tu peux donc faire:
| Code | Prompt U
While U!=1
If fPart(U/2 //On teste si U/2 possède une partie décimale (si U est impair donc)
Then
(3U+1)/2->U //Impair
Else
(U/2->U //Pair
End
Disp "U=",U
End |
Remarque: Les calculs pair/impairs sont donc inversé puisqu'on teste si U est impair.
---------------------- Pour vous aidez dans vos débuts (et même ensuite ^^) :
*Tuto Algo->Ti Basic (par Linkakro) : Traduisez vos algo (de type algobox) en prgm pour votre TI!
*Catalogue des emplacements et traductions (anglais/français) des fonctions sur la TI.
*Faites vos propres programmes de maths (par ash)
Et au fait: la politesse n'a jamais tué personne  |
 |
|
| |