Bibm@th

Forum de mathématiques - Bibm@th.net

Bienvenue dans les forums du site BibM@th, des forums où on dit Bonjour (Bonsoir), Merci, S'il vous plaît...

Vous n'êtes pas identifié(e).

#151 23-09-2019 10:54:16

yoshi
Modo Ferox
Inscription : 20-11-2005
Messages : 17 385

Re : Alignement de produits

Re,


Les réponses des essais sont en #150
-----------------------------------------
Quelques remarques...
Tu n'arrives pas à te faire à l'indentation ?
Je ne vois qu'une explication : tu n'as pas de vision claire de ce qu'est censé faire ton pseudo-code, tu n'en suis pas "aveuglément" le déroulement ligne par ligne, à la main.
C'est le b-a-ba de tout programmeur, on commence comme ce que tu fais, avec crayon/papier et si on n'indente pas on délimite clairement les blocs...
Imagine le "foutoir" sinon avec rien que 500 lignes !
La programmation est une école de rigueur, de précision et d'attention peu commune : une des premières recommandations faites aux débutants est : fais-toi une raison, il est très très rare qu'un programme fonctionne du premier coup !
Cela dit, j'admire ta ténacité et ton ingéniosité !
Il va bien falloir que j'aille voir exactement ce que sont des alignements de produits !!
Tu te mets à Python quand ? ;:-))
Si je lis ce bloc :

i = i + 1 (i = 0)
Si i > 1, V = V + 2
Si V = 51, e = e + 1 et V = 7
Si e = - 1, T = V
Si e > - 1, si V = 7, T = 51 x 9^e
Si T > 49 x 9^e, T = 9 x (9^e x V)
Si i > 1, P = N x T

R = sqrt entière de P
L = R^2 + R

1. Je présume que le (i=0) signifie qu'avant d'arriver sur cette ligne i vaut 0.
2. Donc on a :
    P = N
    V = 1
    e = - 1
    i=0                              valeur au lancement
    i = i + 1                       i au tout début vaut maintenant 1.
 
   Si i > 1, V = V + 2    --> Cette condition peut sauter à condition de démarrer V non pas à 1 mais à -1.
   Si V = 51, e = e + 1 et V = 7
   Si e = - 1, T = V
   Si e > - 1, si V = 7, T = 51 x 9^e
   Si T > 49 x 9^e, T = 9 x (9^e x V)               -->   T = 9 x (9^e x V)  c'est  $T = 9^{e+1}\times V$
   Si i > 1, P = N x T                                       -->  Ici la condition peut sauter  à condition que chaque next i (dans
                                                                            la suite) soit précédé de P=N*T et parce que dans ces quelques
                                                                            lignes, il n'y aucun  test sur la valeur de ladite variable P
   R = sqrt entière de P
   L = R^2 + R

Moyennant quoi j'ai écrit:


#!/usr/bin/env python
# coding: utf-8 -*-

from math import sqrt
from time import time


def racine_entiere(n):
    """ Méthode de Héron"""  
    n_str=str(n)
    ln_str=len(n_str)
    if ln_str<11:    
        return int(sqrt(n))  
    ln_utile=(ln_str-10)//2
    n_coupe =n//10**(ln_str-10)
    uu=int(sqrt(n_coupe))
    u= int(uu*10**ln_utile)
    u0=1
    while not u0==u:
        u0=u
        u=(u**2+n)//(2*u)
    return u

def calculs_de_base(V,e,P,T):
    V+=2
    if V == 51:
        e+=1
        V = 7
    if e == - 1:
        T = V
    else:
         if V==7:
             T=51*9**e
    if T>49*9**e:
        T = 9**(e+1)*V
    R = racine_entiere(P)
    L=R**2+R
    return e,V,L,R,T

def titre():
    print("\n")
    print("                *************************************************")
    print("                *      Alignements progressif de produits       *")
    print("                *             Idée : cosinuspax                 *")  
    print("                *                    v.2                        *")
    print("                *************************************************","\n\n")
   

debut=time()
titre()

A = 73
B = 3692347
N=A*B
i,e,V,T=0,-1,-1,0
print ("A =",A)
print ("B =",B)
print ("P =",N,"\n")
 

