Forum de mathématiques - Bibm@th.net
Vous n'êtes pas identifié(e).
- Contributions : Récentes | Sans réponse
#226 01-10-2019 18:16:27
- LEG
- Membre
- Inscription : 19-09-2012
- Messages : 790
Re : Alignement de produits
Car regarde avec un alignement 11 et 13 et P=143 toutes les conditions sont réunies..ok
je refait le test : en inversant les valeurs de A0 et B :
1)
*** Début du programme ***
A0 = 11
B = 13
P = 143
P = 143
A = 11
B = 13
P = 429
A = 33
B = 13 c'est un alignement sûr ,
2) inversion de A et B
*** Début du programme ***
A0 = 13
B = 33
P = 429
P = 429
A = 13
B = 33
P = 1287
A = 39
B = 33
vérification alignement sûr !
on a bien A = 3 * B et B = 3 * A0 mais pas d'information véritable...car on peu très bien avoir A divisible par 5 , lors du deuxième test en inversant le résultat du premier test , et B divisible par 3 , voir : P divisible par 15....etc
mais ce qu'il en ressort c'est que lors du deuxième test avec l'inversion des deux valeurs A inverse B et vis versa du premier test , on a un alignement quasi certain...et Alors ???
sans avoir à faire tout une panoplie de test afin que B0 devienne à nouveau > A....etc vérifier un probable alignement......à suivre......?
Dernière modification par LEG (01-10-2019 20:46:26)
Hors ligne
#227 02-10-2019 11:03:08
- cosinuspax
- Membre
- Inscription : 23-02-2019
- Messages : 252
Re : Alignement de produits
Re, Yoshi : ton idée n'est pas mauvaise mais elle t'oblige à partager entre A et B, et de plus, comme je l'ai dit, on ne tient pas compte des sous-produits qui semblent générer des alignements probables. Reprends l'exemple : 103 x 397. Avec T = 9, aligné à priori avec 927 x 397, et aligné probable avec 309 x 1191 car 309 - 177 (S) = 132 (11 x 11 + 11). Or, 309 x 1191 est un sous-produit puisque T 9 est exprimé par 3 x 3. Donc il faut reprendre l'idée du programme (1) mais en l'accélérant avec le programme (2). Mon idée de multiplier A ou B par T n'est pas à mon sens (d'après les tests) génératrice de produits alignés probables (= quasi sûrs) ou alors une quantité infime. Cela dit, on se réserve la possibilité de changer notre fusil d'épaule. Pas de dogme !
Dernière modification par cosinuspax (02-10-2019 12:23:04)
Hors ligne
#228 02-10-2019 12:31:40
- cosinuspax
- Membre
- Inscription : 23-02-2019
- Messages : 252
Re : Alignement de produits
LEG, dans l'exemple en question, 35 - 5 = 30 ou 5 x 5 + 5, ce qui prouve que A est dans la suite (S = 5) et B également car 11 - 5 = 6 ou 2 x 2 + 2. Donc le produit est aligné probable (sûr). A doit être plus petit que B. Si A est dans la suite ça suffit pour que le produit soit aligné probable. Mais pas l'inverse. Si A est plus grand que B et dans la suite, il faut aussi que B soit dans la suite.
Hors ligne
#229 02-10-2019 13:22:05
- LEG
- Membre
- Inscription : 19-09-2012
- Messages : 790
Re : Alignement de produits
@cosinus
appelon un chat , un chat ok
A=7; B=11
d'où P =77 okR = 8, d'où L = r² + r = 72
et donc
S = P - L = 5d'après ta définition d'un alignement :
L < P ok ; A > S, ainsi que B > S
ce n'est pas un alignement probable, c'est un alignement ! ok ?Que vient faire : 35 - 5 = 30 dans le déroulement de cette première partie....? répond clairement .
et tu me répond :
LEG, dans l'exemple en question, 35 - 5 = 30 ou 5 x 5 + 5, ce qui prouve que A est dans la suite (S = 5) et B également car 11 - 5 = 6 ou 2 x 2 + 2.
S dans ta définition page 1, est clairement exprimé c'est la différence entre le produit P et L...point barre !
Ensuite ce S permet d 'utiliser des conditions que tu as définies pour : {P, A et B}
Qu'est ce que vient foutre Ta racine carrée de 6 , qui est la différence de B=11 moins S...?
Franchement A et B sont dans la suite que tu nomes S, puisque cette "suite " qui est une "différence", est obtenue à partir du produit de A0 et B... d'origine ...qui remplie les trois conditions d'un alignement Sûr et non probable.... OUI ou NON ?
A quoi sert ton (11 car : 6 = 2² +2 ], qui est Ta méthode pour calculer L à partir de la rac de P
et non à partir de de la rac de B - S...?
Tu n'as pas l'impression qu'il y a un problème dans ton raisonnement....?
Yoshi vient de te dire qu'après le premier résultat du programme ,on obtient A > B et qu'il envisage de remplacer A par B0, qui serait donc > A et qu'ensuite il inverserait à nouveau les valeurs lorsque B0 serra supérieur à A....etc ...etc
Et il t'a posé une question...oui ou non ?
A nouveau tu réponds à côté...car la question n'est pas de savoir si il partage ..., si il va à la pêche... mais si :
[" Mais, cosinuspax, est-ce que cela une chance de fonctionner ? i. e est-ce que j'ai une chance d'obtenir un résultat ?"]
Je lui est répondu en principe OUI , avec un exemple qui n'est pas tout a fait ce qu'il entrevoit de faire....
Je suppose que Yoshi: va reprendre B qui devient A0, et le A obtenu devient le B ; d'où il va multiplier ce nouveau A0, et vérifier les 3 conditions, mais lorsque l'on multiplie ce A0 par T , on repart de T =3 oui ou non ? et donc il en est de même pour P * T; puis calcul de L , de S est vérification de A0 > à S ainsi que B si les trois conditions sont ok print...sinon on continue...
D'où :
1) il est clair que l'on est plus dans les conditions de A et B deux facteurs premiers....!
2) Donc : qu'est ce que cela change par conséquent, en inversant le produit et vérifier les trois conditions...Réponse gain de temps....et programme simplifié...
Dernière modification par LEG (02-10-2019 14:20:34)
Hors ligne
#230 02-10-2019 16:00:53
- cosinuspax
- Membre
- Inscription : 23-02-2019
- Messages : 252
Re : Alignement de produits
Yoshi, je poste la version dont je t'ai parlé, qui tente de fusionner les programmes (1) et (2). Je ne sais si tout fonctionne, mais à la limite on y arrivera. Le tout est de voir si on a toujours des produits alignés probables. Tu remarqueras que j'élimine tous les T premiers. Seuls m'intéressent les produits issus de la factorisation de T. Ligne 33, on a A qui devient B si A > B, ce qui arrivera avec l'augmentation de T, quand h est un diviseur supérieur de T.
Input A
A0 = A
Input B
1 N = A x B
2 P = N
3 V = 1
4 e = - 1
5 i = i + 1 (i = 0)
6 Si i > 1, V = V + 2
7 Si e = - 1, T = V
8 Si V = 51, e = e + 1 et V = 7
9 Si e > - 1 et si V = 7, T = 51 x 9^e
10 Si T > 49 x 9^e, T = 9 x (9^e x V)
11 Si i > 1, P = N x T
12 R = sqrt entière de P
13 L = R^2 + R
14 Si L > P, aller à next i.
15 Si L < P, S = P - L
16 Si P = N, alors si P > S^2, si A >=S, si B >= S, aller à 19.
17 Sinon, si A ou B < S, aller à next i.
18 Si P > N, aller à 25.
19 A - S = C
20 Si C = 0 alors print P, A et B. STOP.
21 D = sqrt entière de C
22 F = D^2 + D + S
23 Si A = F alors print P, A et B. STOP.
24 Si A différent de F, aller à next i.
25 Si T est un nombre premier compris entre 3 et 47, aller à next i.
26 h = h + 2 (h = 1)
27 Si h > (T + 1) / 2, aller à next i.
28 Si T mod h = 0, alors A = A0 x h
29 Si T mod h différent de 0, aller à next h.
30 B = T / A
31 Si P > S^2, si A >= S, si B >= S, aller à 33 (aligné à priori).
32 Sinon, si A ou B < S, aller à next h.
33 Si A > B, alors A = B
34 A - S = C
35 Si C = 0 alors print P, A. STOP.
36 D = sqrt entière de C
37 F = D^2 + D + S
38 Si A = F alors print P, A. STOP (aligné probable).
39 Si A différent de F, aller à next h.
Dernière modification par cosinuspax (03-10-2019 16:02:30)
Hors ligne
#231 02-10-2019 16:29:32
- cosinuspax
- Membre
- Inscription : 23-02-2019
- Messages : 252
Re : Alignement de produits
Mon système de factorisation de T est trop lent. Pour les grands T, c'est la trottinette assurée. Il va falloir trouver mieux. Peut-être sera-ce suffisant pour se faire une idée.
Hors ligne
#232 03-10-2019 07:54:44
- cosinuspax
- Membre
- Inscription : 23-02-2019
- Messages : 252
Re : Alignement de produits
Salut Yoshi, que cela ne t'empêche pas de programmer ton idée d'alternance A x T - B x T. Mieux vaut deux idées qu'une. Il y a peut-être quand même une issue sans passer par les sous-produits.
Pour ma part, je cherche une méthode plus rapide de factorisation de T. C'est facile, car on connaît toujours les facteurs de T.
Dernière modification par cosinuspax (03-10-2019 09:52:45)
Hors ligne
#233 03-10-2019 08:53:50
- LEG
- Membre
- Inscription : 19-09-2012
- Messages : 790
Re : Alignement de produits
tu es sûr de ne pas confondre: factoriser T qui est une valeur arbitraire que tu rentres pour vérifier si P, A et B sont aligné suivant ta définition....Avec identifier ou factoriser un produit P aligné d'après ton ""idée""...et ou, de deviner si il est aligné....On peut toujours rêver.....
je te signal quand même qu'il y a des algorithmes performants pour factoriser de grands nombres ""probabiliste , ou , pas""....
Hors ligne
#234 03-10-2019 21:48:45
- cosinuspax
- Membre
- Inscription : 23-02-2019
- Messages : 252
Re : Alignement de produits
Dernière version. Normalement (quand tout marchera), ce programme doit donner des produits alignés probables sans être ralenti par la taille des nombres. J'ai conservé le système T mod h pour les T jusqu'à 49.
Q devient 3^k : c'est à dire qu'il faut transformer Q en une puissance de 3. Je te fais confiance pour ça.
Input A
A0 = A
Input B
1 N = A x B
2 P = N
3 V = 1
4 e = - 1
5 i = i + 1 (i = 0)
6 Si i > 1, V = V + 2
7 Si e = - 1, T = V
8 Si V = 51, e = e + 1 et V = 7
9 Si e > - 1 et si V = 7, T = 51 x 9^e
10 Si T > 49 x 9^e, T = 9 x (9^e x V)
11 Si i > 1, P = N x T
12 R = sqrt entière de P
13 L = R^2 + R
14 Si L > P, aller à next i.
15 Si L < P, S = P - L
16 Si P = N, alors si P > S^2, si A >=S, si B >= S, aller à 20.
17 Sinon, si A ou B < S, aller à next i.
18 Si P > N et si T < 63, aller à 26.
19 Si T >= 63, aller à 41.
20 A - S = C
21 Si C = 0 alors print P, A et B. STOP.
22 D = sqrt entière de C
23 F = D^2 + D + S
24 Si A = F alors print P, A et B. STOP.
25 Si A différent de F, aller à next i.
26 Si T est un nombre premier compris entre 3 et 47, aller à next i.
27 h = h + 2 (h = 1)
28 Si h > (T + 1) / 2, aller à next i.
29 Si T mod h = 0, alors A = A0 x h
30 Si T mod h différent de 0, aller à next h.
31 B = T / A
32 Si P > S^2, si A >= S, si B >= S, aller à 34 (aligné à priori).
33 Sinon, si A ou B < S, aller à next h.
34 Si A > B, alors A = B
35 A - S = C
36 Si C = 0 alors print P, A et B. STOP.
37 D = sqrt entière de C
38 F = D^2 + D + S
39 Si A = F alors print P, A et B. STOP (aligné probable).
40 Si A différent de F, aller à next h.
41 Q = T / V
42 Q = 3^k
43 h = h + 1 (h = - 1)
44 Si h > k, aller à 47
45 A = 3^h x A0
46 Si h <= k, aller à 31
47 h = h + 1 (h = - 1)
48 Si h > k, aller à next i
49 A = (3^h x V) x A0
50 Si h <= k, aller à 31
Dernière modification par cosinuspax (04-10-2019 15:39:33)
Hors ligne
#235 04-10-2019 09:25:10
- yoshi
- Modo Ferox
- Inscription : 20-11-2005
- Messages : 17 385
Re : Alignement de produits
Bonjour,
Ca ne va pas être simple et ça va prendre du temps.
Avec le style de programmation des années 70 aucun problème : on navigait à vue, on sautait des lignes et on se "branchait" sur des nos.
C'était une horreur sans nom.
C'est fini maintenant (depuis plus de 20 ans !), place à la programmation structurée donc évolutive...
On pense son programme avec un corps de programme principal et des sous-programmes dédiés qu'on appelle depuis différents points, qui exécutent les tâches qui leur sont assignées et cela fait le prog reprend immédiatement après le point d'appel.
Dans ce que tu as écrit, rien de tout ça !
Il va falloir que je démêle tout ça et conçoive des sous-programmes (ici des fonctions) et que je détermine leurs contenus et les branchements...
Cette fois, je ne peux pas le faire à l'écran et mentalement : il faut que je passe par la phase impression et usage de stylos de couleurs...
Essaie de tenir compte de ça à l'avenir !
@+
Hors ligne
#236 04-10-2019 10:43:44
- yoshi
- Modo Ferox
- Inscription : 20-11-2005
- Messages : 17 385
Re : Alignement de produits
Re,
Plusieurs questions
1. h est initialisé à -1 ou à 1 ?
Parce que
* ligne 27, je vois h= h+2 (h=1)
Pour faire h = h+2, il faut bien que h possède déjà une valeur ! Or, ce n'est pas le cas
* ligne 43, je vois h=h + 1 (h = - 1)
* ligne 47, je vois h = h + 1 (h = - 1)
2. Ligne 30, je vois : Si T mod h différent de 0, aller à next h
Ligne 40, je vois : Si A différent de F, aller à next h. Il y a 3 lignes on on cherche le h suivant. Laquelle ?
Il y a 3 lignes on on cherche le h suivant. Un next h différent pour L30 et L40 ? Où ? 27 ? 43 ? 47 ?
3. Ligne 42, je lis : Q devient 3^k. Ça veut dire quoi ?
Il vient d'où ce k ? Comment le calcules-tu à partir de la ligne 41 ?
4. Ligne 26 : Si T est un nombre premier compris entre 3 et 47. Inclus ? Les deux ?
@+
Hors ligne
#237 04-10-2019 15:38:14
- cosinuspax
- Membre
- Inscription : 23-02-2019
- Messages : 252
Re : Alignement de produits
Salut Yoshi, difficile pour moi de faire mieux, n'étant pas programmeur. Je fournis le squelette du programme, et non le corps. Jusque là, on s'en est pas trop mal tiré, pas de raison que ça ne suive pas.
Tes demandes :
Ligne 27, h est initialisé à 1 (donc 1 + 2 = 3 au premier passage). C'est comme le V = V + 2 de la ligne 6.
Ligne 43 et 47 c'est bien - 1 qui est la valeur initiale. Cela permet d'avoir - 1 + 1 = 0 au premier passage.
Ligne 30 : le h est le h de ligne 27 (c'est le h en cours, il ne peut pas être ailleurs).
Ligne 40 : le h est le h de ligne 43 (première boucle) puis de ligne 47 (deuxième boucle). Le renvoi est ligne 31, donc plus de lien avec le h de ligne 27.
Q devient 3^k : il faut convertir Q (qui est toujours 9^n) en 3^k. Exemple : Q = 729 = 3^6. En fait je devrais écrire : Q = 3^k.
Ligne 26 : oui, inclus.
Si tu préfères que je différencie les variables, dis-le moi. De tout façon NEXT h renvoie toujours au h en cours, à moins que je me sois planté quelque part ...
Hors ligne
#238 04-10-2019 19:34:31
- yoshi
- Modo Ferox
- Inscription : 20-11-2005
- Messages : 17 385
Re : Alignement de produits
Re,
Ligne 27, h est initialisé à 1 (donc 1 + 2 = 3 au premier passage). C'est comme le V = V + 2 de la ligne 6.
Ligne 43 et 47 c'est bien - 1 qui est la valeur initiale. Cela permet d'avoir - 1 + 1 = 0 au premier passage.
C'est bien ce que je craignais...
Pour la ligne 27 ok, je donne la valeur h = 1 en tout début de programme...
Ainsi, au démarrage h vaudra 1 et cette valeur initiale sera modifiée en ligne 27
Le problème se pose pour les lignes 43 et 47 : où indiquer l'initialisation h = -1 ?
il faut convertir Q (qui est toujours 9^n) en 3^k.
Certes, mais comme je souhaitais autant que possible éviter les tâtonnements...
Je me suis dit
je prends par exemple 3486784401 obtenu à partir de $9^{10}$
Mais pour le test, j'étais obligé de ne pas tenir compte dans les calculs que ce nombre était $9^{10}$, j'ai testé :
$3^k= 3486784401\;\Leftrightarrow\; \ln(3^k)=\ln(3486784401)\;\Leftrightarrow\; k\ln(3)=\ln(3486784401)\;\Leftrightarrow\;k=\dfrac{\ln(3486784401)}{\ln(3)}$ Ecart de 1.
J'ai donc fait les tests sur plusieurs dizaines de valeurs croissantes.
Et alors j'ai vu que de rares fois j'obtenais un entier, en fait un nombre ayant un chiffre après la virgule qui était 0, le reste du temps un réel pur...
J'ai essayé de contourner en prenant la partie entière du k obtenu, et régulièrement il y avait un écart de 1 sur l'exposant...
Mais je viens de trouver : dans les modules maths des langages de programmation, il existe une instruction qui arrondit systématiquement les nombres à virgules à l'entier supérieur.
Je viens donc de la tester : pour $9^n$ calculé pour n de 1 à 1019 (973 chiffres dans le derenier résultat), le k du $3^k$ correspondant est bon...
Ça, c'était un pb mineur, je pouvais le régler "bêtement" avec un calcul et une comparaison, soit dans le cas de $9^{1019}$ avec un k égal à 2018, soit 2018 élévations à une puissance et 2018 comparaisons avec Q... Mais ce n'était vraiment pas satisfaisant.
Jusque là, on s'en est pas trop mal tiré, pas de raison que ça ne suive pas.
C'est beau la confiance...
Mais vois-tu, la différence entre le programme précédent et celui ci est que dans le précédent, il y avait un seule "déviation" ce que tu appelles next i...
Là, il y a deux next h de plus, deux parce que l'un démarre de 1, l'autre de -1 et pour le moment, je ne sais pas où se situe le démarrage pour h=-1. Peux-tu rajouter une ligne pour l'initialisation de h à 0 et une autre pour l'initialisation de h à -1 ?
Ensuite il y a des sauts en lignes 20, 26, 31, 34, 41, 47...
Cela fait 8 déviations supplémentaires ! Une paille...
Après une paire d'heures passées dessus et quelques feuilles noircies, je ne te cache pas mon grand pessimisme...
@+
Hors ligne
#239 05-10-2019 09:28:48
- cosinuspax
- Membre
- Inscription : 23-02-2019
- Messages : 252
Re : Alignement de produits
Re, Si on a 9^n, on a normalement 3^2n ? (k = 2n) ? 9^10 = 3^20 ?
Pour éviter les sauts, il faut répéter des blocs entiers. Mais pourquoi pas ? Les fameuses "déviations" ont lieu pourtant chacune leur tour, il n'y a aucune simultanéité.
Je regarde pour les initialisations.
Dernière modification par cosinuspax (05-10-2019 10:37:33)
Hors ligne
#240 05-10-2019 10:32:58
- cosinuspax
- Membre
- Inscription : 23-02-2019
- Messages : 252
Re : Alignement de produits
Modification du bloc final (à partir de 41). Les sauts sont inévitables.
41 Q = T / V
42 Q = 3^k
43 m = - 1
44 m = m + 1
45 Si m > k, aller à 57
46 A = 3^m x A0
47 B = T / A
48 Si P > S^2, si A >= S, si B >= S, aller à 50 (aligné à priori).
49 Sinon, si A ou B < S, aller à next m.
50 Si A > B, alors A = B
51 A - S = C
52 Si C = 0 alors print P, A et B. STOP.
53 D = sqrt entière de C
54 F = D^2 + D + S
55 Si A = F alors print P, A et B. STOP (aligné probable).
56 Si A différent de F, aller à next m.
57 n = - 1
58 n = n + 1
59 Si n > k, aller à next i.
60 A = (3^n x V) x A0
61 B = T / A
62 Si P > S^2, si A >= S, si B >= S, aller à 64 (aligné à priori).
63 Sinon, si A ou B < S, aller à next n.
64 Si A > B, alors A = B
65 A - S = C
66 Si C = 0 alors print P, A et B. STOP.
67 D = sqrt entière de C
68 F = D^2 + D + S
69 Si A = F alors print P, A et B. STOP (aligné probable).
70 Si A différent de F, aller à next n.
Hors ligne
#241 05-10-2019 11:05:17
- LEG
- Membre
- Inscription : 19-09-2012
- Messages : 790
Re : Alignement de produits
Bonjour
il me semble qu'il y a des incohérences dans le déroulement des étape...:
26 Si T est un nombre premier compris entre 3 et 47, aller à next i. Et si il n'est pas premier, que fait le programme...?
46 Si h <= k, aller à 31 donc retourner à 31 , question : tu en viens de cette ligne 31, pour arriver à 46 ; donc le programme va tourner en rond ...Non ??? Ok , tu viens de modifier le programme....
donc
48 Si P > S^2, si A >= S, si B >= S, aller à 50 (aligné à priori).
sinon
49: si A ou B < S, aller à next m.
50 Si A > B, alors A = B tu veux dire que A se transforme en B0 et donc :
51: A - S = C veut dire 51: B0 - S = 0 alors print P, A et B. STOP.
et que la ligne 55 , on parle du A = B0 ??
alors ligne 53 et 54 est un doublon..... non ???
Dernière modification par LEG (05-10-2019 11:07:45)
Hors ligne
#242 05-10-2019 14:02:09
- yoshi
- Modo Ferox
- Inscription : 20-11-2005
- Messages : 17 385
Re : Alignement de produits
Re,
@cosinuspax
Si on a 9^n, on a normalement 3^2n ? (k = 2n) ? 9^10 = 3^20 ?
Certes, certes, sauf que Q est défini par T/V et non pas par 9^n puisque je ne connais ni le T, ni le V sous la forme d'une puissance, juste leurs valeurs brutes...
41 Q = T / V
42 Q = 3^k
Si tu sais que Q = 3^k alors à quoi sert la ligne 41 ?
Si tu calcules Q =T/V en ligne 41 comment trouves-tu le k de la ligne 42 ? Par magie ?...
Concernant les déviations.
Voilà comment ça doit fonctionner :
Sous-programme1(paramètres)
calculs avec les paramètres
Renvoi des résultats cherchés
Sous-programme2(paramètres)
calculs avec les paramètres
Renvoi des résultats cherchés
Programme principal
* ligne
* ligne
* Envoi des paramètres à traiter au sous-programme 1, 2... et récupération des résultats fournis et passage à ligne suivante
* Traitements des résultats (sur une ou plusieurs lignes)
* ligne
* ligne
* ligne
* ligne
* Envoi de paramètres au sous-programme 1, 2... et récupération des résultats fournis et passage à ligne suivante
* Traitements des résultats (sur une ou plusieurs lignes)
....
Les déviations sont des sous-programmes auxquels on peut envoyer des paramètres différents mais de même nature depuis différents points du programme principal.
Tu vas faire un petit effort de compréhension : voilà le sous programme de ta version 2, que tu appelais next i.
Je vais le commenter :
def calculs_de_base(V,e,P,T,N): Les paramètres que j'envoie sont : valeurs de V,e, P, T et N
V+=2
if e == - 1:
T = V
if V == 51:
e+=1
V = 7
if e>-1 and V==7:
T=51*9**e
if T>49*9**e:
T = 9**(e+1)*V
P=N*T
R = racine_entiere(P) j'envoie le paramètre P au sous programme racine_entière qui me renvoie la valeur de R
L=R**2+R
return e,P,V,L,R,T Pour pouvoir réutiliser ultérieurement les valeurs de e,P,V,L,R et T y compris si certains n'ont pas changé
A chaque fois que tu écrivais next i, moi j'écrivais :
e,P,V,L,R,T = calculs_de_base(V,e,P,T,N)
C'est une forme de factorisation
Pour ta version 2 totalement fonctionnelle, tu as bien vu que ton i dont je me servais pas valait 380 : cela signifie qu'on avait envoyé 380 fois les valeurs V,e,P,T et N, lequel a envoyé 380 fois la valeur de P à sous programme racine entière (qui a rendu 380= fois la valeur de cette racine entière) et calculs_de_base (le bloc à partir de ton i=i+1) a renvoyé pour récupération 380 fois les valeurs de e,P,V,L,R et T.
L'intérêt des sous-programmes racine_entière et calculs_de_base c'est qu'ils sont isolé du programme principal par 2 portes : une entrée (la ligne def .... et une sortie return ....
Tant que je ne leur envoie pas de paramètres en ouvrant la porte, c'est comme s'ils n'existaient pas : leur demander expressément de travailler en utilisant leur nom est le seul moyen de les utiliser...
Des sous-programmes, je peux en avoir autant que je veux, le problème n'est pas là...
Les déviations, tu peux en écrire autant tu veux, ce n'est pas le problème : mais là, toi tu fais un saut par dessus un saut par dessus par dessus...
Tu me réponds : j'peux pas faire autrement...
Bien sûr que si : c'est un problème de conception, de façon de penser !
Je ne dis pas que c'est facile...
Moi, je ne peux que très difficilement le faire à ta place : je ne sais rien des idées qui-sous-tendent tes programmes, quel rôle joue chacune de tes variables.
Je ne peux donc jouer que sur la forme...
@+
Hors ligne
#243 05-10-2019 17:55:02
- cosinuspax
- Membre
- Inscription : 23-02-2019
- Messages : 252
Re : Alignement de produits
As-tu regardé la modif #240 ? C'est pas mieux ?
Hors ligne
#244 05-10-2019 19:54:43
- yoshi
- Modo Ferox
- Inscription : 20-11-2005
- Messages : 17 385
Re : Alignement de produits
Bosoir,
As-tu testé ligne après ligne, hein, comme si t'étais le programme des années 70 et pas cosinuspax qui anticipe les résultats ?...
J'ai plusieurs remarques, je n'ai pas testé, je me suis battu avec les dernières lignes de code du prog sur le nombre de David Champer et son option 3 ça m'a pris quelques heures...
Je vais encore examiner ton prog et si je ne vois rien, il m'est venu une idée : j'ai encore mon premier ordinateur (il fonctionne), y est implanté le langage qui permettait de travailler avec des nos de ligne et de sauter dans tous les sens à coups de GOTO 43 (par ex).
Je ferai fonctionner ton programme avec ça : ça me permettrait de suivre les opérations pas à pas, quand même plus vite qu'à la main.
Tant que je n'ai une idée des sous-programmes que je peux construire, je ne toucherai à la programmation puisque ce sera inutile...
43 m = - 1
44 m = m + 1
45 Si m > k, aller à 57
J'ai vérifié :
Il n'y a aucun saut vers la ligne 44 depuis les lignes précédentes
Par conséquent le seul moyen d'arriver en 43 est de venir de 42...
On donc m=-1
On passe ensuite à 44 on a alors m=0
Donc le test suivant
45 si m>k aller en 57
n'a de sens la première fois que si k vaut -1
Depuis les lignes suivantes, il y a deux possibilités de saut vers 44, ensuite c'est fini,
Mais à chacun de tes next i, puisque de de ton départ ligne 1 jusqu'à 42, le programme ne fait aucun saut au delà de 43, on repassera donc par 43, m passera à -1 puis à 0...
Normal ?
Apparemment à vue de nez, la problématique sera la même pour n...
Et toi, as-tu fait l'effort de comprendre comment fonctionne un sous-programme ?
@+
Hors ligne
#245 06-10-2019 09:56:42
- cosinuspax
- Membre
- Inscription : 23-02-2019
- Messages : 252
Re : Alignement de produits
k est maintenant défini par la boucle j.
41 Q = T / V
42 W = 3
43 j = 1
44 Tant que W < Q alors W = W x 3
45 j = j + 1
46 Si W = Q, alors k = j
47 m = - 1
48 m = m + 1
49 Si m > k, aller à 61
50 A = 3^m x A0
51 B = T / A
52 Si P > S^2, si A >= S, si B >= S, aller à 54 (aligné à priori).
53 Sinon, si A ou B < S, aller à next m (48).
54 Si A > B, alors A = B
55 A - S = C
56 Si C = 0 alors print P, A et B. STOP.
57 D = sqrt entière de C
58 F = D^2 + D + S
59 Si A = F alors print P, A et B. STOP (aligné probable).
60 Si A différent de F, aller à next m (48).
61 n = - 1
62 n = n + 1
63 Si n > k, aller à next i.
64 A = (3^n x V) x A0
65 B = T / A
66 Si P > S^2, si A >= S, si B >= S, aller à 68 (aligné à priori).
67 Sinon, si A ou B < S, aller à next n (62).
68 Si A > B, alors A = B
69 A - S = C
70 Si C = 0 alors print P, A et B. STOP.
71 D = sqrt entière de C
72 F = D^2 + D + S
73 Si A = F alors print P, A et B. STOP (aligné probable).
74 Si A différent de F, aller à next n (62).
Hors ligne
#246 06-10-2019 09:57:53
- LEG
- Membre
- Inscription : 19-09-2012
- Messages : 790
Re : Alignement de produits
@Cosinus:
répond lui point par point au lieu de répondre à côté :
1) dixit @Yoshi:
J'ai vérifié :
Il n'y a aucun saut vers la ligne 44 depuis les lignes précédentes
Par conséquent le seul moyen d'arriver en 43 est de venir de 42...
OUI ou NON ?
2)
J'ai vérifié :
On a donc m=-1
On passe ensuite à 44 on a alors m=0
OUI ou NON ?
3)
Donc le test suivant:
45 si m>k aller en 57
n'a de sens la première fois que si k vaut -1
OUI ou NON ? ET c'est là que tu dois t'expliquer avec ton exemple...de k=6 on a 3^K, et m=7
que doit faire le programme ...? il change de boucle ?
4)
Depuis les lignes suivantes, il y a deux possibilités de saut vers 44, ensuite c'est fini,
OUI ou NON ?
5)
Mais à chacun de tes next i, puisque de de ton départ ligne 1 jusqu'à 42, le programme ne fait aucun saut au delà de 43, on repassera donc par 43, m passera à -1 puis à 0...
EST-CE NORMAL ?,
OUI ou NON ?
6) tu peux expliquer pourquoi ("Normalement")...?
Normalement, à 56, on va au m suivant, on ne revient pas à 43, mais à 44 (m en cours), et k est toujours égal à 6 dans notre exemple.
7) oublie ta puissance de 9 qu'il a parfaitement compris...
8) Tu n'as pas l'impression de pousser un peu loin ....si tu n'as pas envie de comprendre ses lignes de programmes , et ou, de sous programme c'est ton problème ! et non pas à lui de te refaire un programme ! alors pose les bonnes questions sur ses lignes de programmes que tu ne comprends pas , ou : qu'est-ce quelles doivent faire : Et si il le faut en relisant les instructions du programme V2 page 8, pour t'en servir d'exemple .....!
["je n'y connaît strictement rien en programmation , le peu que je sais, c'est lui qui me l'a appris en faisant l'effort de lui demander ce que faisait tel ou tel ligne de programme, par rapport à mes algorithmes...Comment crois tu que j'ai pu corriger l'oublie de la ligne 5 de votre programme V2 page 8....afin que je puisse moi aussi faire des tests...."]
Par exemple que devrait faire le sous programme ou le programme à la question 3)
Hors ligne
#247 06-10-2019 10:12:11
- cosinuspax
- Membre
- Inscription : 23-02-2019
- Messages : 252
Re : Alignement de produits
Le principe : je calcule tous les A0 possibles en les multipliant par chaque facteur de T. Par ex, si k = 6 (729) et V = 19 on décompose le produit 3^k x 19 en 12 sous-produits.
3^0 x A0
3^1 x A0
3^2 x A0
3^3 x A0
3^4 x A0
3^5 x A0
3^6 x A0
puis :
3^0 x V x A0
3^1 x V x A0
3^2 x V x A0
3^3 x V x A0
3^4 x V x A0
3^5 x V x A0
3^6 x V x A0
On calcule B à chaque fois (B = T/A) et on vérifie l'alignement à priori. Si non, on passe au produit suivant. Si oui, on passe au test de l'alignement probable. Si oui, c'est fini, sinon on passe au produit suivant.
Hors ligne
#248 06-10-2019 10:14:21
- cosinuspax
- Membre
- Inscription : 23-02-2019
- Messages : 252
Re : Alignement de produits
LEG tu commences à me bassiner.
Hors ligne
#249 06-10-2019 10:34:14
- LEG
- Membre
- Inscription : 19-09-2012
- Messages : 790
Re : Alignement de produits
@cosinus : reste poli s'il te plait, je suis là aussi , pour participer et j'ai bien compris que pour chaque produit calculé le programme test si il est aligné mais le problème n'est pas là, il est dans le déroulement des passages et des renvois...Ex:
tu ne vois pas qu'il y a une incohérence là dedans sauf erreur de ma part:
54 Si A > B, alors A = B
55 A - S = C
56 Si C = 0 alors print P, A et B. STOP.
57 D = sqrt entière de C
58 F = D^2 + D + S
59 Si A = F alors print P, A et B. STOP (aligné probable).
60 Si A différent de F, aller à next m (48).
c'est donc un sous programme ...?
1) : 54 Si A > B , donc A devient B0 oui ou non ?
2) : 55 B0 - S = C
3) : 56 Et si B0 - S = 0 alors print P, A et B. STOP. ("le A > B et le B ?? "]
sinon :
4) : $D=\sqrt{C}$ ou encore $D=\sqrt{B0 - S}$
5) : 58 F= D² + D + S ....Donc si F existe, c'est que B0 - S est différent de 0 oui ou non
6) : 59 si B0 = F , donc si B0 - S est différent de 0 .....tu fais quand même : print P, A et B. STOP
uniquement si $B0 - F$ = 0 alors print P, A et B. STOP donc cela fait deux conditions pour faire print ....avec l'égalité 3) ligne 56 ....oui ou non?
d'où :
7) : 60 si $B0 - F \not=0$ aller à next m (48) là, Ok .....
or si le point 3) ligne 56 existe, c'est bien différent du point 5) ligne 58 ...
d'où sauf erreur ....de ma part...tu aurais deux conditions pour arrêter ligne 56 et 59 ....?
Mais pour avoir B0 = F , si $B0 - S \not=0$ c'est possible ? et qu'est ce que cela apporte....dans ta définition d'alignement ...?
Dernière modification par LEG (06-10-2019 14:30:49)
Hors ligne
#250 06-10-2019 10:39:25
- cosinuspax
- Membre
- Inscription : 23-02-2019
- Messages : 252
Re : Alignement de produits
Yoshi : rassure-toi, je ne suis pas rétif à la programmation, mais la mise au point d'un algo simple me demande déjà pas mal d'efforts !
Hors ligne







