Page 1 sur 2
Savoir par quel nombre est divisible un nombre
Publié : sam. 29/nov./2014 10:47
par Lord Nelson
Coucou, j'ai créer ceci, savez-vous si ya moyen de faire plus optimisé ?
Code : Tout sélectionner
Procedure.s NombreDivisablePar(Nombre.Q, DiviseurMinimum.Q, DiviseurMaximum.Q)
Resultat$ = ""
If Nombre.Q > 0
For Diviseur = DiviseurMinimum.Q To DiviseurMaximum.Q
Nombre$ = StrD(Nombre.Q / Diviseur, 20)
Decimale$ = Mid(Nombre$, FindString(Nombre$, "."))
If Mid(Nombre$, 1, 1) <> "0" And ValD(Decimale$) = 0
Resultat$ + Str(Diviseur) + ", "
EndIf
Next
If Right(Resultat$, 2) = ", "
Resultat$ = Mid(Resultat$, 1, Len(Resultat$) - 2)
EndIf
If Resultat$ > ""
ProcedureReturn Resultat$
Else
ProcedureReturn "Rien"
EndIf
Else
ProcedureReturn "0"
EndIf
EndProcedure
For Nombre.Q = 0 To 1000
Debug Str(Nombre.Q) + " est divisable par: " + NombreDivisablePar(Nombre.Q, 2, 999)
Next
Re: Savoir par quel nombre est divisible un nombre
Publié : sam. 29/nov./2014 11:08
par Azur
Hello, est-ce que ceci conviendrait ?
Code : Tout sélectionner
EnableExplicit
Procedure findRound(n,min,max)
Define i
For i=min To max
If n>i
Define decimal.f=n/i
Define entier.i=n/i
If decimal=entier
Debug Str(n)+" est divisable par "+Str(i)
EndIf
EndIf
Next
EndProcedure
Define i
For i=1 To 1000
findround(i,2,999)
Next
Re: Savoir par quel nombre est divisible un nombre
Publié : sam. 29/nov./2014 14:56
par Lord Nelson
Merci beaucoup Asur
J'ai reformater à ma sauce pour mieux m'y repérer mais le résultat reste inchangé, je suis plutôt très très maniaque quand je code
Code : Tout sélectionner
Procedure.s FindRound(Nombre.Q, DiviseurMinimum.Q, DiviseurMaximum.Q)
Protected Diviseur.Q = 0
Protected Decimal.F = 0
Protected Entier.I = 0
Protected Resultat$ = ""
For Diviseur.Q = DiviseurMinimum.Q To DiviseurMaximum.Q
If Nombre.Q > Diviseur.Q
Decimal.F = Nombre.Q / Diviseur.Q
Entier.I = Nombre.Q / Diviseur.Q
If Decimal.F = Entier.I
Resultat$ + Str(Diviseur.Q) + ", "
EndIf
EndIf
Next
If Not Resultat$ > ""
Resultat$ = "lui-même"
ProcedureReturn Resultat$
Else
ProcedureReturn Mid(Resultat$, 1, Len(Resultat$) - 2)
EndIf
EndProcedure
For Nombre = 1 To 1000
Debug Str(Nombre) + " est divisable par " + FindRound(Nombre, 2, 999)
Next
Re: Savoir par quel nombre est divisible un nombre
Publié : sam. 29/nov./2014 18:37
par Azur
Oui mais je t'en prie fais toi plaisir.
J'ai un doute avec ton code.
Premier truc, moi j'ai la version 32bits ( sur un OS 64 ) et je me fais jeter au moment de
Il me dit : boucle for n'accepte pas un Quad ( parait logique sur un compilo en 32bits ) bref.
Je sais pas pourquoi tu types en quad systématiquement à mon avis c'est une mauvaise habitude dans ce cas précis.
Je comprend pas la ligne
Oui sinon on est d'accord, j'ai remplacé la variable résultat par une variable flag, ça me donne ça.
Code : Tout sélectionner
EnableExplicit
Procedure findRound(n,min,max)
Define i
Define flag=0
For i=min To max
If n>i
Define decimal.f=n/i
Define entier.i=n/i
If decimal=entier
Debug Str(n)+" est divisible par "+Str(i)
flag=1
EndIf
EndIf
Next
If flag=0
Debug Str(n)+" Divisible par lui même uniquement=> nombre premier"
EndIf
EndProcedure
Define i
For i=1 To 999
findround(i,2,999)
Next
Bon visiblement tu as besoin de bosser en chaines de caractères, admettons c'est plus gourmand en mémoire mais tu dois avoir une bonne raison.
++
Re: Savoir par quel nombre est divisible un nombre
Publié : sam. 29/nov./2014 21:07
par Lord Nelson
Coucou,
Oui, mauvaise habitude possible, je fais ça pour accepter le plus grand nombre possible voila tout
If Not Resultat$ > ""
Bha si le nombre n'est pas divisable, il renvoie une chaîne vide donc je fais comme ceci
Bon visiblement tu as besoin de bosser en chaines de caractères, admettons c'est plus gourmand en mémoire mais tu dois avoir une bonne raison.
P't’être bien qu'oui, P't’être qu'non
Merci à toi