arret,P=0,N
print ("          *** Début du programme ***","\n")
while not arret:
    e,V,L,R,T= calculs_de_base(V,e,P,T)
    while True:
        if L>P:
            P=N*T
            break
        elif L<P :
            S=P-L
        if P==N:
            if P>S**2:
                if  A>=S and B>=S:
                    print ("P =",P)
                    print("  A =",A)
                    print("  B =",B)
                    arret =1
                    break
                elif A<S or B<S:
                    P=N*T
                    break
        A*=T
        if P>S**2:
            if A>=S and B>=S:
                print ("P =",P)
                print("  A =",A)
                print("  B =",B,"\n")
                arret=1
                break
        elif A<S or B <S:
            P=N*T
            break

print("                    *******************","\n")
tps=round(time()-debut,2)
print ("\n","Temps écoulé :",tps, "s", end=" ")
mins, sec=divmod(tps,60)
print ("soit :", mins,"min ",sec,"s")
 

J'ai 2 fonctions racine_entière et calculs de base...
Quand tu écris alors next i, on faisait comme ça, il y a 40 ans en BASIC, on se branchait sur un n° de ligne avec l'instruction GOTO : GOTO 160 par ex...
Puis la numérotation des lignes à disparu, on ne branchait plus sur des nos de lignes mais sur des labels, Bidule étant un label, on écrivait GOTO Bidule (on fait encore ça des calculettes). Mais cela obligeait à savoir où se terminait le Label et où il se terminait...

Donc on créait des sous-programmes qu'on désignait par un nom et qui avaient une fin marquée. On "appelait" le sous-programme et, rencontrant sa fin, il revenait immédiatement après l'endroit d'où il avait été appelé...

