Bonjour, j'ai bosser sur un pti programme, mais je remarque qu'il ne fonctionne pas et je ne vois absolument pas pourquoi il ne fonctionne pas !
En faite il a fonctionner ! Une ou deux fois seulement ! Ensuite sa affiche FAIT c'est tout !
Donc voici le programme:
Autorisation : Membre
Nb de messages : 3738
Inscrit le : Lun 19 Oct 2009, 21:25
Posté le : Dim 07 Déc 2014, 23:32
Tu n'as pas initialisé la variable D avant la boucle While qui utilise D. Or la boucle While réalise son test avant de rentrer.
Tu dois initialiser D ou bien utiliser une boucle Repeat. Mais avec Repeat, inverse la condition D=/=0 en D=0.
---------------------- ti82statfr: 2008, inscrit: 2009, ti84pocketfr: noël2011, ti30xbmultiview: iut 2012-2014
Perfectionniste, manque tact. Pas le temps de tout publier depuis 2011. Répond toujours aux questions. (rédigé juin 2014)
Autorisation : Membre
Nb de messages : 3738
Inscrit le : Lun 19 Oct 2009, 21:25
Posté le : Lun 08 Déc 2014, 0:25
Tu devrais garder le While et utiliser B dans la condition de la boucle : "While B".
Cela a aurait ces avantages :
-on peut juste écrire "While B" ou "While D", c'est mieux que Repeat
-on n'a aucune action d'initialisation supplémentaire si on utilise B
-le diviseur B peut même être nul dès le départ et le While B le supporte (mais cela n'affiche pas le contenu de la boucle.)
---------------------- ti82statfr: 2008, inscrit: 2009, ti84pocketfr: noël2011, ti30xbmultiview: iut 2012-2014
Perfectionniste, manque tact. Pas le temps de tout publier depuis 2011. Répond toujours aux questions. (rédigé juin 2014)
Je ne vois pas comment utiliser B comme condition, je sais que quand D=0 alors c'est fini vu que D c'est le reste. Mais B ???? Aucune idée, tu n'a pas un code a me proposer ?
bosskay Invité
Posté le : Lun 08 Déc 2014, 1:49
ATTENTION, l'algorithme avec la boucle repeat que j'ai proposer en 2e post SEMBLE marché, en effet après plusieurs essaie le programme ne flanche pas ! Cependant, vu que tu me conseille autre chose j'attend avec impatience t'es nouvelle proposition pour amélioré mon programme !
Autorisation : Membre
Nb de messages : 3738
Inscrit le : Lun 19 Oct 2009, 21:25
Posté le : Lun 08 Déc 2014, 11:54
Elle marche, ce n'est pas qu'une impression. Je n'ai rien remanié à par la condition d'entrée, donc cela ne change rien au reste.
Au message précédent je te proposais simplement d'écrire "While B" à la place de "Repeat D=0" ou "While D=/=0".
Et j'expliquais les raisons de ce choix.
Remarque que tu affectes B avec D en fin de boucle, donc c'est pareil dans la condition de sortie. Tandis qu'utiliser B évite d'initialiser en entrée.
Puisque tu veux un code, je poste le résultat. J'en profite pour ajouter deux fragments afin de supporter plus de 8 lignes de texte.
:0->F // prépare les scrolls
:Disp "","","","","","","","" // 8 fois "" // prépare les scrolls
:pgcd(A,B)->F
:Output(1,1,"PGCD("
:Output(1,5,A)
:Output(1,8,",")
:Output(1,9,B)
:Output(1,12,")=")
:Output(1,14,F)
:While B (différent de 0)
// cette routine scroll l'écran, c'est plus agréable qu'effacer et reprendre en haut mais c'est plus compliqué
:If E>8
:Then
:8->E
:If F=0
:Pause
:Disp "" // scroll
:F+1->F
:If F>7
:0->F
:End
:A-ent(A/B)*B->D (le reste)
:partEnt(A/B)->C (le quotient)
:Output(E,1,A)
:Output(E,4,"=")
:Output(E,5,B)
:Output(E,8,"*")
:Output(E,9,C)
:Output(E,12,"+")
:Output(E,13,D)
:E+1->E (j'empile les ligne de résultat)
:B->A
:D->B
:End
---------------------- ti82statfr: 2008, inscrit: 2009, ti84pocketfr: noël2011, ti30xbmultiview: iut 2012-2014
Perfectionniste, manque tact. Pas le temps de tout publier depuis 2011. Répond toujours aux questions. (rédigé juin 2014)
Autorisation : Membre
Nb de messages : 3738
Inscrit le : Lun 19 Oct 2009, 21:25
Posté le : Mar 09 Déc 2014, 0:34
Teste et tu verras que l'écran défile si tu as plus de 8 affichages.
"Scroll" est un mot anglais utilisé pour désigner le "défilement" de l'écran. Utiliser scroll dans des phrases françaises est une mauvaise habitude.
Les deux fragments sont bien isolés du reste dans mon message donc tu peux simplement les enlever si tu t'en fiche.
---------------------- ti82statfr: 2008, inscrit: 2009, ti84pocketfr: noël2011, ti30xbmultiview: iut 2012-2014
Perfectionniste, manque tact. Pas le temps de tout publier depuis 2011. Répond toujours aux questions. (rédigé juin 2014)
:0->F // prépare les scrolls
:Disp "","","","","","","","" // 8 fois "" // prépare les scrolls
// cette routine scroll l'écran, c'est plus agréable qu'effacer et reprendre en haut mais c'est plus compliqué
:If E>8
:Then
:8->E
:If F=0
:Pause
:Disp "" // scroll
:F+1->F
:If F>7
:0->F
:End
Et surtout ce qui a dans les guillemet après DISP stp !
Autorisation : Membre
Nb de messages : 3738
Inscrit le : Lun 19 Oct 2009, 21:25
Posté le : Mer 10 Déc 2014, 22:22
Quand Disp affiche quelque chose en dehors de l'écran parce que a dernière ligne est déjà atteinte, le contenu de l'écran défile d'une ligne. C'est ce que je veux faire. C'est un "scroll".
Quand tu effaces l'écran avec EffEcr au début du programme, la position de la prochaine écriture sur l'écran avec Disp est en haut de l'écran et elle n'est pas mise à jour lorsque tu affiches des choses avec Output.
Exécuter un affichage avec Disp d'une chaîne vide cause un retour à la ligne, mais n'affiche rien. Cela se contente d'avancer la position sur l'écran et effacer des lignes de l'écran qui auraient été affichées avant avec Output.
Donc les 8 affichages vides avec un Disp au début du programme après EffEcr permettent de placer la position d'écriture en bas de l'écran et les prochaines utilisations de Disp provoquent un défilement de l'écran ("scroll").
La variable F compte les défilements de l'écran et me permet de réaliser une pause toutes les 8 lignes affichées.
Ainsi le programme peut afficher plus de 8 lignes contrairement à avant, et on a toujours le temps de les lire même si elles sont nombreuses.
Cette fonctionnalité n'est que du bonus, elle peut simplement être supprimée si on veut.
---------------------- ti82statfr: 2008, inscrit: 2009, ti84pocketfr: noël2011, ti30xbmultiview: iut 2012-2014
Perfectionniste, manque tact. Pas le temps de tout publier depuis 2011. Répond toujours aux questions. (rédigé juin 2014)