Poster un nouveau sujet Poster une réponse <<   Page: , 2,      >>
PPCM seul.
Auteur Message
sandro



Autorisation : Membre
Nb de messages : 1387
Inscrit le : Ven 25 Mar 2011, 22:58
Posté le : Mer 22 Fév 2012, 20:09   Citer 

J'édite mon second message pour rectifier cette étourderie copiée-collée.

----------------------
mort à l'inutile, place à la mémoire libre et aux programmes
 Adresse email Haut de page Bas de page 
 
monsaibert
Invité
Posté le : Lun 27 Fév 2012, 20:09   Citer 

bonsoir linka, sandro

-le rectificatif :
Par exemple pour A=2*3*5*7=6*5*7, P=6, Q=5, R=7.
60=2*2*3*5=4*3*5 , P=4 Q=3, R=5
300=2*2*3*5*5=12*5*5 , P=12, Q=5, R=5
375=3*5*5*5=15*5*5 , P=15, Q=5, R=5... a été salutaire! tout est rentré dans l'ordre. sandro avait raison, c'était l'intro qui méritait précision

Faisons le point 2 codes sont en place
imput B
B->A
effliste L1
effVar U
0-> U
While non(partDec(A/2)
U+1-> U
A/2-> A
2-> L1(U)
end
For(W, 3,rac(B),2)
While non(partDec(A/W)
U+1-> U
W->L1(U)
A/W->A
If A=1
Goto 1
end
Lbl 1
Pause L1 RQ: B = A initial / on traite les W pairs puis W impairs / rac(B) dans For

RAPIDE mais coince sous 15

2 ème code ( le dernier)
imput B
effliste L1
B-> A
0-> U
For (W,2,B)
While non(partDec(A/W
U+1-> U
A/W-> A
W-> L1(U)
end
end
Pause L1

Marche bien sur toutes les valeurs mais ralenti ( our faire 540 met déja 15 secondes) au dessus de 1000 trop de temps!

Lequel choisir ? pour le PPCM il faudra faire 2 nombres et la synthèse.Le 1er est plus rapide mais peut-on trouver une astuce pour les valeurs basses?

  Haut de page Bas de page 
 
sandro



Autorisation : Membre
Nb de messages : 1387
Inscrit le : Ven 25 Mar 2011, 22:58
Posté le : Lun 27 Fév 2012, 20:30   Citer 

quand tu dis coince sous 15, tu veux dire que ça ne marche pas si on entre un nombre inférieur à 15?
Si c'est ça, combine les 2, ou alors prévoit les nombres sous 15 sous forme de liste.

Sandro

----------------------
mort à l'inutile, place à la mémoire libre et aux programmes
 Adresse email Haut de page Bas de page 
 
linkakro



Autorisation : Membre
Nb de messages : 3767
Inscrit le : Lun 19 Oct 2009, 21:25
Posté le : Mar 28 Fév 2012, 1:16   Citer 

For(W,3,rac(B),2)
Cela paraît logique mais ne remplit pas complètement son rôle.
En effet le For ne calcule cette racine qu'une seule fois au tout début.
Quelques exemples démonstratifs se trouvent dans ce sujet-là.
De plus il peut te manquer le dernier facteur si la sortie est opérée par le For.

Le second code de ton message précédent est la version la plus basique qui soit.

====

Maintenant que nous avons chacun une plutôt bonne maîtrise de la décomposition, je reposte une dernière fois un code avec toutes les astuces viables.
(amélioration supplémentaire par rapport au vendredi 10 )
Mais je commence à ne plus me souvenir des évolutions depuis le début.
Ce fût une erreur de vouloir simplifier dès début du sujet, j'ai juste provoqué des confusions.
Pour éviter la moindre confusion, voici le code final :

Code
// programme le plus récent en matière de décomposition

Prompt A
ClrList L1
DelVar U
While not(fPart(.5A
U+1->U
2->L1(U
.5A->A
Disp 2
End
rac(A->B
For(W,3,A,2
If W>B
A->W
While not(fPart(A/W
U+1->U
W->L1(U
A/W->A
Disp W
rac(A->B
End
If A-1
End
Pause L1

Les astuces retenues dans cette version sont :
-test de la racine carrée de la dernière valeur de A.
-ce test influe sur W mais c'est le reste du programme qui achève la recherche. C'est plus léger et ça évite un goto.
-Le End du For dépend d'un If afin d'éviter un Goto.
-l'arrêt possible par A=1 dans les cas où la racine est innefficace.
-l'usage d'une variable B pour la racine afin d'éviter des calculs récurrents.
-la division préliminaire par 2.
Remarque : l'argument A d'arrêt de For n'a pas d'importance

Ce dernier code est légèrement plus poussé encore que ma dernière version d'avant ce sujet de discussion.

---

Il y eût historiquement des versions dans lesquelles je séparais les while dans un code secondaire.
Cela semblait léger mais c'était peu pratique.
Une autre déclinaison stockait les puissances des facteurs dans une seconde liste. Mais ça ajoûte des trucs pas nets.
C'est la seule chose qu'il reste possible d'ajoûter.

----------------------
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 
 
monsalbert
Invité
Posté le : Mar 28 Fév 2012, 19:12   Citer 

-> Pour les basses valeurs :

15 donne 3
10 donne 2
6 donne 2
5 donne erreur
3 donne erreur au dessus celà fonctionne bien

-> je vais essayer de refaire le code que tu signales (vendredi 10 ).

C'est vrai que rentrer les puissances de chaque W celà va alourdir.

  Haut de page Bas de page 
 
sandro



Autorisation : Membre
Nb de messages : 1387
Inscrit le : Ven 25 Mar 2011, 22:58
Posté le : Mar 28 Fév 2012, 21:32   Citer 

pas forcément tant que ça. si tu fait une liste de 15 termes constitués de la manière suivante (1 pour chaque nombre inférieur ou égal à 15) de la manière suivante : 100000f+10000e+1000d+100c+10b+a avec W=13^f * 11^e * 7^d * 5^c * 3^b * 2^a
puis récupérer le nombre?

Je pense qu'on peut s'en sortir pour en tout cas moins de 150 octés. Après faut voir la différence de vitesse voire si ça vaut le coups par rapport au programme fonctionnant pour n'importe que entier.

Sandro

----------------------
mort à l'inutile, place à la mémoire libre et aux programmes
 Adresse email Haut de page Bas de page 
 
linkakro



Autorisation : Membre
Nb de messages : 3767
Inscrit le : Lun 19 Oct 2009, 21:25
Posté le : Mar 28 Fév 2012, 23:57   Citer 

Pour l'instant je juge impossible de déterminer un ppcm sans stocker les résultats de la décomposition avec des puissances.
La gestion des puissances est simple, mais cela nécessite quelques ajoûts.

Je reviens toujours à la détermination du pgcd même après la décomposition en facteurs premiers car la détermination du ppcm passe par la détermination des facteurs communs d'une part et des autres facteurs d'autre part.
Enfin il suffit d'effectuer le produit des nombres puis de diviser par le produit des facteurs communs.
(ce qui revient à la formule classique du ppcm selon le pgcd)


Code
// programme de détermination de ppcm

Prompt A,C
Disp lcm(A,C
AC->T
prgmZDECOMP
C->A
U->D
L1->L3
L2->L4
prgmZDECOMP
1->Z
For(X,1,U
For(Y,1,D
If L1(X)=L3(Y
ZL1(X)^min(L2(X),L4(Y->Z
End
End
Disp T/Z

//////////////////
// programme ZDECOMP

DelVar U
ClrList L1
{0->L2
While not(fPart(.5A
2->L1(1
.5A->A
1->U
1+L2(1->L2(1
End
rac(A->B
For(W,3,A,2
If W>B
A->W
If not(fPart(A/W
Then
U+1->U
0->L2(U
End
While not(fPart(A/W
A/W->A
rac(A->B
W->L1(U
1+L2(U->L2(U
End
If A-1
End

EDITE= suppression de DelVar V et V+1->V ainsi que d'une Then/End devenu innutile.
ancienne version :
If L1(X)=L3(Y
Then
V+1->V
ZL1(X)^min(L2(X),L4(Y->Z
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)

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 
 
monsaibert
Invité
Posté le : Mer 29 Fév 2012, 19:19   Citer 

S'il vous plait n'aller pas si vite:

mon message de Mar 28 Fév 2012 a 2 flèches
1ère / je reponds à sandro sur les manques d'un code pour les petites valeurs de A.
2 ème je réponds à linka

A sandro : ta proposition est une astuce pour que la machine marche bien même pour les petites valeurs que je signale dans le message? ( tu parles de 15...)
Quoiqu'il en en soit , je voudrais bien que tu m'expliques , pas trop vite!

A linka.

Helas j'ai lu ton dernier code et j'ai besoin d'éclaircicement, parfois aussi d'être rassuré.

Je retrouve certaine partie
du debut jusqu'à end : on va de A initial jusqu'à A/2^n

a - quel est le rôle de rac(A->B à la fin des nbres pairs? a t-il bien pour but de stopper si apres For, If trouve "ce fameux unique nbre premier superieur à rac A" ?

a - vient ensuite les impairs jusqu'au 2ème end
quel et le rôle de ce 2 ème rac(A->B avant end ?

c - normalement la TI fait Prompt A ->End puis reprend à Clrlist ->end ( n fois ) -> jusqu'à ce que le While dise " partie decimale - stop "-> va sur le fameux rac(A-> B et (ou) s'enclenche sur les impairs.
A la fin du 1er impair , elle affiche son W (Disp W) et aprés ? peux tu me preciser comment vont se faire les n tours?
que signifie If A-1 ?

je n'ai pas lu ton message , je le ferais après. Ne va pas trop vite.

Rq: n'a rien à voir
que signifie
E -> dim(L1) que signifie dim ? où la trouver?
où trouver EffList, ...je vais la prendre dans catalogue! c'est long..
merci

  Haut de page Bas de page 
 
linkakro



Autorisation : Membre
Nb de messages : 3767
Inscrit le : Lun 19 Oct 2009, 21:25
Posté le : Mer 29 Fév 2012, 23:22   Citer 

La proposition de sandro concerne la détermination des puissances des nombres premiers, que tu jugeais trop compliqué à cause de mon affirmation pessimiste juste avant.

---

J'ai sauté les étapes en considérant qu'il était plus simple de reprendre à zéro avec un code complètement réécrit plutôt que de se prendre la tête avec des programmes foireux.

---

Les bugs que tu rencontres avec les nombres inférieurs à 15 ont trois causes :
-leur racine est inférieure à 4 donc la boucle quitte pratiquement aussitôt.
-s'arrêter à la racine carrée est bien joli, mais il faut intégrer le dernier facteur s'il existe à la liste
-la boucle For n'effectue son calcul de racine qu'une seule fois au début contrairement à ce qu'on pourrait croire. Ainsi on effectue le test de sortie sur la racine de A0/2 mais pas sur A. démo

Pour ces raisons il peut régulièrement te manquer un facteur, et l'arêt se produit avec du retard.

=====

ClrList=EffList se trouve dans le menu stat
dim() se trouve dans le menu list (2nde+stat)

If A-1 est un test.
Pour les calculatrices les tests donnent des résultats sous la forme de 1="vrai" et 0="faux".
Quand on donne un calcul au lieu d'un test, la valeur 0 est interprétée comme "faux" et toute autre valeur comme "vrai".
If A-1 revient donc à écrire If A-1=/=0 c'est-à-dire If A=/=1

Avoir placé le "End" final juste après le "If A-1" est une manière horrible mais efficace de contrôler la sortie du For par un test supplémentaire.
Ici le For n'est autorisé à recommencer que si A est différent de 1.

Nous nous sommes égarés parmi les propriétés mathématiques...
Le fait qu'il n'y ait qu'un seul nombre premier suppérieur à la racine est curieux mais n'a pas d'importance dans le programme.
En effet j'utilise déjà en continu la propriété principale : si W>rac(A) alors A est le dernier facteur premier.

Je veux effectuer des tests sur la racine de A mais pas calculer cette racine à chaque fois. (ainsi ça va plus vite)
Donc je stocke la racine de A dans B chaque fois que A est modifié, puis j'effectue le test d'arrêt sur B.

En algorithmique le résultat final de la décomposition en facteurs premiers se traduit par :

Code
Saisir A
Tant que A/2 est juste
stocker 2 dans L1
A/2->A
afficher 2
Fin_Tant_que

stocker la racine de A
Pour W de 3 à A par incrément de 2
Si W>rac(A
A->W        // le prochain diviseur testé sera A, justement le dernier facteur 
Tant que A/W est juste
stocker W dans L1
A/W->A
afficher W
stocker la racine de A
Fin_Tant_Que
Si A=1 alors ne pas executer la ligne du "Fin_Pour".
Fin_Pour
Afficher L1



----------------------
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 
 
monsalbert
Invité
Posté le : Jeu 01 Mar 2012, 20:04   Citer 

Je revois toutes tes mises au point. j'ai jeté un coup d'oeil sur ton code posté mardi ( avec ZDECOMP ). Je ne comprends rien dans la premiere partie!
( dès la 1ère ligne, Icm c'est quoi ? )..

Rq: tu as oublié de dire à quoi sert dim(L1)( differents usages?)

  Haut de page Bas de page 
 
sandro



Autorisation : Membre
Nb de messages : 1387
Inscrit le : Ven 25 Mar 2011, 22:58
Posté le : Jeu 01 Mar 2012, 21:09   Citer 

dim(L1 peut avoir deux usages : soit on fait "expréssion -> dim(L1 " dans quel cas la liste L1 fera désormais expréssion termes de long ; soit on l'utiliser dans un calcul, dans quel cas la fonction renvoie le nombre de termes de la liste.

Sandro

----------------------
mort à l'inutile, place à la mémoire libre et aux programmes
 Adresse email Haut de page Bas de page 
 
linkakro



Autorisation : Membre
Nb de messages : 3767
Inscrit le : Lun 19 Oct 2009, 21:25
Posté le : Jeu 01 Mar 2012, 21:34   Citer 

Les choses essentielles devraient se situer dans mes trois derniers pavés.
Je ne passerai plus d'étape, je mettrai l'accent sur le ppcm quand tout sera au point pour la décomposition.

dim() permet de consulter ou de modifier la dimension d'une liste ou d'une matrice.
Saisir dim(L1) comme une variable exploite la dimension de L1 si elle n'est pas vide. (au moins un terme sinon ça plante)
2->dim(L1) donne à la liste L1 une dimension 2.
Quand on allonge ou raccourci une liste, les termes en trop sont perdus et les termes ajoûtés sont des 0.

---- ppcm

Le programme de détermination de ppcm est composé de deux programmes.
Le premier execute le second pour décomposer les nombres.
ZDECOMP ne manipule que les listes L1 et L2 quelques autres variables, donc le programme ppcm doit stocker les résultats dans d'autres variables entre les deux décompositions.
U et D pour la suite représentent les dimensions des listes.

Les boucles For de la fin permettent de passer en revue tous les facteurs.
Et quand deux facteurs sont communs, je consulte les puissances, le minimum indiquant combien de facteurs de la catégorie sont communs.

----------------------
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 
 
monsaibert
Invité
Posté le : Sam 03 Mar 2012, 10:28   Citer 

- bilan sur l'important message de mercredi 29 0.2

a - bien sur les 3 causes de bug du code ( defaut dans les petites valeurs )
verifiés par des essais .
b - If A-1 revient à écrire A-1 est vrai., nous sommes d'accord ? donc si on ecrit If B revient à écrire si B existe (c.à.d. B est vrai ou a une certaine valeur numerique ( la 1ère fois qu'on voit celà, ça surprend!).
c - corrige si c'est faux : on a un For et un While donc 2 End. Dans ces situations le 1er End est à While / 2ème End à For.( Ordre toujours normal dans ces cas?)
pourquoi dis-tu horrible pour la sortie du For ?

Très bien tout celà, je souffre mais on avance.

Rq: si tu pouvais concocter un petit exo avec les utilisations de dim (L1)...pour voir.( Je garde celui sur While-Repeat)
ces jours je bosse prgmZDECOMP (la 1ère partie m'inquiète )

  Haut de page Bas de page 
 
linkakro



Autorisation : Membre
Nb de messages : 3767
Inscrit le : Lun 19 Oct 2009, 21:25
Posté le : Sam 03 Mar 2012, 12:26   Citer 

a et b : ok
( moi aussi j'ai été déconcerté par des trucs du genre If A la première fois.
En ce qui me concerne je m'interrogeait sur While 1 et Repeat 0.
Pour exploiter les tests au mieux, tu peux jeter un oeil à mon article sur les tests. Il a ses défauts mais il ouvre à pas mal de choses. )

c : Les boucles sont justes mais c'est d'avoir placé le If juste avant le End qui est horrible.
Ce genre de bidouille peut causer des bugs si on ne saît pas exactement ce qu'on fait. (voire même créer des erreurs de compilation dans d'autres languages)
Je t'envoie sur mon article et le tuto du sdz pour ce qui concerne les magouilles de End.

La fonction dim :
Code
EffListe L1  // liste vide
4->dim L1    // L1={0,0,0,0}
{1,3,3}->L1  // L1={1,3,3}
Disp dim(L1  // 3
4->dim(L1    // L1={1,3,3,0}
2->dim(L1    // L1={1,3}
EffListe L1
dim(L1       // ERREUR : dimension invalide car la liste est vide

3->dim(lPERSO   // création d'une liste personnalisée
                // si la liste n'existait pas, alors lPERSO={0,0,0}
                // le "l" se trouve dans le menu liste
EffListe lPERSO // la liste est vide mais existe toujours
{2,3->lPERSO
EffVar lPERSO   // liste détruite
EffListe lPERSO // ERREUR : indéfini car la liste n'existe pas
dim(lPERSO      // idem

EDIT : cas particulier

Code
{1,2->L1
2->L1(3)  //allonge la dimmension puis stocke
X->L1(N+1)  // fonctionne pour toute liste de dimmension N même si N=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)

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 
 
Google_AdSense



Publicité    



 
monsaibert
Invité
Posté le : Lun 05 Mar 2012, 19:11   Citer 

J'ai vérifié le code de Mar 28 Fév 2012, 1:16 .
-impeccable : rapide et tous les facteurs passent.
Juste quelques précisions :

a - le rac(A->B en fin des nombres pairs - apres Disp 2 et le 1er End ( mais avant le For )il a bien surtout pour rôle d'arrêter tout de suite après ,les multiples de 2 ? En celà il peut faire gagner du temps? surtout si le For donne un W=3.

b - à propos du If A-1. Est-ce à cause de " For(W,3,A,2" que le For ne marche que si A =/=1 ? ou est-ce quelque chose à admètre parceque cette ligne dit "Vrai" (A=/=1)? D'ailleur pourquoi ne pas mettre If A-1 avant le End du While ?

J'ai revue la 1ère partie du code Posté le : Mar 28 Fév 2012, 23:57
Prompt A,C
Disp lcm(A,C
AC->T
prgmZDECOMP
C->A
U->D
L1->L3
L2->L4
prgmZDECOMP
DelVar V
1->Z
For(X,1,U
For(Y,1,D
If L1(X)=L3(Y
Then
V+1->V
ZL1(X)^min(L2(X),L4(Y->Z
End
End
End
Disp T/Z
Je dois t'avoué que je ne comprends pas grand choses : que signifie Icm ( 2ème ligne ) la variable C sert à quoi? T?. que signifie L1->L3 ?des variables sans valeurs U, D ?..

  Haut de page Bas de page 
 
linkakro



Autorisation : Membre
Nb de messages : 3767
Inscrit le : Lun 19 Oct 2009, 21:25
Posté le : Jeu 08 Mar 2012, 1:24   Citer 

a-
J'aurais pu supprimmer tous les rac(A->B et écrire If W>rac(A.
Mais je gagne de la vitesse d'execution en stockant le résultat avant de le réutiliser plus tard.
En effet c'est plus rapide de lire B que de calculer rac(A.
Or le test If W>B est effectué à chaque boucle même si A n'est pas modifié.
Alors je préfère consulter B à chaque boucle mais ne calculer la racine que si A est modifié.

Cela fonctionne que A initial soit paire ou non. Les facteurs 2 n'ont aucune importance.
Comme j'ai choisit de stocker la racine plutôt que de la calculer régulièrement, je le fais juste avant de rentrer dans le For car il est innutile de le faire plus tôt.

b-
Lorsque la calculatrice lit un End, elle execute la procédure liée à la dernière boucle qu'elle ait ouverte.
Si la dernière boucle ouverte était un Then, la boucle est juste refermée.
Si la dernière boucle ouverte était un For, W est incrémenté puis le test de sortie "W>A" est effectué.
Cela n'arrive jamais donc le For se poursuit.
Le "If A-1" empêche la calculatrice de lire le "End" qui devrait fermer le For lorsque A=1 (A-1=faux=0)
Donc si A=1, le For est interrompu.

Il est innutile de placer le "If A-1" avant le End du While car c'est le For qui doit être influencé par le test et non le While.

===== prog du Mar 28 Fév 2012, 23:57

lcm signifie ppcm en anglais.
menu math +droite+8
Je l'ai utilisé pour vérifier mes résultats.

Il s'agit de deux programmes distincts.
C'est pour ne pas écrire deux fois le même code de décomposition.

prgmZDECOMP permet d'executer un autre programme. Tu peux le saisir par prgm+gauche
Lorsque prgmZDECOMP est lu, le programme de ce nom est executé. Quand ce second programme est terminé, la calculatrice termine de lire le premier programme.

Appelle le premier comme tu veux et le second ZDECOMP.

Le second programme sert à effectuer une décomposition des données fournies par le premier programme.

A et C sont les nombres dont on cherche le ppcm.
T est le produit de A et C. Je le calcule au début pour le réutiliser à la fin.

L1 et L3 sont les listes des facteurs premiers. L2 et L4 sont les puissances de ces facteurs.

ZDECOMP décompose A et donne des résultats dans L1,L2 et U.
Je stocke ces résultat dans L3,L4 et D.
Puis je stocke C dans A pour que ZDECOMP décompose cette fois-ci C.
Les résultats sont dans les mêmes variables (L1,L2 et U)
Ainsi L1 est la liste des facteurs de C, L2 celle des puissances de C, L3 celle des facteurs de A, L4 celle des puissances de A, U la longueur de la liste L1 et D la longueur de la liste L3.

La fin du premier programme exploite les résultats pour déterminer les facteurs communs.

----------------------
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 
 
monsaibert
Invité
Posté le : Jeu 08 Mar 2012, 19:23   Citer 

- beau travail! les deux codes en place les PPCM sortent impeccables. Je suis surpris, je ne m'attendais à cette vitesse.Bravo.
donc, on peut, d'un programme, utiliser un autre programme qui serait sur la TI! très interessant.

-il faut decrypter quelques passages dans ZDECOMPO.

a- dans les A pairs 2->L1(1 s'il ya plusieurs 2 ils se remplacent et à la fin dans L1 on aura un seul 2 ?
la variable U sert bien à numeroter les diviseurs et les puissances?
b - capital : 1+L2(1->L2(1 à chaque tour il monte la puissance du 2 d'une unité?

c-dans les impairs juste après le If :
U+1->U
0->L2 (U monte le rang d'un cran et on met un 0 pour preparer la place de la prochaine puissance

d - 1+L2(U->L2(U entasse les puissances?

e - il semble qu'en ce qui concerne les W>3 à cause de W->L1(U (après le While ) seront tous présent dans L1 (ex :3,3,3,5,5,11..) ?
corrige moi , merci.

  Haut de page Bas de page 
 
linkakro



Autorisation : Membre
Nb de messages : 3767
Inscrit le : Lun 19 Oct 2009, 21:25
Posté le : Ven 09 Mar 2012, 2:04   Citer 

{0->L2
Cela permet de vider et donner une dimension à la liste en une seule commande

If not(fPart(A/W
Then
U+1->U
0->L2(U
End
Cela n'est executé qu'une seule fois pour chaque W valide.
Cela prépare la liste en augmentant la dimension de la liste et en incrémentant la variable U de position.
J'aurais pu écrire U->dim(L2) au lieu de 0->L2(U).

While not(fPart(A/W
A/W->A
rac(A->B
W->L1(U
1+L2(U->L2(U
End
Ceci est executé pour U constant.
Donc W est stocké à chaque fois au même endroit de L1 et L2(U), dont la position est constante, est incrémenté à chaque fois.
Cela revient donc à stocker le facteur W dans L1 et la puissance dans L2.
J'aurais pu placer W->L1(U) dans le Then/End précédent le while.


Si j'avais écrit quelque chose du genre X->L2(U), je n'aurais pas eu besoin de préparer la dimension de la liste juste avant.
En effet si la dimension est N, alors X->L2(N+1) fonctionne et modifie la dimension en plus de stocker.
Mais L2(U)+1->L2(U) consulte la liste avant de stocker.
Ainsi j'ai besoin de préparer la dimension de la liste à l'avance afin d'éviter un plantage.

----------------------
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 
 
monsaibert
Invité
Posté le : Ven 09 Mar 2012, 20:46   Citer 

confirme :

U+1->U
0->L2(U
End ce End est une "soupape", il bloque le For le temps que le While tourne sur un W donné . A chaque tour de While, 1+L2(U->L2(U augmente la puissance de W d'un cran.
Si A-1 est vrai For(W,3,A,2 passe à un autre W.

Si c'est bon on a tout vu de ce code?

  Haut de page Bas de page 
 
linkakro



Autorisation : Membre
Nb de messages : 3767
Inscrit le : Lun 19 Oct 2009, 21:25
Posté le : Sam 10 Mar 2012, 1:00   Citer 

Non, ce End est la fin du If:Then.
Il y a un End pour fermer le If, un autre pour fermer le While, et le dernier pour fermer le For.
Le While est déjà une "soupape" en lui-même car la calculatrice ne fait qu'une chose à la fois.
Le "If not(fPart(A/W" permet d'effectuer une action une seule fois par W valide alors que While recommence les mêmes actions tant que la condition est valide.
Tu sembles avoir compris le reste. happy.gif

Souviens toi que If A-B signifie If A=/=B, ça suffit largement.

S'il n'y a rien d'autre à expliquer c'est une bonne nouvelle. bigmouth.gif
Cela fait du bien de savoir que j'ai réussi à t'expliquer tout ça au bout du compte. (ce fut long !)
J'espère que tu sauras réutiliser des choses parmi tout ce que j'ai écrit malgré mon manque de pédagogie.

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



Publicité    



 
Poster un nouveau sujet Poster une réponse <<   Page: , 2,      >>





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