1

Bonjour,

J'ai créé un programme simple pour décomposer un entier en produits de facteurs premiers.

decomp(n)
Prgm
Local divise,d,fc,i
Define divise()=Prgm
While mod(n,d)=0
d->fc[i]
n/d->n
i+1->i
EndWhile
EndPrgm
{}->fc
2->d
divise()
3->d
Loop
divise()
d+2->d
If d*d>n
Exit
EndLoop
If n>1
n->fc[i]
Disp fc
EndPrgm

Comment se fait-il que je tombe sur l'erreur suivante à l'exécution : A test did not resolve to TRUE or FALSE ?

Si je "sors" le sous programme de test de division par les nombres impaires (ligne 4 à 10) en créant ce sous-programme à part, j'ai la même erreur...

Par contre ce programme fonctionne sans le sous-programme "interne" de division par les nombres impaires.

decomp(n)
Prgm
Local d,fc,i
{}->fc
1->i
While mod(n,2)=0
2->fc[i]
n/2->n
i+1->i
EndWhile
3->d
Loop
While mod(n,d)=0
d->fc[i]
n/d->n
i+1->i
EndWhile
d+2->d
If d*d>n
Exit
EndLoop
If n>1
n->fc[i]
Disp fc
EndPrgm

Si vous pouvez m'éclairer sur mon erreur.
avatar

2

Tu es sûr que divise() voit d et n ?
Si tu affiches leur contenu avant le while(mod(n,d) = 0), quelles sont leur valeur ?

3

La variable n est donnée dans decomp(n). Pour d, n'est-elle pas donnée juste avant l'appel de divise() lorsque on initialise d à 2 ? ...
avatar

4

En fait il y a 2 façons de faire un sous programme. Soit classiquement en créant ce sous programme à part, ou en l'incluant par un Define dans le corps du programme principal. Mon souci c'est qu'aucune des 2 méthodes ne fonctionnent...

C'est un bête sous programme qui divise un entier par 2, puis par 3 et les nombres impaires suivants.

Comprends pas... Le même algorithme fonctionne parfaitement sur une TI-86 avec un appel du sous programme de division
avatar

5

Tu déclare n en local, je ne sais pas si divise le vois, je ne me rappelle plus des règles de scoping.
Essaye de virer ta directive local, et si ça marche, c'est bien une question de visibilité.