Re: Savoir par quel nombre est divisible un nombre
Publié : dim. 30/nov./2014 12:48
par Micoute
Bonjour Lord Nelson, voici ma solution.
Code : Tout sélectionner
Procedure.s NombreDivisiblePar(Nombre.Q, DiviseurMinimum.Q, DiviseurMaximum.Q)
Resultat$ = ""
If Nombre
For Diviseur = DiviseurMinimum To DiviseurMaximum
Nombre$ = StrD(Nombre / Diviseur, 20)
Decimale$ = Mid(Nombre$, FindString(Nombre$, "."))
If Mid(Nombre$, 1, 1) <> "0" And ValD(Decimale$) = 0
Resultat$ + Str(Diviseur) + ", "
EndIf
Next
If Right(Resultat$, 2) = ", "
Resultat$ = Mid(Resultat$, 1, Len(Resultat$) - 2)
EndIf
If Resultat$ > ""
ProcedureReturn Resultat$
Else
ProcedureReturn "lui-même"
EndIf
Else
ProcedureReturn "rien du tout !"
EndIf
EndProcedure
For Nombre = 0 To 255
Debug Str(Nombre) + " est divisible par: " + NombreDivisiblePar(Nombre, 2, Nombre-1)
Next
Re: Savoir par quel nombre est divisible un nombre
Publié : dim. 30/nov./2014 16:00
par falsam
Une petite lecture sur ce lien :
http://www.purebasic.com/french/documen ... ables.html
Et le code qui va avec qui te donneras le même résultat en nettement plus rapide et plus court.
Code : Tout sélectionner
Procedure.s NombreDivisablePar(Nombre.Q, DiviseurMinimum.Q, DiviseurMaximum.Q)
Protected Resultat$
If Nombre > 0
For Diviseur = DiviseurMinimum To DiviseurMaximum
If Nombre % Diviseur = 0
Resultat$ + Str(Diviseur) + ", "
EndIf
Next
If Resultat$ = ""
Resultat$ = "Rien, "
EndIf
EndIf
ProcedureReturn Left(Resultat$, Len(Resultat$) - 2)
EndProcedure
For Nombre = 0 To 1000
Debug Str(Nombre) + " est divisable par: " + NombreDivisablePar(Nombre, 2, 999)
Next
Re: Savoir par quel nombre est divisible un nombre
Publié : dim. 30/nov./2014 16:31
par Lord Nelson
Merci à tous
Petite rectification mineur:
Code : Tout sélectionner
Procedure.s NombreDivisablePar(Nombre.Q, DiviseurMinimum.Q, DiviseurMaximum.Q)
Protected Resultat$
If Nombre > 0
For Diviseur = DiviseurMinimum To DiviseurMaximum
If Nombre % Diviseur = 0
Resultat$ + Str(Diviseur) + ", "
EndIf
Next
If Resultat$ = ""
Resultat$ = "Rien, "
EndIf
Else
Resultat$ = "Rien, "
EndIf
ProcedureReturn Left(Resultat$, Len(Resultat$) - 2)
EndProcedure
For Nombre = 0 To 1000
Debug Str(Nombre) + " est divisable par: " + NombreDivisablePar(Nombre, 2, 999)
Next
Re: Savoir par quel nombre est divisible un nombre
Publié : dim. 30/nov./2014 16:44
par falsam
Mon dieu un If de plus !!!! tout ça pour "rien"
Code : Tout sélectionner
Procedure.s NombreDivisablePar(Nombre.Q, DiviseurMinimum.Q, DiviseurMaximum.Q)
Protected Resultat$ = "Rien, "
If Nombre > 0
For Diviseur = DiviseurMinimum To DiviseurMaximum
If Nombre % Diviseur = 0
Resultat$ + Str(Diviseur) + ", "
EndIf
Next
EndIf
ProcedureReturn Left(Resultat$, Len(Resultat$) - 2)
EndProcedure
For Nombre = 0 To 1000
Debug Str(Nombre) + " est divisable par: " + NombreDivisablePar(Nombre, 2, 999)
Next
Re: Savoir par quel nombre est divisible un nombre
Publié : dim. 30/nov./2014 17:37
par Lord Nelson
Mon dieu un If de plus !!!! tout ça pour "rien"

