Bonjour à tous
Ma question est donc peut-on faire sous VB une fonction récursive
avec un argument tableau où est-ce impossible ???
Bonjour à tous
Ma question est donc peut-on faire sous VB une fonction récursive
avec un argument tableau où est-ce impossible ???
Bonjour à tous
Ma question est donc peut-on faire sous VB une fonction récursive
avec un argument tableau où est-ce impossible ???
Bonjour à tous
J'ai fais un bout de code sous Access donc en VBA...
Ce code utilises une fonction récursive qui marche très bien, par
elle a 2 arguments :
- un de type string,
- et un tableau.
Les 2 évolues en fonction du niveau de récursivité.
Le problème est la lenteur de cette récursivité, pour éventuellement
accélérer tout ça, j'ai retranscrit
mon code en VB sous visual studio .net...
A mon grand désespoir, la récursivité pour l'argument de type string
fonctionne mais par celle pour l'argument tableau, celui-ci ne garde
valeurs en fonction du son niveau de récursivité ???
Ma question est donc peut-on faire sous VB une fonction récursive avec
argument tableau où est-ce impossible ???
Bonjour à tous
J'ai fais un bout de code sous Access donc en VBA...
Ce code utilises une fonction récursive qui marche très bien, par
elle a 2 arguments :
- un de type string,
- et un tableau.
Les 2 évolues en fonction du niveau de récursivité.
Le problème est la lenteur de cette récursivité, pour éventuellement
accélérer tout ça, j'ai retranscrit
mon code en VB sous visual studio .net...
A mon grand désespoir, la récursivité pour l'argument de type string
fonctionne mais par celle pour l'argument tableau, celui-ci ne garde
valeurs en fonction du son niveau de récursivité ???
Ma question est donc peut-on faire sous VB une fonction récursive avec
argument tableau où est-ce impossible ???
Bonjour à tous
J'ai fais un bout de code sous Access donc en VBA...
Ce code utilises une fonction récursive qui marche très bien, par
elle a 2 arguments :
- un de type string,
- et un tableau.
Les 2 évolues en fonction du niveau de récursivité.
Le problème est la lenteur de cette récursivité, pour éventuellement
accélérer tout ça, j'ai retranscrit
mon code en VB sous visual studio .net...
A mon grand désespoir, la récursivité pour l'argument de type string
fonctionne mais par celle pour l'argument tableau, celui-ci ne garde
valeurs en fonction du son niveau de récursivité ???
Ma question est donc peut-on faire sous VB une fonction récursive avec
argument tableau où est-ce impossible ???
Bonjour à tous
J'ai fais un bout de code sous Access donc en VBA...
Ce code utilises une fonction récursive qui marche très bien, par contre
elle a 2 arguments :
- un de type string,
- et un tableau.
Les 2 évolues en fonction du niveau de récursivité.
Le problème est la lenteur de cette récursivité, pour éventuellement
accélérer tout ça, j'ai retranscrit
mon code en VB sous visual studio .net...
A mon grand désespoir, la récursivité pour l'argument de type string
fonctionne mais par celle pour l'argument tableau, celui-ci ne garde par
ses
valeurs en fonction du son niveau de récursivité ???
Ma question est donc peut-on faire sous VB une fonction récursive avec un
argument tableau où est-ce impossible ???
Merci à tous de vos lumière.
@+
Jessy Sempere - Access MVP
------------------------------------
Site @ccess : http://access.jessy.free.fr/
Pour l'efficacité de tous :
http://www.mpfa.info/
------------------------------------
Bonjour à tous
J'ai fais un bout de code sous Access donc en VBA...
Ce code utilises une fonction récursive qui marche très bien, par contre
elle a 2 arguments :
- un de type string,
- et un tableau.
Les 2 évolues en fonction du niveau de récursivité.
Le problème est la lenteur de cette récursivité, pour éventuellement
accélérer tout ça, j'ai retranscrit
mon code en VB sous visual studio .net...
A mon grand désespoir, la récursivité pour l'argument de type string
fonctionne mais par celle pour l'argument tableau, celui-ci ne garde par
ses
valeurs en fonction du son niveau de récursivité ???
Ma question est donc peut-on faire sous VB une fonction récursive avec un
argument tableau où est-ce impossible ???
Merci à tous de vos lumière.
@+
Jessy Sempere - Access MVP
news@access.fr.vu
------------------------------------
Site @ccess : http://access.jessy.free.fr/
Pour l'efficacité de tous :
http://www.mpfa.info/
------------------------------------
Bonjour à tous
J'ai fais un bout de code sous Access donc en VBA...
Ce code utilises une fonction récursive qui marche très bien, par contre
elle a 2 arguments :
- un de type string,
- et un tableau.
Les 2 évolues en fonction du niveau de récursivité.
Le problème est la lenteur de cette récursivité, pour éventuellement
accélérer tout ça, j'ai retranscrit
mon code en VB sous visual studio .net...
A mon grand désespoir, la récursivité pour l'argument de type string
fonctionne mais par celle pour l'argument tableau, celui-ci ne garde par
ses
valeurs en fonction du son niveau de récursivité ???
Ma question est donc peut-on faire sous VB une fonction récursive avec un
argument tableau où est-ce impossible ???
Merci à tous de vos lumière.
@+
Jessy Sempere - Access MVP
------------------------------------
Site @ccess : http://access.jessy.free.fr/
Pour l'efficacité de tous :
http://www.mpfa.info/
------------------------------------
Bonjour à tous
[...] j'ai retranscrit mon code en VB sous visual studio .net...
Bonjour à tous
[...] j'ai retranscrit mon code en VB sous visual studio .net...
Bonjour à tous
[...] j'ai retranscrit mon code en VB sous visual studio .net...
Jessy Sempere [MVP] a écrit :
> Bonjour à tous
Bonjour,
> [...] j'ai retranscrit mon code en VB sous visual studio .net...
Comme indiqué par Jean-Marc, cela marche très bien en VB6. Ensuite, pour
VB.Net, ce n'est pas sûr. Il y a pas mal de différences entre VB.Net et
VB6. De mémoire, le code vb pour acces est proche de celui de vb6, mais
doit donc être différent de celui de VB.Net. Si tu tiens à programmer en
VB.Net, les membres du forum qui lui est dédié pourront probablement
t'aider.
Vincent Guichard
Jessy Sempere [MVP] a écrit :
> Bonjour à tous
Bonjour,
> [...] j'ai retranscrit mon code en VB sous visual studio .net...
Comme indiqué par Jean-Marc, cela marche très bien en VB6. Ensuite, pour
VB.Net, ce n'est pas sûr. Il y a pas mal de différences entre VB.Net et
VB6. De mémoire, le code vb pour acces est proche de celui de vb6, mais
doit donc être différent de celui de VB.Net. Si tu tiens à programmer en
VB.Net, les membres du forum qui lui est dédié pourront probablement
t'aider.
Vincent Guichard
Jessy Sempere [MVP] a écrit :
> Bonjour à tous
Bonjour,
> [...] j'ai retranscrit mon code en VB sous visual studio .net...
Comme indiqué par Jean-Marc, cela marche très bien en VB6. Ensuite, pour
VB.Net, ce n'est pas sûr. Il y a pas mal de différences entre VB.Net et
VB6. De mémoire, le code vb pour acces est proche de celui de vb6, mais
doit donc être différent de celui de VB.Net. Si tu tiens à programmer en
VB.Net, les membres du forum qui lui est dédié pourront probablement
t'aider.
Vincent Guichard
La question en fait, c'est "Programmes-tu en VB6 ou VB.Net?"
Si tu programmes en VB6, on pourra essayer de répondre à ta question. Si
tu programmes en VB.Net, il y a de forte chances que les réponses que tu
obtiendra ici soient bancales ou inadaptées, le forum consacré à VB.Net
étant: news://microsoft.public.fr.dotnet.vb
La question en fait, c'est "Programmes-tu en VB6 ou VB.Net?"
Si tu programmes en VB6, on pourra essayer de répondre à ta question. Si
tu programmes en VB.Net, il y a de forte chances que les réponses que tu
obtiendra ici soient bancales ou inadaptées, le forum consacré à VB.Net
étant: news://microsoft.public.fr.dotnet.vb
La question en fait, c'est "Programmes-tu en VB6 ou VB.Net?"
Si tu programmes en VB6, on pourra essayer de répondre à ta question. Si
tu programmes en VB.Net, il y a de forte chances que les réponses que tu
obtiendra ici soient bancales ou inadaptées, le forum consacré à VB.Net
étant: news://microsoft.public.fr.dotnet.vb
Bonjour
Bonjour
Bonjour
Jessy Sempere [MVP] a écrit :
> Bonjour
re,
Quel est la rapidité escomptée?
Après quelques rapides modification de ton code (cf ci-dessous), et sans
optimisations (j'utilise plein de variants...) j'exécute la fonction
fRecursive_Combinaison 10000 fois en environ 33 secondes* sur l'exemple
que tu donnes? Est assez rapide ou pas? Quels sont les temps que tu
obtient en VBA sous access?
Vincent Guichard
*La mesure est vraiment pas précise, et je sais que c'est pas comme ça
qu'on doit faire un benchmark
Code utilisé pour le test rapide:
Option Explicit
Option Base 1
'Déclaration de variables globales :
Dim lngCombi As Long 'nombre de niveaux de récursivité
Dim tabResult() 'tableaux de comparaison (matrice de l'exemple supérieur)
Dim tabSolution() As String
Dim lngSolution As Long
Dim lngAllGrille As Long
Sub Form_Load()
lngCombi = 3
lngAllGrille = 12
tabResult() = Array( _
Array(1, 1, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0), _
Array(1, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0), _
Array(1, 0, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0), _
Array(0, 1, 1, 1, 0, 1, 0, 0, 0, 1, 0, 0), _
Array(1, 0, 1, 0, 1, 1, 0, 0, 0, 0, 1, 0), _
Array(0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1), _
Array(1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0), _
Array(0, 1, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1), _
Array(0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 1, 0), _
Array(0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 1), _
Array(0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1), _
Array(0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1))
Dim a As Integer
Debug.Print Timer, Now
For a = 0 To 10000
ReDim tabCombi(1 To lngAllGrille) As Integer 'tableau avec une dimension
avec que des 0
fRecursive_Combinaison 1, 1, "", tabCombi
Next a
Debug.Print Timer, Now
End Sub
Function fRecursive_Combinaison(x, ind, strCombi As String, tabCombi()
As Integer)
'** Fonction récursive pour les combinaisons
Dim lngResult As Long
Dim tabCombi_tmp() As Integer
Dim strCombi_tmp As String
Dim b As Integer
Dim c As Integer
tabCombi_tmp = tabCombi
strCombi_tmp = strCombi
For b = x To lngAllGrille
lngResult = 0
If strCombi_tmp = "" Then
strCombi = b
Else
strCombi = strCombi_tmp & ";" & b
End If
If ind < lngCombi Then
For c = 1 To lngAllGrille
If tabCombi_tmp(c) + tabResult(b)(c) = 0 Then
tabCombi(c) = 0
Else
tabCombi(c) = 1
End If
Next
fRecursive_Combinaison b + 1, ind + 1, strCombi, tabCombi
Else
'** resultat
For c = 1 To lngAllGrille
If tabCombi_tmp(c) + tabResult(b)(c) <> 0 Then
lngResult = lngResult + 1
Else
Exit For
End If
Next
If lngResult = lngAllGrille Then
'** Chargement d'une solution dans le tableau tabSolution
lngSolution = lngSolution + 1
ReDim Preserve tabSolution(1 To lngSolution)
tabSolution(lngSolution) = strCombi
End If
End If
Next
End Function
Jessy Sempere [MVP] a écrit :
> Bonjour
re,
Quel est la rapidité escomptée?
Après quelques rapides modification de ton code (cf ci-dessous), et sans
optimisations (j'utilise plein de variants...) j'exécute la fonction
fRecursive_Combinaison 10000 fois en environ 33 secondes* sur l'exemple
que tu donnes? Est assez rapide ou pas? Quels sont les temps que tu
obtient en VBA sous access?
Vincent Guichard
*La mesure est vraiment pas précise, et je sais que c'est pas comme ça
qu'on doit faire un benchmark
Code utilisé pour le test rapide:
Option Explicit
Option Base 1
'Déclaration de variables globales :
Dim lngCombi As Long 'nombre de niveaux de récursivité
Dim tabResult() 'tableaux de comparaison (matrice de l'exemple supérieur)
Dim tabSolution() As String
Dim lngSolution As Long
Dim lngAllGrille As Long
Sub Form_Load()
lngCombi = 3
lngAllGrille = 12
tabResult() = Array( _
Array(1, 1, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0), _
Array(1, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0), _
Array(1, 0, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0), _
Array(0, 1, 1, 1, 0, 1, 0, 0, 0, 1, 0, 0), _
Array(1, 0, 1, 0, 1, 1, 0, 0, 0, 0, 1, 0), _
Array(0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1), _
Array(1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0), _
Array(0, 1, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1), _
Array(0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 1, 0), _
Array(0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 1), _
Array(0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1), _
Array(0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1))
Dim a As Integer
Debug.Print Timer, Now
For a = 0 To 10000
ReDim tabCombi(1 To lngAllGrille) As Integer 'tableau avec une dimension
avec que des 0
fRecursive_Combinaison 1, 1, "", tabCombi
Next a
Debug.Print Timer, Now
End Sub
Function fRecursive_Combinaison(x, ind, strCombi As String, tabCombi()
As Integer)
'** Fonction récursive pour les combinaisons
Dim lngResult As Long
Dim tabCombi_tmp() As Integer
Dim strCombi_tmp As String
Dim b As Integer
Dim c As Integer
tabCombi_tmp = tabCombi
strCombi_tmp = strCombi
For b = x To lngAllGrille
lngResult = 0
If strCombi_tmp = "" Then
strCombi = b
Else
strCombi = strCombi_tmp & ";" & b
End If
If ind < lngCombi Then
For c = 1 To lngAllGrille
If tabCombi_tmp(c) + tabResult(b)(c) = 0 Then
tabCombi(c) = 0
Else
tabCombi(c) = 1
End If
Next
fRecursive_Combinaison b + 1, ind + 1, strCombi, tabCombi
Else
'** resultat
For c = 1 To lngAllGrille
If tabCombi_tmp(c) + tabResult(b)(c) <> 0 Then
lngResult = lngResult + 1
Else
Exit For
End If
Next
If lngResult = lngAllGrille Then
'** Chargement d'une solution dans le tableau tabSolution
lngSolution = lngSolution + 1
ReDim Preserve tabSolution(1 To lngSolution)
tabSolution(lngSolution) = strCombi
End If
End If
Next
End Function
Jessy Sempere [MVP] a écrit :
> Bonjour
re,
Quel est la rapidité escomptée?
Après quelques rapides modification de ton code (cf ci-dessous), et sans
optimisations (j'utilise plein de variants...) j'exécute la fonction
fRecursive_Combinaison 10000 fois en environ 33 secondes* sur l'exemple
que tu donnes? Est assez rapide ou pas? Quels sont les temps que tu
obtient en VBA sous access?
Vincent Guichard
*La mesure est vraiment pas précise, et je sais que c'est pas comme ça
qu'on doit faire un benchmark
Code utilisé pour le test rapide:
Option Explicit
Option Base 1
'Déclaration de variables globales :
Dim lngCombi As Long 'nombre de niveaux de récursivité
Dim tabResult() 'tableaux de comparaison (matrice de l'exemple supérieur)
Dim tabSolution() As String
Dim lngSolution As Long
Dim lngAllGrille As Long
Sub Form_Load()
lngCombi = 3
lngAllGrille = 12
tabResult() = Array( _
Array(1, 1, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0), _
Array(1, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0), _
Array(1, 0, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0), _
Array(0, 1, 1, 1, 0, 1, 0, 0, 0, 1, 0, 0), _
Array(1, 0, 1, 0, 1, 1, 0, 0, 0, 0, 1, 0), _
Array(0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1), _
Array(1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0), _
Array(0, 1, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1), _
Array(0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 1, 0), _
Array(0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 1), _
Array(0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1), _
Array(0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1))
Dim a As Integer
Debug.Print Timer, Now
For a = 0 To 10000
ReDim tabCombi(1 To lngAllGrille) As Integer 'tableau avec une dimension
avec que des 0
fRecursive_Combinaison 1, 1, "", tabCombi
Next a
Debug.Print Timer, Now
End Sub
Function fRecursive_Combinaison(x, ind, strCombi As String, tabCombi()
As Integer)
'** Fonction récursive pour les combinaisons
Dim lngResult As Long
Dim tabCombi_tmp() As Integer
Dim strCombi_tmp As String
Dim b As Integer
Dim c As Integer
tabCombi_tmp = tabCombi
strCombi_tmp = strCombi
For b = x To lngAllGrille
lngResult = 0
If strCombi_tmp = "" Then
strCombi = b
Else
strCombi = strCombi_tmp & ";" & b
End If
If ind < lngCombi Then
For c = 1 To lngAllGrille
If tabCombi_tmp(c) + tabResult(b)(c) = 0 Then
tabCombi(c) = 0
Else
tabCombi(c) = 1
End If
Next
fRecursive_Combinaison b + 1, ind + 1, strCombi, tabCombi
Else
'** resultat
For c = 1 To lngAllGrille
If tabCombi_tmp(c) + tabResult(b)(c) <> 0 Then
lngResult = lngResult + 1
Else
Exit For
End If
Next
If lngResult = lngAllGrille Then
'** Chargement d'une solution dans le tableau tabSolution
lngSolution = lngSolution + 1
ReDim Preserve tabSolution(1 To lngSolution)
tabSolution(lngSolution) = strCombi
End If
End If
Next
End Function
Re,
Merci de t'interesser à mon problème...
J'ai fais un test avec le même code que toi, et j'obtiens 47 secondes
Si tu veux, je peux t'envoyer une matrice qui fais 54 sur 54...
Perso je l'ai lancé sous VBA et je n'ai pas planté mais après quelques
heures j'ai arrêté le code...
PS : Je pense savoir d'où viens mon problème sous VB.NET, il me semble
VBA et VB6, les arguments d'une fonction sont passer par défaut par
référence, hors quand j'ai retranscris mon code, mes arguments sont passer
par valeur (byVal) ???
Re,
Merci de t'interesser à mon problème...
J'ai fais un test avec le même code que toi, et j'obtiens 47 secondes
Si tu veux, je peux t'envoyer une matrice qui fais 54 sur 54...
Perso je l'ai lancé sous VBA et je n'ai pas planté mais après quelques
heures j'ai arrêté le code...
PS : Je pense savoir d'où viens mon problème sous VB.NET, il me semble
VBA et VB6, les arguments d'une fonction sont passer par défaut par
référence, hors quand j'ai retranscris mon code, mes arguments sont passer
par valeur (byVal) ???
Re,
Merci de t'interesser à mon problème...
J'ai fais un test avec le même code que toi, et j'obtiens 47 secondes
Si tu veux, je peux t'envoyer une matrice qui fais 54 sur 54...
Perso je l'ai lancé sous VBA et je n'ai pas planté mais après quelques
heures j'ai arrêté le code...
PS : Je pense savoir d'où viens mon problème sous VB.NET, il me semble
VBA et VB6, les arguments d'une fonction sont passer par défaut par
référence, hors quand j'ai retranscris mon code, mes arguments sont passer
par valeur (byVal) ???