Les fonctions en Python marchent selon le même principe, sauf que tu dois lui passer en paramètres les valeurs des variables avec lesquelles elle doit calculer et qu'à la fin elle te renvoie ce que tu veux récupérer, à charge pour toi de ne pas oublier
1. de les renvoyer (c'est le return) au commanditaire
2. de faire en sorte que le commanditaire les récupère  dans l'ordre exact du renvoi...

La fonction racine entière est basée sur la méthode de calcul de la racine carrée de Héron qui va à une vitesse phénoménale en une vingtaine d'itérations, j'obtiens 20000 décimales pour $\sqrt 5$ : je l'ai adaptée pour me limiter aux racines entières ce qui m'oblige à définir une valeur de départ "raisonnable" pour la racine carrée, sinon le résultat est faux...
Le calcul proprement dit est ici :

u0=1
while not u0==u:
      u0=u
      u=(u**2+n)//(2*u)

Tant que uo n'est pas égal à u faire :
       u0=u  --> on stocke la valeur de u en cours
       $u=(u^2+n)$//$(2\times u)$--> on modifie cette valeur de u
return u                  et c'est là qu'est renvoyée la valeur de u à la sortie de la boucle

Indentation !!! Si le return n'est pas alignée avec le Tant que mais sous le u, il est dans la boucle et la boucle ne fait qu'un tour et renvoie la première valeur modifiée. Et on demande, au début pourquoi ce n'est pas le bon résultat...

N-B :
le // est  le symbole quotient euclidien  59//25 = 2,  alors  que 59/25 =2,36

@+

Dernière modification par yoshi (23-09-2019 19:14:59)

Hors ligne

#152 24-09-2019 09:21:15

cosinuspax
Membre
Inscription : 23-02-2019
Messages : 252

Re : Alignement de produits

Bonjour Yoshi,

Même problème. Je prends l'exemple 1 : 29 x 71 = 2059.

L > P donc next i. P = N x T donc 2059 x 3 = 6177, L < P donc A x T = 87 donc et non 145. Pour trouver 145 il faut repasser par next i. Avec cette version c'est impossible.
Mais je comprends que mon programme puisse poser un problème (n'étant pas familier de l'informatique).

Dernière modification par cosinuspax (24-09-2019 09:24:26)

Hors ligne

#153 24-09-2019 09:33:42

cosinuspax
Membre
Inscription : 23-02-2019
Messages : 252

Re : Alignement de produits

Tu vois, en refaisant le parcours (comme tu dis), ligne par ligne, on arrive bien à A x T = 87 et non 145 (si A et B > S comme c'est le cas). Je ne procède pas la tête en l'air. La première version ne collait pas et ça s'expliquait : le programme revenait à next i après avoir fait P = N x T. Dans la nouvelle version ça n'est plus possible.

Hors ligne

#154 24-09-2019 10:11:40

cosinuspax
Membre
Inscription : 23-02-2019
Messages : 252

Re : Alignement de produits

Attention: 9 ^ e + 1 ne permet pas d'avoir 9 ^ 0 = 1. En effet, comme e = e + 1 quand V = 51, il ne peut plus être égal = - 1 après ça. Je numérote chaque instruction du pseudo code (ça je peux faire, sinon pour moi Python c'est du chinois (!), mais j'admire aussi ta sagacité !).

Hors ligne

#155 24-09-2019 10:51:10

yoshi
Modo Ferox
Inscription : 20-11-2005
Messages : 17 385

Re : Alignement de produits

Re,

9 ^ e + 1 ne permet pas d'avoir 9 ^ 0 = 1. En effet, comme e = e + 1 quand V = 51, il ne peut plus être égal = - 1

Alors là, tu es en train de me dire que 9 x (9^e x V) $\neq$ 9^(e+1) x V ???
Que la multiplication n'est plus associative ?
Que $ a^m \times a^n \neq a^{m+n}$ ?

Calculs de base faits en Python :
>> e=0
>> V=3
>> 9*(9**e*V)
45
>> 9*(e+1)*V
45

Et, preuve ultime, j'utilise strictement ton écriture et je remets  9 x (9 ^e x V). Résultat inchangé :

A = 29
B = 71
P = 2059

          *** Début du programme ***

P = 6177
  A = 145
  B = 71

                    *******************


 Temps écoulé : 0.09 s soit : 0.0 min  0.09 s
 

Donc le problème n'est pas là...
écrire $9^{e+1}$ ce n'est pas modifier e, c'est juste calculer l'exposant de 9 en prenant la valeur de e et en lui ajoutant 1
Python :

>>> e=-1
>>> 9**(e+1)
1
>>> e
-1
>>>

Tu vois bien que le e n'a pas été changé...

J'ai ajouté l'impression de résultats partiels au début :il faut que je voie pourquoi j'obtiens quelque chose d'inattendu...

@+

Hors ligne

#156 24-09-2019 15:58:06

cosinuspax
Membre
Inscription : 23-02-2019
Messages : 252

Re : Alignement de produits

OK pour les expressions avec 9, j'ai amalgamé. Mais cela n'empêche pas : si e = 0 et V = 3 le résultat donne 27 et non 45 ou alors j'arrête les maths.

9 x (e + 1) x V = 27

Ta machine n'est pas en train de confondre 3 et 5 ?

Hors ligne

#157 24-09-2019 16:45:19

yoshi
Modo Ferox
Inscription : 20-11-2005
Messages : 17 385

Re : Alignement de produits

Re,


Mais cela n'empêche pas : si e = 0 et V = 3 le résultat donne 27 et non 45 ou alors j'arrête les maths.

Réponse du Berger à la Bergère :
Mais cela n'empêche pas non plus  que si x et ^ c'est la même opération alors j'arrête les maths
Une machine, un logiciel calcule juste ; résultat erroné <==> erreur humaine
e=0,  9^(e+1) \times V  pour V=3 vaut 27
et
e=0,  9 \times (9^e \times V)  pour V=3 vaut 27 aussi...

Je sais où est le problème : je suis en avance d'un tour sur le travail à la main.
Solution de facilité : rétablir le compteur i...
Je n'y tiens pas, parce que je pense que ce serait du temps perdu (je pense que le tour d'avance vient d'autre chose), alors je cherche très exactement comment ne pas l'utiliser : j'ai dû porter un jugement incorrect à un moment donné...
Mais je vais trouver !
Je vais te dire, il y a plus de 20 ans j'ai écrit un logiciel de conjugaison complet, et je me suis refusé à poser la question (après l'entrée du verbe) : de quel groupe est-il ?
Alors, je me suis acharné 3 mois et j'ai fini par trouver une astuce, sans dictionnaire de verbes intégré, permettant au logiciel (en une douzaine de lignes) de déterminer sans autre entrée que ledit verbe, si, terminé en "ir", il est du 2e ou du 3e groupe...
Alors, dans notre cas, la solution est une question de minutes...

Après on verra si mon interprétation de kyrielle de si vers la fin est correcte : j'ai déjà posé la question (restée sans réponse), donc pour l'instant ceci passe au 2nd plan...

@+

Dernière modification par yoshi (24-09-2019 18:02:07)

Hors ligne

#158 24-09-2019 19:18:11

cosinuspax
Membre
Inscription : 23-02-2019
Messages : 252

Re : Alignement de produits

On est arrivé au bout de la première phase, on arrivera au bout de la deuxième. C'est effectivement un petit programme très simple (comparé à ton programme de conjugaison), mais son bon fonctionnement ouvre pour moi certaines portes arithmétiques.
Et je suis certain que tes supers pouvoirs de programmeur nous permettront d'aller au bout de la troisième phase.

Dernière modification par cosinuspax (24-09-2019 21:22:43)

Hors ligne

#159 24-09-2019 20:23:26

yoshi
Modo Ferox
Inscription : 20-11-2005
Messages : 17 385

Re : Alignement de produits

Re,

Problème réglé : erreur de jugement corrigée... sans compteur i !
Je doute que tu sois satisfait :
Essai1:


                *************************************************
                *      Alignements progressif de produits       *
                *             Idée : cosinuspax                 *
                *                    v.2                        *
                *************************************************


A = 29
B = 71
P = 2059

          *** Début du programme ***

2059
2059
P = 6177
  A = 87
  B = 71

                    *******************

 Temps écoulé : 0.06 s soit : 0.0 min  0.06 s

 

Essai2 :


                *************************************************
                *      Alignements progressif de produits       *
                *             Idée : cosinuspax                 *
                *                    v.2                        *
                *************************************************


A = 73
B = 3692347
P = 269541331

          *** Début du programme ***

P = 3504037303.0
  A = 160381.0
  B = 3692347

                    *******************

 Temps écoulé : 0.05 s soit : 0.0 min  0.05 s
 

Moi non plus : A  et sont décimaux
à cause de cette ligne


         if V==7:
             T=51*9**e

c i dessus V et T en sortie de programme valent V=13 et T=13.0.
Pourquoi T décimal ?
si e=-1  et V=7  alors T=51 x 1/9
Il faut que je teste que c'est bien ça (demain !)...

pour la suite après A= A x T
Veux-tu bien me dire si ça, cf post #144, c'est correct :


Si P = N alors :
          Si P>S^2 alors :
                  Si A >=S, ET si B >= S   alors :
                           print P, A et B
                  Sinon si A<S  ou B <S alors :
                           Stop
A=A*T
Si P>S^2 alors :
          Si A >=S, ET si B >= S   alors :
                  print P, A et B
Si A<S  ou B <S alors :
          Stop

Si tu n'es pas à l'aise avec l'indentation, j'espère que tu en comprends le principe...

@+

Hors ligne

#160 24-09-2019 21:26:50

cosinuspax
Membre
Inscription : 23-02-2019
Messages : 252

Re : Alignement de produits

Input 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, alors V = V + 2
7 Si e = - 1, alors T = V
8 Si V = 51, alors e = e + 1 et V = 7
9 Si e > - 1 et si V = 7, alors T = 51 x 9^e
10 Si T > 49 x 9^e, alors T = 9 x (9^e x V)
11 Si i > 1, alors P = N x T

12 R = sqrt entière de P
13 L = R^2 + R
14 Si L > P, alors aller à next i.
15 Si L < P, alors S = P - L
16 Si P = N, alors si P > S^2, si A >=S, si B > S, print P, A et B. STOP.
17 Sinon, si A ou B < S, alors aller à next i.

18 A = A x T
19 Si P > S^2, si A >= S, si B >= S, alors print P, A et B. STOP.
20 Si A ou B < S, alors aller à next i.

Dernière modification par cosinuspax (25-09-2019 10:11:44)

Hors ligne

#161 24-09-2019 21:40:38

cosinuspax
Membre
Inscription : 23-02-2019
Messages : 252

Re : Alignement de produits

J'ai transféré le programme.

Ligne 9 : si e > - 1 ET si V = 7 alors T = 51 x 9 ^e

et non: si e = - 1

e = - 1 uniquement quand V est inférieur à 51 (de 1 à 49). Après, quand V arrive à 51, e passe à 0 (ligne 8 : si V = 51, alors e = e + 1 et V = 7).
Si tu abordes la ligne 9 avec e = - 1 tu as forcément des décimaux. Tu dois l'aborder avec e = 0. Si ça ne marche pas ça viendra de moi. Il faudra que je revois les lignes 7 à 10. Sinon pour le départ c'est OK, on a bien T = 3 pour N et pour A.

Dernière modification par cosinuspax (24-09-2019 21:53:38)

Hors ligne

#162 24-09-2019 21:50:01

cosinuspax
Membre
Inscription : 23-02-2019
Messages : 252

Re : Alignement de produits

De toute façon en ligne 8 tu dois avoir e = 0 (e = - 1 + 1). J'ai interverti lignes 7 et 8. C'est plus clair.

Dernière modification par cosinuspax (24-09-2019 21:50:46)

Hors ligne

#163 25-09-2019 07:35:04

yoshi
Modo Ferox
Inscription : 20-11-2005
Messages : 17 385

Re : Alignement de produits

Salut,

Pas de changements


A = 73
B = 3692347
P = 269541331

          *** Début du programme ***

e = -1 V = 1 T = 1
e = -1 V = 3 T = 3
e = -1 V = 5 T = 5
e = -1 V = 7 T = 7.0
e = -1 V = 9 T = 9.0
e = -1 V = 11 T = 11.0
e = -1 V = 13 T = 13.0
P = 3504037303.0
  A = 160381.0
  B = 3692347

@+

                    *******************


 Temps écoulé : 0.16 s soit : 0.0 min  0.16 st tu peux voir que le pb se produit lorsque V=7 T devient décimal et e vaut encore -1 : V n'est pas encore arrivé à 51 pour changer e...

Hors ligne

#164 25-09-2019 09:02:11

cosinuspax
Membre
Inscription : 23-02-2019
Messages : 252

Re : Alignement de produits

Salut, intéressant. Quel bazar !  Il va falloir procéder autrement. C'est reparti.
Est-ce que ça ne viendrait pas de là ?

9 Si e > - 1 et si V = 7, alors T = 51 x 9^e

Si e est SUPERIEUR à - 1 et non EGAL à - 1. Parce que si e = - 1 ça donne effectivement des décimaux à partir de 7 puisque e = - 1 par définition. Si e > 1 cela veut dire que le programme a attendu que e = e + 1 = 0 (ligne 8).
Donc apparemment la machine ne tient pas compte de la ligne 8.

Dernière modification par cosinuspax (25-09-2019 09:19:17)

Hors ligne

#165 25-09-2019 10:22:02

yoshi
Modo Ferox
Inscription : 20-11-2005
Messages : 17 385

Re : Alignement de produits

Salut,


Faut pas jeter le bébé avec l'eau du bain... A priori, tu n'as pas quoi que ce soit à refaire pour l'instent.

Explications de texte...
J'ai rétabli ton compte-tours i, pour que tu voies mieux :

i = 1 e = -1 V = 1 T = 1
i = 2 e = -1 V = 3 T = 3
i = 3 e = -1 V = 5 T = 5
i = 4 e = -1 V = 7 T = 7.0
i = 5 e = -1 V = 9 T = 9.0
i = 6 e = -1 V = 11 T = 11.0
i = 7 e = -1 V = 13 T = 13.0

P = 3504037303.0
  A = 160381.0
  B = 3692347
 

Est-ce que ça ne viendrait pas de là ?

9 Si e > - 1 et si V = 7, alors T = 51 x 9^e

C'est ce que je te dis depuis le début...
C'est bien beau d'écrire :
if e >-1...
Mais il faut que tu poses la question  : quand e>-1 ?

La réponse est sur ta ligne 8 :
8 Si V = 51, alors e = e + 1 et V = 7
Pour que e passe de  -1 à 0 il faut attendre que V=51.
Or, si tu examines les résultats fournis, tu constateras que le problème se pose dès que V=7 ! On est loin de 51...

Pourquoi V=7 ?
Début du 4e tour i =4
On a toujours e=-1 et T et V valent encore 5
ligne 6  :  V=V+2=7
ligne 7  :  Si e = - 1 alors T = V, donc  T=7 entier
.....
Ligne 10 :  T>49/9 ?   C à d  :  7> 49/9  ? OUI  ! (49/9 = 5,444444)
Donc on recalcule T :
$T= 9 \times (9^{-1}\times V)=9/9 \times V = 1.0 \times V =7.0$...


Tu as ergoté sur sur mon $9^{e+1}\times V$...
Et pourtant, je viens de constater que suite à cela j'avais remis cette horreur T=9 x (9^e x V) pour les besoins du clou que je voulais enfoncer...
D'un seul coup, j'ai pris conscience  que
- Sans parenthèses, $T = 9 x\times 9^e \times V$ se calcule (dans l'ordre) : $ 9\times \dfrac 1 9 = 9/9$
   A la main, tu te dis, bah 9/9 ça fait 1. Oui... Sauf que pour une machine / c'est la division avec diviseur décimal...
   Donc le résultat est décimal et s'écrit alors 1.0 ...
- Avec tes parenthèses, c'est pire ! Priorité des opérations oblige (présence des parenthèses) T se calcule ainsi :
  $T=9 x\times (9^{-1} \times 7)$
  $\Leftrightarrow$
  $T=9 x\times \left(\dfrac 1 9 \times 7\right)$
  $\Leftrightarrow$
  $T=9 \times 1.285714 285714 28585714... $
  $T=1.0$ Pourquoi pire ?J Parce que ton T est un arrondi...

Et maintenant, tadadaaaa... !!!
- Avec mon écriture  $T=9^{e+1}\times V$, voilà la sortie :

 
                *************************************************
                *      Alignements progressif de produits       *
                *             Idée : cosinuspax                 *
                *                    v.2                        *
                *************************************************


A = 73
B = 3692347
P = 269541331

          *** Début du programme ***

P = 3504037303
  A = 160381
  B = 3692347
 

Plus de décimal, problème réglé.
C'était un problème 20% informatique + 80% mathématique.

Maintenant, la question est :  les A et B obtenus te conviennent-ils ?

@+

Hors ligne

#166 25-09-2019 11:25:27

cosinuspax
Membre
Inscription : 23-02-2019
Messages : 252

Re : Alignement de produits

Bravo pour la suppression des décimaux. Malheureusement A doit toujours être multiplié par un multiple de 9 à partir de V = 51 : 63, 81, 117... Ici on a A = 160381 donc A x T = 73 x 2197 et 2197 n'est pas un multiple de 9. Je ne vois pas comment la machine a pu trouver ça. Encore un mystère.

Hors ligne

#167 25-09-2019 11:31:38

cosinuspax
Membre
Inscription : 23-02-2019
Messages : 252

Re : Alignement de produits

2197 est le cube de 13 !

Hors ligne

#168 25-09-2019 12:20:55

cosinuspax
Membre
Inscription : 23-02-2019
Messages : 252

Re : Alignement de produits

C'est délirant. N est multiplié par 13 et A est multiplié par 13 ^ 3 !
N et A doivent être multipliés par le même nombre (T). Si N est multiplié par 13, A est multiplié aussi par 13. On devrait donc avoir ici : 73 x 13 = 949 et non 160381.
Pour B pas de problème, il ne doit pas bouger.

Hors ligne

#169 25-09-2019 12:26:07

cosinuspax
Membre
Inscription : 23-02-2019
Messages : 252

Re : Alignement de produits

Ta machine a un certain sens de l'humour.

Hors ligne

#170 25-09-2019 12:54:29

yoshi
Modo Ferox
Inscription : 20-11-2005
Messages : 17 385

Re : Alignement de produits

Re,

Non pas de mystère.
Si La machine ne fait strictement que ce qu'on lui demande de faire : plus "bête" mais disciplinée qu'elle, c'est difficile...
Il faut chercher l'erreur de branchement maintenant que les calculs sont propres.
Je vais peut-être enfin pouvoir avoir une réponse à une question que je repose pour la 4e fois.
Si l'erreur est d'ordre programmatique, je vais la débusquer, si je n'ai pas fait d"erreur, ce sera alors à toi de jouer.
Je vais donc retravailler mon questionnement pour qu'il soit plus clair.

Si P = N alors :
         Si P>S^2 alors :
                  Si A >=S ET si B >= S   alors :
                           print P, A et B
                  Sinon si A<S  ou B <S alors :
                           Stop
                  FIN SI
        FIN SI:
FIN SI

A=A*T

Si P>S^2 alors :
          Si A >=S, ET si B >= S   alors :
                  print P, A et B  - Stop
         FIN SI
FIN SI >= S

Si A<S  ou B <S alors :
          Next i I
FIN SI

Cela dit le problème n'est pas encore là.

T n'est pas multiple de 9 ?
Ok...
Alors regarde le déroulé des opérations :

A = 73
B = 3692347
P = 269541331

          *** Début du programme ***

i = 1  e = -1  V = 1  T = 1  P = 269541331
i = 2  e = -1  V = 3  T = 3  P = 808623993
i = 3  e = -1  V = 5  T = 5  P = 1347706655
i = 4  e = -1  V = 7  T = 7  P = 1886789317
i = 5  e = -1  V = 9  T = 9  P = 2425871979
i = 6  e = -1  V = 11  T = 11  P = 2964954641
i = 7  e = -1  V = 13  T = 13  P = 3504037303
P = 3504037303
  A = 160381
  B = 3692347

                    *******************

Temps écoulé : 0.21 s soit : 0.0 min  0.21 s

Il y a bien un T multiple de 9 là-dedans, mais je dépose un "mouchard" entre les lignes 18 et 19 et que je relance j'obtiens ça :

A = 73
B = 3692347
P = 269541331

          *** Début du programme ***

i = 1 e = -1 V = 1 T = 1
i = 2 e = -1 V = 3 T = 3
i = 3 e = -1 V = 5 T = 5
i = 4 e = -1 V = 7 T = 7
i = 5 e = -1 V = 9 T = 9
i = 6 e = -1 V = 11 T = 11
i = 7 e = -1 V = 13 T = 13

T = 13   A = 949


T = 13   A = 12337


T = 13   A = 160381

P = 3504037303
  A = 160381
  B = 3692347


Tu as de quoi réfléchir...
J'y reviendrais plus tard.

@+

Hors ligne

#171 25-09-2019 13:14:00

cosinuspax
Membre
Inscription : 23-02-2019
Messages : 252

Re : Alignement de produits

Le cycle des T multiples de 9 (63, 81, 117 ...) n'intervient pas avant que V atteigne 51. Donc avec V = T = 13, A x T = 73 x 13 = 949 et non 73 x 13^3. Pourquoi T devient 13 ^3 ? Pourquoi calculer T x T x T ...
C'est comme avec A = 145. Il y a une distorsion de T entre N x T et A x T.
D'autant plus bizarre que ça a marché avec 29 x 71 (T = 3).

Dernière modification par cosinuspax (25-09-2019 13:21:44)

Hors ligne

#172 25-09-2019 15:08:51

yoshi
Modo Ferox
Inscription : 20-11-2005
Messages : 17 385

Re : Alignement de produits

Re,

Il faut que je fasse des scans pour ma fille, après j'y reviens...
Donc vite fait, moi, vois-tu, en allant récupérer (de la révision)  à pieds ma voiture, j'ai eu le temps de cogiter...
N'ayant pas totalement en tête le script, je me suis posé plusieurs questions :
1. Pourquoi attendre T=13 pour calculer A x T ? Ça doit être normal, ça n'a pas eu l'air de te choquer
2. Donc reste pourquoi calculer A x T 3 fois de suite, pourquoi pas 1 ou 4 ou 4 ou 5...
    Réponse pifométrique : parce qu'il a fallu faire 3 passages pour qu'une certaine condition soit remplie :
    a) soit la condition est fausse
    b) soit l'enchaînement des Si, SINON n'est pas correct... Je verrai tout à l'heure.

