Voila un bout de code (à déconseiller au non matheux) qui retourne le PGCD de deux nombres ! Bon j'ai pas pu super bien débugger puisque windows plante avec pas mal de valeurs...
10; 5; pas de problème
13; 7; pas de problème
44; 89; plantage
25; 10; plantage
Je sais pas ou est le blème...
Procedure PGCD(number1.l, number2.l)
If number2 > number1
number3 = number1
number1 = number2
number2 = number3
EndIf
result = 2
While result <> 0
i=0
reste = number1 % number2
quotient = number1/number2
If reste = 0
If i = 0
ProcedureReturn number2
Else
ProcedureReturn reste2
EndIf
result=0
EndIf
number2 = quotient
number1 = reste
reste2 = reste
i = i + 1
Wend
EndProcedure
Heis Spiter, webmaster du site http://www.heisspiter.net
Développeur principal et administrateur du projet Bird Chat
Parti courir au bonheur du dév. public et GPL
Procedure PGCD(number1.l, number2.l)
If number2 > number1
number3 = number1
number1 = number2
number2 = number3
EndIf
result = 2
i=0
While result <> 0
reste = number1 % number2
quotient = number1/number2
If reste = 0
If i = 0
ProcedureReturn number2
Else
ProcedureReturn reste2
EndIf
result=0
EndIf
number1 = number2
number2 = reste
reste2 = reste
i = i + 1
Wend
EndProcedure
PS : Ne croyez pas que je sois matheux (quoique), mais depuis le temps que je veux le faire...
Heis Spiter, webmaster du site http://www.heisspiter.net
Développeur principal et administrateur du projet Bird Chat
Parti courir au bonheur du dév. public et GPL
Me dis pas que j'ai fait tout ca pour rien ... Bon c'est pas grave
Heis Spiter, webmaster du site http://www.heisspiter.net
Développeur principal et administrateur du projet Bird Chat
Parti courir au bonheur du dév. public et GPL
J'arrive pô à trouver... Faut dire que la recherche IPB... Ca cherche pas grand chose... Bon ok j'arrete
Heis Spiter, webmaster du site http://www.heisspiter.net
Développeur principal et administrateur du projet Bird Chat
Parti courir au bonheur du dév. public et GPL
POurquoi vous venez tous casser ma baraque :tusors: Pas mal comme méthode... Meme si je préfére la mienne
Heis Spiter, webmaster du site http://www.heisspiter.net
Développeur principal et administrateur du projet Bird Chat
Parti courir au bonheur du dév. public et GPL
a=1581
b=1580
Procedure PGCD(i, j)
i=Abs(i)
j=Abs(j)
Repeat
If i>j
i = i-j
Else
j = j-i
EndIf
Until i=j
ProcedureReturn i
EndProcedure
c = PGCD(a, b)
Debug "a = " + Str(a)
Debug "b = " + Str(b)
Debug "PGCD de a et b = " + Str(c)
End
j'ai pas regardé ton code (donc excuse moi si tu l'utilise) mais pour trouver un PGCD il faut utiliser l'algorithme d'Euclide je vais pas te dérouler une leçon mais je vais met un petit bout de code vite fait:
DefType.l
Dim Chiffres.l(2)
OpenConsole()
ConsoleTitle("Rechercheur de PGCD")
ClearConsole()
PrintN("Entrez deux nombre entier (mettez un espace entre les deux)")
PrintN("(mettez le plus grand chiffre en premier)")
Chiffre$ = Input()
For i = 1 To 2
Resultat$ = StringField(Chiffre$, i, " ")
Chiffres(i) = Val(Resultat$)
Next
Chiffre1 = Chiffres(1)
Chiffre2 = Chiffres(2)
Chiffredeb1 = Chiffres(1)
Chiffredeb2 = Chiffres(2)
Repeat
Reste = Chiffre1 % Chiffre2
If Reste = 0
Sortie = 1
Else
Chiffre1 = Chiffre2
Chiffre2 = Reste
EndIf
Until Sortie = 1
ClearConsole()
If Chiffre2 = 1
ClearConsole()
PrintN(Str(Chiffredeb1) + " et " + Str(Chiffredeb2) + " sont premiers entres eux")
Input()
End
EndIf
PrintN("Le PGCD de " + Str(Chiffredeb1) + " et de " + Str(Chiffredeb2) + " est " + Str(Chiffre2))
Input()
CloseConsole()
End
Joli Oliv !
Pierre et toute sa science.... Je sais que c'est l'algorithme d'Euclide (puisque division Euclidienne)
dividende = diviseur * quotient + reste T'es content Pierre ?
Heis Spiter, webmaster du site http://www.heisspiter.net
Développeur principal et administrateur du projet Bird Chat
Parti courir au bonheur du dév. public et GPL