Poster un nouveau sujet Poster une réponse
que fait For?
Auteur Message
monsalbert
Invité
Posté le : Jeu 25 Jui 2015, 10:19   Citer 

bonjour Mathieu

code auquel je tenais ,trouvé (diviseurs)

Prompt A
0-> E
Lbl 1
For(I,2,racine A ( ICI j'ai mis "Pause I" pour suivre tous les mouvements)

If I> racine A
then
A ->I
end

If partDec (A/I)= 0
E+1 ->E
E-> dim(L1
I-> L1(E)
A/I->A
Goto 1
End

End
Disp L1

résultats sur A= 2520 (c.à d. 2^3*3^2*5*7)

L1 {2 2 2 3 3 5 7 } très bien

mais Pause I donne :
2 2 2 2 3 2 3 2 3 4 5 2 3

quatre 2 de suite d'accord puisqu'il ne sait pas que ce n'est plus divisible par 2.
ensuite : 3 2 3 2 3 d'où sortent les 2? I est passé à 3!

enfin: 4 5 I continue, mais 2 et 3 d'où sortent-ils ?

En un mot , les "I" c'est très confus et donc tous les cercles effectués par le programmes.

merci.

  Haut de page Bas de page 
 
m@thieu41



Autorisation : Membre
Nb de messages : 856
Inscrit le : Mer 18 Juil 2012, 18:44
Posté le : Sam 27 Jui 2015, 19:17   Citer 

Bonsoir,

Ce code est très compliqué a mon goût...
Est ce le tien ?

Déjà, il vaut mieux éviter de mélanger boucles et ggoto/lbl (cf tuto de linka pour plus de précisions sur les pb que ça pose).

Ici, ce qu'il se passe, c'est que tu détermines le plus petit diviseur de A, puis tu recommence en prenant le quotient (tu redemarre une nouvelle boucle for, donc tu "reprend" a I=2).

Ce qui fait qu'une fois que tu as déterminé que 3 divisait 27 (par exemple), tu prends A=9. Ensuite tu reteste si 2 divises 9 (alors que tu le sais déjà que c'est faux car il ne divise pas 27...).

(Je suppose que tu as oublié un Then après le if partDec(A/I)=0)

Plutôt que de faire un goto/lbl et de tout retester:
_stocke le diviseur comme tu le fais
_conserve le A/I->A
_mais decremente I: ainsi, au prochain passage dans la boucle, I sera incremente, et tu testera bien si le diviseur trouve divise le quotient.
_enleve carrément le goto/lbl

----------------------
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 winkle.gif
 Adresse email Haut de page Bas de page 
 
monsalbert
Invité
Posté le : Mar 30 Jui 2015, 1:03   Citer 

bonsoir mathieu

- j'ai trouvé ce code dans un site, j'ai voulu voir justement le fonctionnement de Lbl / Goto

_ si on observe l'essais 2520 = 2^3x3^2x5x7 j'ai esayé de revoir tout le processus en utilisant 2 colonnes : celle des "A" et celle de "I" en parallèle.
je ne comprends pas la colonne des " I " qui donne:

2 2 2 2 3 2 3 2 3 4 5 2 3 le 3ème 2 donne A =315 on remonte For redonne 2 qui ne divise plus A donc on remonte For passe à 3. C'est ce que tu expliques dans ton message.


Mais comment expliquer la suite : un 2 !! puis 3, puis encore un 2!! ( For monte et descend !)

la suite est normale 3 4 5, mais ensuite à nouveau on termine avec 2 3!!

- l'essais que tu proposais en fin de message ,très bien. On apprécie l'astuce si simple et pourtant on trompe For, c'est bien celà ?. (je m'étais demandé, il y a quelque temps si on pouvait intervenir sur le " I " de For..( For a une mémoire I et on l'a modifiée?)

  Haut de page Bas de page 
 
m@thieu41



Autorisation : Membre
Nb de messages : 856
Inscrit le : Mer 18 Juil 2012, 18:44
Posté le : Mar 30 Jui 2015, 9:15   Citer 

Le fonctionnent de for est le suivant :
For(var,debut,fin,pas
...
End

Lorsque la calto lit la ligne for, il initialise var a début, et enregistre le fait qu'on est dans un for.
Lorsqu'elle lit le End, elle détermine dans quelle type de boucle/structure elle se trouve.
Si c'est un for: elle augmente la valeur de var du pas (1 par défaut), puis elle teste si var>pas pour savoir si elle doit rester dans le for ou pas.
C'est donc la valeur actuelle de la variable qui compte, seuls fin et pas sont enregistrés comme caractéristiques de la boucle.
Modifier var dans la boucle permet donc d'y rester plus ou moins longtemps.

Ici, ce qu'il se passe, c'est qu'on a un goto qui nous fais retourner avant la ligne for:
La calto va pour la première fois dans la boucle. Elle initialise I a 2. I s'incremente a chaque End, puis on passe au niveau du goto. A ce moment, la calto repasse par la ligne for. Pour elle, il s'agit d'une nouvelle boucle ! Elle initialise donc I a 2, et reprend donc a partir de la...
A la fin du prgm, il y a donc plusieurs for en attente, qui n'ont pas été "finis" comme cela aurait dû, avec un End et un I>var. Seule la dernière boucle est correctement fermée.

----------------------
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 winkle.gif
 Adresse email Haut de page Bas de page 
 
monsalbert
Invité
Posté le : Mer 01 Juil 2015, 20:08   Citer 

Nous y sommes.Remarquons que ce code à Goto marchait mais son mécanisme était compliqué à comprendre ( pour moi ). C'est fait.Satisfaction d'avoir levé le problème. Merci Mathieu pour ces explications précises et aussi pour l'autre code à " I-1 " que j'ai bien apprécié.

Puis-je terminer en te demandant toi que ferais comme code pour ce problème des diviseurs?

merci encore, je suis toujours satisfait de tout ce que tu apportes.

  Haut de page Bas de page 
 
m@thieu41



Autorisation : Membre
Nb de messages : 856
Inscrit le : Mer 18 Juil 2012, 18:44
Posté le : Jeu 02 Juil 2015, 22:48   Citer 

Oui je te l'accorde il est compliqué parce qu'il fait plusieurs fois la même chose.
L'association des goto/boucles est en général une façon plus compliquée de coder ales qu'on peut faire plus simple et plus efficace (d'autant plus si comme ici on repasse au début de la boucle).

ici il y a une discussion qui traite de ce programme :
http://tout82.free.fr/forum/sujet.php?sujet=2688&page=1
Le dernier code est intéressant, il y a une petite association goto/boucle qui ici est plus efficace car permet de sortir de la boucle, et non d y rentrer sans cesse.
J'avais code ce programme, mais sans apporter de nouvelles idées.

----------------------
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 winkle.gif
 Adresse email 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