Non mais là par contre ont est pas d’accord lol.
Tu met au début que le nombre est divisable par "Rien" et en plus tu dis que le If est pour Rien.
Un nombre est divisable par "Rien" si il est divisable par aucun nombre et pas "Rien" dès le début

Re: Savoir par quel nombre est divisible un nombre
Publié : dim. 30/nov./2014 18:20
par falsam
Tu n'as même pas testé ce dernier code !!! Le résultat est le même que ton code banane. Et je persiste l'ajout de ton "if" ne sert à rien sauf à ralentir le temps d'éxécution.
Re: Savoir par quel nombre est divisible un nombre
Publié : dim. 30/nov./2014 18:27
par Lord Nelson
Banane toi même
Bien sur que si j'ai testé
0 est divisable par: Rien
1 est divisable par: Rien
2 est divisable par: Rien, 2
3 est divisable par: Rien, 3
4 est divisable par: Rien, 2, 4
5 est divisable par: Rien, 5
6 est divisable par: Rien, 2, 3, 6
7 est divisable par: Rien, 7
.../...
995 est divisable par: Rien, 5, 199, 995
996 est divisable par: Rien, 2, 3, 4, 6, 12, 83, 166, 249, 332, 498, 996
997 est divisable par: Rien, 997
998 est divisable par: Rien, 2, 499, 998
999 est divisable par: Rien, 3, 9, 27, 37, 111, 333, 999
1000 est divisable par: Rien, 2, 4, 5, 8, 10, 20, 25, 40, 50, 100, 125, 200, 250, 500
Edit par TazNormand
J'ai raccourci ta liste, ça prend de la place inutilement sur le serveur du forum, et comme tu es un adepte de la compression
Re: Savoir par quel nombre est divisible un nombre
Publié : dim. 30/nov./2014 18:32
par falsam
Suite de ma réponse sur
ce lien
PS : Et ne fanfaronne pas hein ? ou je viens te booter le cul !
Re: Savoir par quel nombre est divisible un nombre
Publié : dim. 30/nov./2014 18:53
par Lord Nelson
Hé bhé pourquoi tans de violence

Re: Savoir par quel nombre est divisible un nombre
Publié : dim. 30/nov./2014 20:15
par Ollivier
Lord Nelson a écrit :Banane toi même
Bien sur que si j'ai testé
0 est divisable par: Rien
1 est divisable par: Rien
2 est divisable par: Rien, 2
3 est divisable par: Rien, 3
4 est divisable par: Rien, 2, 4
5 est divisable par: Rien, 5
6 est divisable par: Rien, 2, 3, 6
7 est divisable par: Rien, 7
.../...
995 est divisable par: Rien, 5, 199, 995
996 est divisable par: Rien, 2, 3, 4, 6, 12, 83, 166, 249, 332, 498, 996
997 est divisable par: Rien, 997
998 est divisable par: Rien, 2, 499, 998
999 est divisable par: Rien, 3, 9, 27, 37, 111, 333, 999
1000 est divisable par: Rien, 2, 4, 5, 8, 10, 20, 25, 40, 50, 100, 125, 200, 250, 500
Edit par TazNormand
J'ai raccourci ta liste, ça prend de la place inutilement sur le serveur du forum, et comme tu es un adepte de la compression
Merci. Ton geste calme ma macula.