Ma machine a le sens de l'humour ? Normal, elle est habitée. Mais faut pas le dire trop fort, parce qu'elle va se sentir encouragée dans cez sens et alors on est mal...
Il me revient en mémoire une anecdote.
Il y a 30 ans au moins, apparut le 1er ordinateur d'échecs de la taille d'une boîte à chaussures (au passage, il jouait comme... un pied).
Le Foyer Socio-éducatif du Collège en avait acheté un dans le cadre du Club d'échecs.
Nos gamins à peine dégrossis se faisant battre régulièrement, on avait imaginé de les faire se concerter pour choisir le coup à jouer : pendant plus d'un mois, ils se concertaient certes, mais... à voix très basse...
Des fois que cette saleté de machine les entende !!! Non mais ! Nous éducateurs étions pliés...

Bon, en attendant, veux-tu bien examiner ça sérieusement :

Si P = N alors :
         Si P>S^2 alors :
                  Si A >=S ET si B >= S   alors :
                           print P, A et B
                  Sinon si A<S  ou B <S alors :
                           Stop
                  FIN SI
        FIN SI:
FIN SI

A=A*T

Si P>S^2 alors :
          Si A >=S, ET si B >= S   alors :
                  print P, A et B  Stop
         FIN SI
FIN SI >= S

