Bonjour
j'ai implémenté un algorithme qui fait une division d'une chaine binaire sur une autre, mais quand j'appelle la fonction (Division) qui doit me retourner le résultat, le programme boucle infiniment avec une utilisation de 50% de mon Core2Duo et ceci jusqu'à ce que je le stoppe
Voila je poste l'ensemble des fonctions espérant que quelqu'un puisse m'aider :
La fonction principale :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32 Private Function Division(ByVal Message As String, ByVal PolynomeGenerateur As String) As String Dim arret As Boolean = False Dim msg() As Char = Message.ToCharArray Dim pg() As Char = PolynomeGenerateur.ToCharArray Dim L As Integer = PolynomeGenerateur.Length Dim Anc_i As Integer = L Dim Token(L) As Char Dim Dev(L) As Char Token = Extract(L, msg) While (Not (arret)) If (msg.Length < L) Then arret = True Else Dev = et_logique(Token, pg) Dev = Ajouter(Dev, msg, Anc_i) If (Dev.Length >= L) Then Token = Extract(L, Dev) End If msg = Dev End If End While Dim retour As String = Dev Return retour End Function
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 Private Function Ajouter(ByVal dev() As Char, ByVal msg() As Char, ByVal Anc_i As Integer) As Char() Dim retour As String = "" Dim i As Integer Dim j As Integer For i = 0 To dev.Length - 1 retour = retour + dev(i) Next For j = Anc_i To msg.Length - 1 retour = retour + msg(j) Next Dim R() As Char = retour.ToCharArray While R(0) = "0" R = decaler(R) End While Return R End Function
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 Private Function decaler(ByVal chaine() As Char) As Char() Dim tmp(chaine.Length - 1) As Char For i As Integer = 1 To chaine.Length - 1 tmp(i - 1) = chaine(i) Next Return tmp End Function
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25 Private Function et_logique(ByVal token() As Char, ByVal pg() As Char) As Char() Dim result(pg.Length) As Char For i As Integer = 0 To pg.Length - 1 If (token(i) = "1") Then If (pg(i) = "1") Then result(i) = "0" Else : result(i) = "1" End If ElseIf (token = "0") Then If (pg(i) = "1") Then result(i) = "1" Else : result(i) = "0" End If End If Next Return result End Functionvoila comment l'appel se deroule :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 Private Function Extract(ByVal taille As Integer, ByVal message() As Char) As Char() Dim tmp(taille) As Char Dim i As Integer For i = 1 To taille - 1 tmp(i) = message(i) Next Return tmp End Function
message et poly sont chaines (String) composés de 1 et de 0
Code : Sélectionner tout - Visualiser dans une fenêtre à part TextBox1.Text = Division(message, poly)
Partager