Poster un nouveau sujet Poster une réponse
prgmDIVISEUR (problème scrolling)
Auteur Message
RzK
Invité
Posté le : Sam 08 Sep 2012, 17:26   Citer 

Bonjour,
ayant besoin de réaliser un petit programme (TS Spé Math) cherchant tous les diviseurs d'un nombre N, je soumet à vous ce programme pour que vous me donniez votre avis et pour que vous m'éclairiez (je l’espère) sur un point en particulier.

Une version simple du prgm consisterait à ne pas utiliser de Liste, et à simplement afficher X avec Disp lorsque celui-ci est diviseur de N...
Néanmoins, vous l'aurez compris, cette méthode pose problème lorsque le nombre de diviseurs de N est important (N=856 par ex.), car il devient impossible de lire tous les chiffres s'affichant successivement à l'écran. De plus le scrolling vertical est impossible.

J'ai donc pensé à 'ranger' tous ces diviseurs dans une liste (en l’occurrence L6) dans le but de pouvoir faire défiler horizontalement les diviseurs... en vain. crazy.gif Les accolades suivies des valeurs s'affichent bien et les premières valeurs aussi mais je ne peux pas faire défiler vers la droite.

Voici le programme en question :

prgmDIVISEUR


Code
EffEcr
EffListe L6

Prompt N
1->Z
If partDec(N
Stop

For(X,1,partEnt(N/2+1
If N/X=partEnt(N/X
Then
X->L6(Z)
Z+1->Z
End
End

N->L6(Z)
Disp L6
Outpout(8,1,"


//

Une solution simple aurait été de rajouter une pause après chaque affichage de diviseur, mais je préfère l'idée d'un scrolling horizontal clown.gif

Merci d'avance pour votre aide happy.gif

RzK.

  Haut de page Bas de page 
 
linkakro



Autorisation : Membre
Nb de messages : 3767
Inscrit le : Lun 19 Oct 2009, 21:25
Posté le : Sam 08 Sep 2012, 17:58   Citer 

Pour pouvoir scroller horizontalement (et facilement) la liste, il est nécessaire de suivre une de ces deux méthodes :
-utiliser la fonction Pause suivie de la variable ; cela done "Pause L6"
-placer la liste en toute dernière instruction du programme ; écrit simplement "L6" sur la dernière ligne

Il est aussi faisable d'afficher chaque nombre successivement avec une Pause, c'est comme ajoûter une Pause après le "Disp X" mais plus léger.

-----

Utilise la balise [code*][/code*] pour poster des programmes (accessible par un icone au dessus du cadre d'écriture)

Il est plus facile d'écrire non(partDéc(N/X que N/X=partEnt(N/X ; non() se trouve dans le menu 2nde+math(test) et revient à écrire "0=..."

La traduction de TI concernant partEnt() et ent() est erronée. Article

Tu peux remettre à zéro Z en utilisant EffVar Z, cela permet d'économiser deux octets dont un en collant la prochaine instruction à la suite

La boucle For s'arrête dès que X dépasse la valeur de sortie. Donc tu peux écrire For(X,1,N/2

-----

En supplément :
Je pense que tu peux augmenter l'efficacité de ton programme en sauvegardant le nombre X mais aussi le nombre N/X : cela te permet d'énumérer plus rapidement tous les diviseurs.
Les inconvénients sont le désordre des valeurs trouvées, qu'on peut contourner en utilisant la fonction de tri, et la nécessité d'arrêter la recherche à la racine carrée de N.

-----
Voici ce que j'ai élaboré à partir de mes quelques conseils et suppléments.

Code
EffEcr
EffVar ZEffListe L6
Prompt N
If partDec(N
Stop
For(X,1,N/2
If non(partDéc(N/X
Then
Z+1->Z
X->L6(Z
 // Pause X // peut être ajoûté
End
End
N->L6(Z
L6


Code
EffEcr
Prompt N
If partDec(N
Stop
For(X,1,N/2
If non(partDéc(N/X
Pause X
End
N


Code
EffEcr
EffVar ZEffListe L6
Prompt N
If partDec(N
Stop
For(X,1,rac(N
If non(partDéc(N/X
Then
Z+2->Z
X->L6(Z
N/X->L6(Z-1
 // Disp X
 // Pause N/X
End
End
TriCroi(L6
L6



----------------------
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)

Pour tout le monde et surtout les débutants, quelques-uns des articles courants :
*Traductions Algorithmie/Ti-Basic.
*Caractères spéciaux sur Tout82
Les défauts du TI-Basic : Goto_versus_algo et DelVar/End/Lbl/guillemet/store
 Adresse email Haut de page Bas de page 
 
RzK
Invité
Posté le : Sam 08 Sep 2012, 21:07   Citer 

Merci beaucoup, c'est exactement ce que je cherchais. L'optimisation est ingénieuse happy.gif La 3e 'version' est en effet la plus aboutie, et la 2e la plus condensée.... Cordialement, RzK.

  Haut de page Bas de page 
 
Poster un nouveau sujet Poster une réponse





  Powered by Fire-Soft-Board v1.0.10 © 2004 - 2024 Groupe FSB
Page générée en 9 requêtes
BlackOne par Grimmlink