Si A<S  ou B <S alors :
          Next i
FIN SI

Je pense que c'est mon écriture de ce qui suit A x T qui est en cause...
Alors tu veux bien regarder SERIEUSEMENT SI CE QUE J'AI FAIT est conforme...

Et A = 145 ce n'était pas un mystère, pourquoi remettre ça sur le tapis ? Affaire classée... Erreur de programmation !

Bon, je passe à mes scans...

@+

Dernière modification par yoshi (25-09-2019 19:21:17)

Hors ligne

#173 25-09-2019 17:26:42

yoshi
Modo Ferox
Inscription : 20-11-2005
Messages : 17 385

Re : Alignement de produits

Re,

J'ai modifié mon interprétation de ta dernière ligne, pour la rendre copie conforme de ta pensée.
Et  le script n'utilise plus 13 3 fois de suite  mais fait encore un passage à T =15 avant d'afficher A = 14325 B et P et s'arrêter...
Tu semblais vouloir qu'il s'arrête à T=13.
Comme il continue avec 15 (c'est plus rationnel que 3 x avec 13) j'ai cherché pourquoi...
Réponse ici (j'ai modifié mon mouchard placé avant A=A*T) :

A = 73
B = 3692347
P = 269541331

          *** Début du programme ***

T = 13  A = 949      B = 3692347  S = 48473  P = 3504037303    S^2 = 2349631729   P>S^2 : True
T = 15  A = 14235  B = 3692347  S = 4155    P = 4043119965    S^2 = 17264025       P>S^2 : True

P = 4043119965
  A = 14235
  B = 3692347

C n'est pas à cause de P>S^2 c'est vrai pour 13 et pour 15...

Alors j'ai cherché autre chose :
P> S^2 oui donc il rentre dans le bloc (après A=A*T)
Là, 2e test Si A>=S et  B>=S...
test positif ou négatif ?
T =13  A = 949  B= 3692347  S = 48473
Test négatif A< S donc on n'a pla condition as  A>=S et B>=S
Donc il poursuit et comme après A<S ou B<S est vérifiée il va refaire "un tour", T passe à 15...

Or T =15,  A = 14325,  B = 3692347,  S =4155
P> S^2 vrai
puis cette fois A>=S  vrai et B>=S vrai, la condition est vérifiée, il affiche P, A et B et s'arrête...

@+

Hors ligne

#174 25-09-2019 22:10:03

cosinuspax
Membre
Inscription : 23-02-2019
Messages : 252

Re : Alignement de produits

Oui c'est ça, T = 13 donne A inférieur à S, j'ai vérifié à la main. Avec T = 15 on doit avoir A et B supérieurs à S. Super. Maintenant reste à tester le bloc des multiples de 9 ...C'est à dire quand V atteint 51.
A dem avec des exemples.

Dernière modification par cosinuspax (25-09-2019 22:20:30)

Hors ligne

#175 25-09-2019 22:24:43

cosinuspax
Membre
Inscription : 23-02-2019
Messages : 252

Re : Alignement de produits

Input 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, alors V = V + 2
7 Si e = - 1, alors T = V
8 Si V = 51, alors e = e + 1 et V = 7
9 Si e > - 1 et si V = 7, alors T = 51 x 9^e
10 Si T > 49 x 9^e, alors T = 9 x (9^e x V)
11 Si i > 1, alors P = N x T

12 R = sqrt entière de P
13 L = R^2 + R
14 Si L > P, alors aller à next i.
15 Si L < P, alors S = P - L
16 Si P = N, alors si P > S^2, si A >=S, si B > S, print P, A et B. STOP.
17 Sinon, si A ou B < S, alors aller à next i.

18 A = A x T
19 Si P > S^2, si A >= S, si B >= S, alors print P, A et B. STOP.
20 Si A ou B < S, alors aller à next i.

Dernière modification par cosinuspax (26-09-2019 13:23:18)

Hors ligne

Pied de page des forums