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 .NET sous visual studio .net...
A mon grand désespoir, la récursivité pour l'argument de type string
fonctionne mais pas 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 .NET 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 .NET sous visual studio .net...
A mon grand désespoir, la récursivité pour l'argument de type string
fonctionne mais pas 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 .NET 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 .NET sous visual studio .net...
A mon grand désespoir, la récursivité pour l'argument de type string
fonctionne mais pas 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 .NET 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,
Voilà un exemple de récursivité avec tableau ArrayList
je sais pas si c'est bien ça que vous cherchiez ! mais bon ça peut aidé !
Cordialement
--
Mail : http://cerbermail.com/?rIXgaw9Xsl
Site : http://troxsa.info
"Jessy Sempere [MVP]" a écrit dans le message
news: 43f477f0$
> 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 .NET sous visual studio .net...
>
> A mon grand désespoir, la récursivité pour l'argument de type string
> fonctionne mais pas 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 .NET 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,
Voilà un exemple de récursivité avec tableau ArrayList
je sais pas si c'est bien ça que vous cherchiez ! mais bon ça peut aidé !
Cordialement
--
Mail : http://cerbermail.com/?rIXgaw9Xsl
Site : http://troxsa.info
"Jessy Sempere [MVP]" <jessy.sempere@prg.sncf.fr> a écrit dans le message
news: 43f477f0$1@news.sncf.fr...
> 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 .NET sous visual studio .net...
>
> A mon grand désespoir, la récursivité pour l'argument de type string
> fonctionne mais pas 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 .NET 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,
Voilà un exemple de récursivité avec tableau ArrayList
je sais pas si c'est bien ça que vous cherchiez ! mais bon ça peut aidé !
Cordialement
--
Mail : http://cerbermail.com/?rIXgaw9Xsl
Site : http://troxsa.info
"Jessy Sempere [MVP]" a écrit dans le message
news: 43f477f0$
> 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 .NET sous visual studio .net...
>
> A mon grand désespoir, la récursivité pour l'argument de type string
> fonctionne mais pas 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 .NET 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/
> ------------------------------------
>
>
>
Re,
Merci pour ta réponse...
En fait je pense savoir d'où viens le problème, en VBA, les arguments
dans une fonction sont passer par défaut par référence, surtout un
tableau qui ne peut pas être passé par valeur...
Visiblement, sous VB.NET, cette contrainte n'éxiste pas lorsque j'ai
retranscri mon code VBA sous VB.NET, il m'a mis pour tous mes arguments
ByVal y compris pour mon argument tableau...
Je ne peux pas tester au boulot mais je testerais ce soir pour vérifier ma
théorie ???
Sinon, en terme de rapidité, est ce qu'après compilation de mon code si il
fonctionne j'aurais les même performances que si je faisais plus ou moins
même code sous C ???
@+
Jessy Sempere - Access MVP
------------------------------------
Site @ccess : http://access.jessy.free.fr/
Pour l'efficacité de tous :
http://www.mpfa.info/
------------------------------------
"TroXsA" a écrit dans le message de
news:dt1u5u$nab$
> Bonjour,
>
> Voilà un exemple de récursivité avec tableau ArrayList
>
>
> je sais pas si c'est bien ça que vous cherchiez ! mais bon ça peut aidé
>
> Cordialement
>
> --
>
> Mail : http://cerbermail.com/?rIXgaw9Xsl
> Site : http://troxsa.info
>
>
> "Jessy Sempere [MVP]" a écrit dans le
de
> news: 43f477f0$
> > 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 .NET sous visual studio .net...
> >
> > A mon grand désespoir, la récursivité pour l'argument de type string
> > fonctionne mais pas celle pour l'argument tableau, celui-ci ne garde
> > ses
> > valeurs en fonction du son niveau de récursivité ???
> >
> > Ma question est donc peut-on faire sous VB .NET 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/
> > ------------------------------------
> >
> >
> >
>
>
Re,
Merci pour ta réponse...
En fait je pense savoir d'où viens le problème, en VBA, les arguments
dans une fonction sont passer par défaut par référence, surtout un
tableau qui ne peut pas être passé par valeur...
Visiblement, sous VB.NET, cette contrainte n'éxiste pas lorsque j'ai
retranscri mon code VBA sous VB.NET, il m'a mis pour tous mes arguments
ByVal y compris pour mon argument tableau...
Je ne peux pas tester au boulot mais je testerais ce soir pour vérifier ma
théorie ???
Sinon, en terme de rapidité, est ce qu'après compilation de mon code si il
fonctionne j'aurais les même performances que si je faisais plus ou moins
même code sous C ???
@+
Jessy Sempere - Access MVP
news@access.fr.vu
------------------------------------
Site @ccess : http://access.jessy.free.fr/
Pour l'efficacité de tous :
http://www.mpfa.info/
------------------------------------
"TroXsA" <neat@pk.com> a écrit dans le message de
news:dt1u5u$nab$1@s1.news.oleane.net...
> Bonjour,
>
> Voilà un exemple de récursivité avec tableau ArrayList
>
>
> je sais pas si c'est bien ça que vous cherchiez ! mais bon ça peut aidé
>
> Cordialement
>
> --
>
> Mail : http://cerbermail.com/?rIXgaw9Xsl
> Site : http://troxsa.info
>
>
> "Jessy Sempere [MVP]" <jessy.sempere@prg.sncf.fr> a écrit dans le
de
> news: 43f477f0$1@news.sncf.fr...
> > 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 .NET sous visual studio .net...
> >
> > A mon grand désespoir, la récursivité pour l'argument de type string
> > fonctionne mais pas celle pour l'argument tableau, celui-ci ne garde
> > ses
> > valeurs en fonction du son niveau de récursivité ???
> >
> > Ma question est donc peut-on faire sous VB .NET 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/
> > ------------------------------------
> >
> >
> >
>
>
Re,
Merci pour ta réponse...
En fait je pense savoir d'où viens le problème, en VBA, les arguments
dans une fonction sont passer par défaut par référence, surtout un
tableau qui ne peut pas être passé par valeur...
Visiblement, sous VB.NET, cette contrainte n'éxiste pas lorsque j'ai
retranscri mon code VBA sous VB.NET, il m'a mis pour tous mes arguments
ByVal y compris pour mon argument tableau...
Je ne peux pas tester au boulot mais je testerais ce soir pour vérifier ma
théorie ???
Sinon, en terme de rapidité, est ce qu'après compilation de mon code si il
fonctionne j'aurais les même performances que si je faisais plus ou moins
même code sous C ???
@+
Jessy Sempere - Access MVP
------------------------------------
Site @ccess : http://access.jessy.free.fr/
Pour l'efficacité de tous :
http://www.mpfa.info/
------------------------------------
"TroXsA" a écrit dans le message de
news:dt1u5u$nab$
> Bonjour,
>
> Voilà un exemple de récursivité avec tableau ArrayList
>
>
> je sais pas si c'est bien ça que vous cherchiez ! mais bon ça peut aidé
>
> Cordialement
>
> --
>
> Mail : http://cerbermail.com/?rIXgaw9Xsl
> Site : http://troxsa.info
>
>
> "Jessy Sempere [MVP]" a écrit dans le
de
> news: 43f477f0$
> > 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 .NET sous visual studio .net...
> >
> > A mon grand désespoir, la récursivité pour l'argument de type string
> > fonctionne mais pas celle pour l'argument tableau, celui-ci ne garde
> > ses
> > valeurs en fonction du son niveau de récursivité ???
> >
> > Ma question est donc peut-on faire sous VB .NET 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/
> > ------------------------------------
> >
> >
> >
>
>
Difficile à dire sans voir le code. Le problème est peut-être qu'un
est un objet donc un simple pointeur. Que le pointeur soit passé par
référence ou par valeur, il pointe de toute façon sur les données
ce qui annihile la récursivité.
Peut-être un tableau de tableaux, l'un des arguments de dimension étant le
niveau de récursivité.
Il est peut être possible aussi de revoir l'algo. Le fond du problème est
veux tu vraiment que chaque niveau de récursivité ait son propre tableau ?
Cela impliequerait de copier les données à chaque niveau de qui peut
peut-être être évité (par exemple avec une pile).
--
Patrice
"Jessy Sempere [MVP]" a écrit dans le message
news:43f48aaf$
> Re,
>
> Merci pour ta réponse...
> En fait je pense savoir d'où viens le problème, en VBA, les arguments
passer
> dans une fonction sont passer par défaut par référence, surtout un
argument
> tableau qui ne peut pas être passé par valeur...
> Visiblement, sous VB.NET, cette contrainte n'éxiste pas lorsque j'ai
> retranscri mon code VBA sous VB.NET, il m'a mis pour tous mes arguments
> ByVal y compris pour mon argument tableau...
>
> Je ne peux pas tester au boulot mais je testerais ce soir pour vérifier
> théorie ???
>
> Sinon, en terme de rapidité, est ce qu'après compilation de mon code si
> fonctionne j'aurais les même performances que si je faisais plus ou
le
> même code sous C ???
>
> @+
> Jessy Sempere - Access MVP
>
> ------------------------------------
> Site @ccess : http://access.jessy.free.fr/
> Pour l'efficacité de tous :
> http://www.mpfa.info/
> ------------------------------------
> "TroXsA" a écrit dans le message de
> news:dt1u5u$nab$
> > Bonjour,
> >
> > Voilà un exemple de récursivité avec tableau ArrayList
> >
>
> >
> > je sais pas si c'est bien ça que vous cherchiez ! mais bon ça peut
!
> >
> > Cordialement
> >
> > --
> >
> > Mail : http://cerbermail.com/?rIXgaw9Xsl
> > Site : http://troxsa.info
> >
> >
> > "Jessy Sempere [MVP]" a écrit dans le
message
> de
> > news: 43f477f0$
> > > 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 .NET sous visual studio .net...
> > >
> > > A mon grand désespoir, la récursivité pour l'argument de type string
> > > fonctionne mais pas 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 .NET une fonction
> > > 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/
> > > ------------------------------------
> > >
> > >
> > >
> >
> >
>
>
Difficile à dire sans voir le code. Le problème est peut-être qu'un
est un objet donc un simple pointeur. Que le pointeur soit passé par
référence ou par valeur, il pointe de toute façon sur les données
ce qui annihile la récursivité.
Peut-être un tableau de tableaux, l'un des arguments de dimension étant le
niveau de récursivité.
Il est peut être possible aussi de revoir l'algo. Le fond du problème est
veux tu vraiment que chaque niveau de récursivité ait son propre tableau ?
Cela impliequerait de copier les données à chaque niveau de qui peut
peut-être être évité (par exemple avec une pile).
--
Patrice
"Jessy Sempere [MVP]" <jessy.sempere@prg.sncf.fr> a écrit dans le message
news:43f48aaf$1@news.sncf.fr...
> Re,
>
> Merci pour ta réponse...
> En fait je pense savoir d'où viens le problème, en VBA, les arguments
passer
> dans une fonction sont passer par défaut par référence, surtout un
argument
> tableau qui ne peut pas être passé par valeur...
> Visiblement, sous VB.NET, cette contrainte n'éxiste pas lorsque j'ai
> retranscri mon code VBA sous VB.NET, il m'a mis pour tous mes arguments
> ByVal y compris pour mon argument tableau...
>
> Je ne peux pas tester au boulot mais je testerais ce soir pour vérifier
> théorie ???
>
> Sinon, en terme de rapidité, est ce qu'après compilation de mon code si
> fonctionne j'aurais les même performances que si je faisais plus ou
le
> même code sous C ???
>
> @+
> Jessy Sempere - Access MVP
> news@access.fr.vu
> ------------------------------------
> Site @ccess : http://access.jessy.free.fr/
> Pour l'efficacité de tous :
> http://www.mpfa.info/
> ------------------------------------
> "TroXsA" <neat@pk.com> a écrit dans le message de
> news:dt1u5u$nab$1@s1.news.oleane.net...
> > Bonjour,
> >
> > Voilà un exemple de récursivité avec tableau ArrayList
> >
>
> >
> > je sais pas si c'est bien ça que vous cherchiez ! mais bon ça peut
!
> >
> > Cordialement
> >
> > --
> >
> > Mail : http://cerbermail.com/?rIXgaw9Xsl
> > Site : http://troxsa.info
> >
> >
> > "Jessy Sempere [MVP]" <jessy.sempere@prg.sncf.fr> a écrit dans le
message
> de
> > news: 43f477f0$1@news.sncf.fr...
> > > 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 .NET sous visual studio .net...
> > >
> > > A mon grand désespoir, la récursivité pour l'argument de type string
> > > fonctionne mais pas 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 .NET une fonction
> > > 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/
> > > ------------------------------------
> > >
> > >
> > >
> >
> >
>
>
Difficile à dire sans voir le code. Le problème est peut-être qu'un
est un objet donc un simple pointeur. Que le pointeur soit passé par
référence ou par valeur, il pointe de toute façon sur les données
ce qui annihile la récursivité.
Peut-être un tableau de tableaux, l'un des arguments de dimension étant le
niveau de récursivité.
Il est peut être possible aussi de revoir l'algo. Le fond du problème est
veux tu vraiment que chaque niveau de récursivité ait son propre tableau ?
Cela impliequerait de copier les données à chaque niveau de qui peut
peut-être être évité (par exemple avec une pile).
--
Patrice
"Jessy Sempere [MVP]" a écrit dans le message
news:43f48aaf$
> Re,
>
> Merci pour ta réponse...
> En fait je pense savoir d'où viens le problème, en VBA, les arguments
passer
> dans une fonction sont passer par défaut par référence, surtout un
argument
> tableau qui ne peut pas être passé par valeur...
> Visiblement, sous VB.NET, cette contrainte n'éxiste pas lorsque j'ai
> retranscri mon code VBA sous VB.NET, il m'a mis pour tous mes arguments
> ByVal y compris pour mon argument tableau...
>
> Je ne peux pas tester au boulot mais je testerais ce soir pour vérifier
> théorie ???
>
> Sinon, en terme de rapidité, est ce qu'après compilation de mon code si
> fonctionne j'aurais les même performances que si je faisais plus ou
le
> même code sous C ???
>
> @+
> Jessy Sempere - Access MVP
>
> ------------------------------------
> Site @ccess : http://access.jessy.free.fr/
> Pour l'efficacité de tous :
> http://www.mpfa.info/
> ------------------------------------
> "TroXsA" a écrit dans le message de
> news:dt1u5u$nab$
> > Bonjour,
> >
> > Voilà un exemple de récursivité avec tableau ArrayList
> >
>
> >
> > je sais pas si c'est bien ça que vous cherchiez ! mais bon ça peut
!
> >
> > Cordialement
> >
> > --
> >
> > Mail : http://cerbermail.com/?rIXgaw9Xsl
> > Site : http://troxsa.info
> >
> >
> > "Jessy Sempere [MVP]" a écrit dans le
message
> de
> > news: 43f477f0$
> > > 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 .NET sous visual studio .net...
> > >
> > > A mon grand désespoir, la récursivité pour l'argument de type string
> > > fonctionne mais pas 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 .NET une fonction
> > > 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
Bon, ça ne fonctionne pas même en mettant byRef...
Sinon voilà le complément d'information que j'avais mis dans le newsgroupe
sur VB6 :
Sinon, je n'ai pas le code que j'ai adapter chez moi pour VB .NET, par
contre j'ai mon code VBA, je vais le réduire un maximum pour aller à
l'essentiel et montrer son fonctionnement :
Le but, c'est de comparer une matrice et de voir quelle combinaison
se couvrir mutuellement, exemple d'une matrice à comparer :
1 2 3 4 5 6 7 8 9 10 11 12
----------------------------------------------------------
1 1 1 1 0 1 0 1 0 0 0 0 0
2 1 1 0 1 0 1 0 1 0 0 0 0
3 1 0 1 1 1 0 0 0 1 0 0 0
4 0 1 1 1 0 1 0 0 0 1 0 0
5 1 0 1 0 1 1 0 0 0 0 1 0
6 0 1 0 1 1 1 0 0 0 0 0 1
7 1 0 0 0 0 0 1 1 1 0 1 0
8 0 1 0 0 0 0 1 1 0 1 0 1
9 0 0 1 0 0 0 1 0 1 1 1 0
10 0 0 0 1 0 0 0 1 1 1 0 1
11 0 0 0 0 1 0 1 0 1 0 1 1
12 0 0 0 0 0 1 0 1 0 1 1 1
Donc cette matrice sera déclarée en globale dans le code, le but de la
fonction, c'est de combiner la colonne 1 avec la 2 et de vérifier que la
somme de chaque ligne soit différente de 0, si on a 0, on combine alor la
avec la 3, ensuite la 1 avec la 4... ensuite, 2 et 3, 2 et 4, ...
Si on a rien, on va descendre d'un niveau et combiner la 1 et 2 avec la 3,
la 1 et 2 avec la 4,... , 1 et 3 avec la 4, 1 et 3 avec la 5, ...
Bon, pour chaque matrice par contre, je déterminer dès le départ le nombre
de combinaison minimum, ici, c'est 3, et pour ce cas les solutions sont :
1;3;12 ou 1;5;10 ou 1;10;12 ou 2;4;11 ou 2;6;9 ou 2;9;11 ou 3;5;8 ou
ou 4;6;7 ou 4;7;11 ou 5;8;10 ou 6;7;9
Voici donc à la grosse ce que fais la fonction récursive sous VBA et elle
fonctionne. Mais, bon, pour ce cas, c'est très rapide mais quand elle fait
200 par 200 avec comme combinaison mimimum, 23 niveau de regroupement, là,
ça ne plante pas, mais c'est très long... D'où, le faire sur un autre
language ???
Voici le code VBA (pas complet) mais qui ne marche pas après conversion
VB .NET :
'Déclaration de variables globales :
Dim lngCombi as long 'nombre de niveaux de récursivité
dim tabResult() as integer 'tableaux de comparaison (matrice de l'exemple
supérieur)
dim tabSolution() as string
dim lngSolution as long
dim lngAllGrille as long
function lancement()
lngcombi = 3
lngallgrille
tabresult() = matrice de l'exemple
redim tabcombi(1 to lngallgrille) 'tableau avec une dimension avec que des
frecursive_combinaison 1,1,"", tabcombi
end function
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
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 - Access MVP
------------------------------------
Site @ccess : http://access.jessy.free.fr/
Pour l'efficacité de tous :
http://www.mpfa.info/
------------------------------------
"Patrice" a écrit dans le message de
news:
> Difficile à dire sans voir le code. Le problème est peut-être qu'un
tableau
> est un objet donc un simple pointeur. Que le pointeur soit passé par
> référence ou par valeur, il pointe de toute façon sur les données
originales
> ce qui annihile la récursivité.
>
> Peut-être un tableau de tableaux, l'un des arguments de dimension étant
> niveau de récursivité.
>
> Il est peut être possible aussi de revoir l'algo. Le fond du problème
> veux tu vraiment que chaque niveau de récursivité ait son propre tableau
> Cela impliequerait de copier les données à chaque niveau de qui peut
> peut-être être évité (par exemple avec une pile).
>
>
> --
> Patrice
>
> "Jessy Sempere [MVP]" a écrit dans le
de
> news:43f48aaf$
> > Re,
> >
> > Merci pour ta réponse...
> > En fait je pense savoir d'où viens le problème, en VBA, les arguments
> passer
> > dans une fonction sont passer par défaut par référence, surtout un
> argument
> > tableau qui ne peut pas être passé par valeur...
> > Visiblement, sous VB.NET, cette contrainte n'éxiste pas lorsque j'ai
> > retranscri mon code VBA sous VB.NET, il m'a mis pour tous mes
> > ByVal y compris pour mon argument tableau...
> >
> > Je ne peux pas tester au boulot mais je testerais ce soir pour
ma
> > théorie ???
> >
> > Sinon, en terme de rapidité, est ce qu'après compilation de mon code
il
> > fonctionne j'aurais les même performances que si je faisais plus ou
moins
> le
> > même code sous C ???
> >
> > @+
> > Jessy Sempere - Access MVP
> >
> > ------------------------------------
> > Site @ccess : http://access.jessy.free.fr/
> > Pour l'efficacité de tous :
> > http://www.mpfa.info/
> > ------------------------------------
> > "TroXsA" a écrit dans le message de
> > news:dt1u5u$nab$
> > > Bonjour,
> > >
> > > Voilà un exemple de récursivité avec tableau ArrayList
> > >
> >
>
> > >
> > > je sais pas si c'est bien ça que vous cherchiez ! mais bon ça peut
aidé
> !
> > >
> > > Cordialement
> > >
> > > --
> > >
> > > Mail : http://cerbermail.com/?rIXgaw9Xsl
> > > Site : http://troxsa.info
> > >
> > >
> > > "Jessy Sempere [MVP]" a écrit dans le
> message
> > de
> > > news: 43f477f0$
> > > > 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
> > > > accélérer tout ça, j'ai retranscrit
> > > > mon code en VB .NET sous visual studio .net...
> > > >
> > > > A mon grand désespoir, la récursivité pour l'argument de type
> > > > fonctionne mais pas celle pour l'argument tableau, celui-ci ne
> par
> > > > ses
> > > > valeurs en fonction du son niveau de récursivité ???
> > > >
> > > > Ma question est donc peut-on faire sous VB .NET 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
Bon, ça ne fonctionne pas même en mettant byRef...
Sinon voilà le complément d'information que j'avais mis dans le newsgroupe
sur VB6 :
Sinon, je n'ai pas le code que j'ai adapter chez moi pour VB .NET, par
contre j'ai mon code VBA, je vais le réduire un maximum pour aller à
l'essentiel et montrer son fonctionnement :
Le but, c'est de comparer une matrice et de voir quelle combinaison
se couvrir mutuellement, exemple d'une matrice à comparer :
1 2 3 4 5 6 7 8 9 10 11 12
----------------------------------------------------------
1 1 1 1 0 1 0 1 0 0 0 0 0
2 1 1 0 1 0 1 0 1 0 0 0 0
3 1 0 1 1 1 0 0 0 1 0 0 0
4 0 1 1 1 0 1 0 0 0 1 0 0
5 1 0 1 0 1 1 0 0 0 0 1 0
6 0 1 0 1 1 1 0 0 0 0 0 1
7 1 0 0 0 0 0 1 1 1 0 1 0
8 0 1 0 0 0 0 1 1 0 1 0 1
9 0 0 1 0 0 0 1 0 1 1 1 0
10 0 0 0 1 0 0 0 1 1 1 0 1
11 0 0 0 0 1 0 1 0 1 0 1 1
12 0 0 0 0 0 1 0 1 0 1 1 1
Donc cette matrice sera déclarée en globale dans le code, le but de la
fonction, c'est de combiner la colonne 1 avec la 2 et de vérifier que la
somme de chaque ligne soit différente de 0, si on a 0, on combine alor la
avec la 3, ensuite la 1 avec la 4... ensuite, 2 et 3, 2 et 4, ...
Si on a rien, on va descendre d'un niveau et combiner la 1 et 2 avec la 3,
la 1 et 2 avec la 4,... , 1 et 3 avec la 4, 1 et 3 avec la 5, ...
Bon, pour chaque matrice par contre, je déterminer dès le départ le nombre
de combinaison minimum, ici, c'est 3, et pour ce cas les solutions sont :
1;3;12 ou 1;5;10 ou 1;10;12 ou 2;4;11 ou 2;6;9 ou 2;9;11 ou 3;5;8 ou
ou 4;6;7 ou 4;7;11 ou 5;8;10 ou 6;7;9
Voici donc à la grosse ce que fais la fonction récursive sous VBA et elle
fonctionne. Mais, bon, pour ce cas, c'est très rapide mais quand elle fait
200 par 200 avec comme combinaison mimimum, 23 niveau de regroupement, là,
ça ne plante pas, mais c'est très long... D'où, le faire sur un autre
language ???
Voici le code VBA (pas complet) mais qui ne marche pas après conversion
VB .NET :
'Déclaration de variables globales :
Dim lngCombi as long 'nombre de niveaux de récursivité
dim tabResult() as integer 'tableaux de comparaison (matrice de l'exemple
supérieur)
dim tabSolution() as string
dim lngSolution as long
dim lngAllGrille as long
function lancement()
lngcombi = 3
lngallgrille
tabresult() = matrice de l'exemple
redim tabcombi(1 to lngallgrille) 'tableau avec une dimension avec que des
frecursive_combinaison 1,1,"", tabcombi
end function
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
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 - Access MVP
news@access.fr.vu
------------------------------------
Site @ccess : http://access.jessy.free.fr/
Pour l'efficacité de tous :
http://www.mpfa.info/
------------------------------------
"Patrice" <a@bc.c> a écrit dans le message de
news:uGVdRpxMGHA.2828@TK2MSFTNGP12.phx.gbl...
> Difficile à dire sans voir le code. Le problème est peut-être qu'un
tableau
> est un objet donc un simple pointeur. Que le pointeur soit passé par
> référence ou par valeur, il pointe de toute façon sur les données
originales
> ce qui annihile la récursivité.
>
> Peut-être un tableau de tableaux, l'un des arguments de dimension étant
> niveau de récursivité.
>
> Il est peut être possible aussi de revoir l'algo. Le fond du problème
> veux tu vraiment que chaque niveau de récursivité ait son propre tableau
> Cela impliequerait de copier les données à chaque niveau de qui peut
> peut-être être évité (par exemple avec une pile).
>
>
> --
> Patrice
>
> "Jessy Sempere [MVP]" <jessy.sempere@prg.sncf.fr> a écrit dans le
de
> news:43f48aaf$1@news.sncf.fr...
> > Re,
> >
> > Merci pour ta réponse...
> > En fait je pense savoir d'où viens le problème, en VBA, les arguments
> passer
> > dans une fonction sont passer par défaut par référence, surtout un
> argument
> > tableau qui ne peut pas être passé par valeur...
> > Visiblement, sous VB.NET, cette contrainte n'éxiste pas lorsque j'ai
> > retranscri mon code VBA sous VB.NET, il m'a mis pour tous mes
> > ByVal y compris pour mon argument tableau...
> >
> > Je ne peux pas tester au boulot mais je testerais ce soir pour
ma
> > théorie ???
> >
> > Sinon, en terme de rapidité, est ce qu'après compilation de mon code
il
> > fonctionne j'aurais les même performances que si je faisais plus ou
moins
> le
> > même code sous C ???
> >
> > @+
> > Jessy Sempere - Access MVP
> > news@access.fr.vu
> > ------------------------------------
> > Site @ccess : http://access.jessy.free.fr/
> > Pour l'efficacité de tous :
> > http://www.mpfa.info/
> > ------------------------------------
> > "TroXsA" <neat@pk.com> a écrit dans le message de
> > news:dt1u5u$nab$1@s1.news.oleane.net...
> > > Bonjour,
> > >
> > > Voilà un exemple de récursivité avec tableau ArrayList
> > >
> >
>
> > >
> > > je sais pas si c'est bien ça que vous cherchiez ! mais bon ça peut
aidé
> !
> > >
> > > Cordialement
> > >
> > > --
> > >
> > > Mail : http://cerbermail.com/?rIXgaw9Xsl
> > > Site : http://troxsa.info
> > >
> > >
> > > "Jessy Sempere [MVP]" <jessy.sempere@prg.sncf.fr> a écrit dans le
> message
> > de
> > > news: 43f477f0$1@news.sncf.fr...
> > > > 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
> > > > accélérer tout ça, j'ai retranscrit
> > > > mon code en VB .NET sous visual studio .net...
> > > >
> > > > A mon grand désespoir, la récursivité pour l'argument de type
> > > > fonctionne mais pas celle pour l'argument tableau, celui-ci ne
> par
> > > > ses
> > > > valeurs en fonction du son niveau de récursivité ???
> > > >
> > > > Ma question est donc peut-on faire sous VB .NET 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
Bon, ça ne fonctionne pas même en mettant byRef...
Sinon voilà le complément d'information que j'avais mis dans le newsgroupe
sur VB6 :
Sinon, je n'ai pas le code que j'ai adapter chez moi pour VB .NET, par
contre j'ai mon code VBA, je vais le réduire un maximum pour aller à
l'essentiel et montrer son fonctionnement :
Le but, c'est de comparer une matrice et de voir quelle combinaison
se couvrir mutuellement, exemple d'une matrice à comparer :
1 2 3 4 5 6 7 8 9 10 11 12
----------------------------------------------------------
1 1 1 1 0 1 0 1 0 0 0 0 0
2 1 1 0 1 0 1 0 1 0 0 0 0
3 1 0 1 1 1 0 0 0 1 0 0 0
4 0 1 1 1 0 1 0 0 0 1 0 0
5 1 0 1 0 1 1 0 0 0 0 1 0
6 0 1 0 1 1 1 0 0 0 0 0 1
7 1 0 0 0 0 0 1 1 1 0 1 0
8 0 1 0 0 0 0 1 1 0 1 0 1
9 0 0 1 0 0 0 1 0 1 1 1 0
10 0 0 0 1 0 0 0 1 1 1 0 1
11 0 0 0 0 1 0 1 0 1 0 1 1
12 0 0 0 0 0 1 0 1 0 1 1 1
Donc cette matrice sera déclarée en globale dans le code, le but de la
fonction, c'est de combiner la colonne 1 avec la 2 et de vérifier que la
somme de chaque ligne soit différente de 0, si on a 0, on combine alor la
avec la 3, ensuite la 1 avec la 4... ensuite, 2 et 3, 2 et 4, ...
Si on a rien, on va descendre d'un niveau et combiner la 1 et 2 avec la 3,
la 1 et 2 avec la 4,... , 1 et 3 avec la 4, 1 et 3 avec la 5, ...
Bon, pour chaque matrice par contre, je déterminer dès le départ le nombre
de combinaison minimum, ici, c'est 3, et pour ce cas les solutions sont :
1;3;12 ou 1;5;10 ou 1;10;12 ou 2;4;11 ou 2;6;9 ou 2;9;11 ou 3;5;8 ou
ou 4;6;7 ou 4;7;11 ou 5;8;10 ou 6;7;9
Voici donc à la grosse ce que fais la fonction récursive sous VBA et elle
fonctionne. Mais, bon, pour ce cas, c'est très rapide mais quand elle fait
200 par 200 avec comme combinaison mimimum, 23 niveau de regroupement, là,
ça ne plante pas, mais c'est très long... D'où, le faire sur un autre
language ???
Voici le code VBA (pas complet) mais qui ne marche pas après conversion
VB .NET :
'Déclaration de variables globales :
Dim lngCombi as long 'nombre de niveaux de récursivité
dim tabResult() as integer 'tableaux de comparaison (matrice de l'exemple
supérieur)
dim tabSolution() as string
dim lngSolution as long
dim lngAllGrille as long
function lancement()
lngcombi = 3
lngallgrille
tabresult() = matrice de l'exemple
redim tabcombi(1 to lngallgrille) 'tableau avec une dimension avec que des
frecursive_combinaison 1,1,"", tabcombi
end function
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
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 - Access MVP
------------------------------------
Site @ccess : http://access.jessy.free.fr/
Pour l'efficacité de tous :
http://www.mpfa.info/
------------------------------------
"Patrice" a écrit dans le message de
news:
> Difficile à dire sans voir le code. Le problème est peut-être qu'un
tableau
> est un objet donc un simple pointeur. Que le pointeur soit passé par
> référence ou par valeur, il pointe de toute façon sur les données
originales
> ce qui annihile la récursivité.
>
> Peut-être un tableau de tableaux, l'un des arguments de dimension étant
> niveau de récursivité.
>
> Il est peut être possible aussi de revoir l'algo. Le fond du problème
> veux tu vraiment que chaque niveau de récursivité ait son propre tableau
> Cela impliequerait de copier les données à chaque niveau de qui peut
> peut-être être évité (par exemple avec une pile).
>
>
> --
> Patrice
>
> "Jessy Sempere [MVP]" a écrit dans le
de
> news:43f48aaf$
> > Re,
> >
> > Merci pour ta réponse...
> > En fait je pense savoir d'où viens le problème, en VBA, les arguments
> passer
> > dans une fonction sont passer par défaut par référence, surtout un
> argument
> > tableau qui ne peut pas être passé par valeur...
> > Visiblement, sous VB.NET, cette contrainte n'éxiste pas lorsque j'ai
> > retranscri mon code VBA sous VB.NET, il m'a mis pour tous mes
> > ByVal y compris pour mon argument tableau...
> >
> > Je ne peux pas tester au boulot mais je testerais ce soir pour
ma
> > théorie ???
> >
> > Sinon, en terme de rapidité, est ce qu'après compilation de mon code
il
> > fonctionne j'aurais les même performances que si je faisais plus ou
moins
> le
> > même code sous C ???
> >
> > @+
> > Jessy Sempere - Access MVP
> >
> > ------------------------------------
> > Site @ccess : http://access.jessy.free.fr/
> > Pour l'efficacité de tous :
> > http://www.mpfa.info/
> > ------------------------------------
> > "TroXsA" a écrit dans le message de
> > news:dt1u5u$nab$
> > > Bonjour,
> > >
> > > Voilà un exemple de récursivité avec tableau ArrayList
> > >
> >
>
> > >
> > > je sais pas si c'est bien ça que vous cherchiez ! mais bon ça peut
aidé
> !
> > >
> > > Cordialement
> > >
> > > --
> > >
> > > Mail : http://cerbermail.com/?rIXgaw9Xsl
> > > Site : http://troxsa.info
> > >
> > >
> > > "Jessy Sempere [MVP]" a écrit dans le
> message
> > de
> > > news: 43f477f0$
> > > > 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
> > > > accélérer tout ça, j'ai retranscrit
> > > > mon code en VB .NET sous visual studio .net...
> > > >
> > > > A mon grand désespoir, la récursivité pour l'argument de type
> > > > fonctionne mais pas celle pour l'argument tableau, celui-ci ne
> par
> > > > ses
> > > > valeurs en fonction du son niveau de récursivité ???
> > > >
> > > > Ma question est donc peut-on faire sous VB .NET 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/
> > > > ------------------------------------
> > > >
> > > >
> > > >
> > >
> > >
> >
> >
>
>
A priori je pense que c'est parce que les tableaux sont des zones mémoires
dans VBA (ou autres languages) mais des objets (donc des pointeurs) en
comme expliqué précédemment.
Je pense qu'il faut que tu copies explicitement le tableau (de mémoire, il
doit y avoir une méthode Copy qui permet de copier un tableau) avant de
passer la copie au niveau suivant...
Tu peux peut-être commencer par faire une maquette avec un tableau 2x2 qui
remplit les cellules avec le niveau de récursivté et imprime le tableau
vérifier séparemment ce mécanisme avant de le mettre en oeuvre dans ton
algo.
Je ne suis pas sûr de bien comprendre le principe (la somme est
nécessairement différente de 0 à partir ou tu as au moins un 1 dans chaque
ligne ?). Je ne suis pas sûr non plus que la récursivité soit la meilleure
solution (je pense par exemple qu'il serait sans doute possible de
le problème en calculant les solutions plutôt que par la force brute).
"Jessy Sempere [MVP]" a écrit dans le message
news:43f5783f$
> Bonjour
>
> Bon, ça ne fonctionne pas même en mettant byRef...
>
> Sinon voilà le complément d'information que j'avais mis dans le
> sur VB6 :
>
> Sinon, je n'ai pas le code que j'ai adapter chez moi pour VB .NET, par
> contre j'ai mon code VBA, je vais le réduire un maximum pour aller à
> l'essentiel et montrer son fonctionnement :
> Le but, c'est de comparer une matrice et de voir quelle combinaison
peuvent
> se couvrir mutuellement, exemple d'une matrice à comparer :
>
> 1 2 3 4 5 6 7 8 9 10 11 12
> ----------------------------------------------------------
> 1 1 1 1 0 1 0 1 0 0 0 0 0
> 2 1 1 0 1 0 1 0 1 0 0 0 0
> 3 1 0 1 1 1 0 0 0 1 0 0 0
> 4 0 1 1 1 0 1 0 0 0 1 0 0
> 5 1 0 1 0 1 1 0 0 0 0 1 0
> 6 0 1 0 1 1 1 0 0 0 0 0 1
> 7 1 0 0 0 0 0 1 1 1 0 1 0
> 8 0 1 0 0 0 0 1 1 0 1 0 1
> 9 0 0 1 0 0 0 1 0 1 1 1 0
> 10 0 0 0 1 0 0 0 1 1 1 0 1
> 11 0 0 0 0 1 0 1 0 1 0 1 1
> 12 0 0 0 0 0 1 0 1 0 1 1 1
>
> Donc cette matrice sera déclarée en globale dans le code, le but de la
> fonction, c'est de combiner la colonne 1 avec la 2 et de vérifier que la
> somme de chaque ligne soit différente de 0, si on a 0, on combine alor
1
> avec la 3, ensuite la 1 avec la 4... ensuite, 2 et 3, 2 et 4, ...
> Si on a rien, on va descendre d'un niveau et combiner la 1 et 2 avec la
> la 1 et 2 avec la 4,... , 1 et 3 avec la 4, 1 et 3 avec la 5, ...
>
> Bon, pour chaque matrice par contre, je déterminer dès le départ le
> de combinaison minimum, ici, c'est 3, et pour ce cas les solutions sont
> 1;3;12 ou 1;5;10 ou 1;10;12 ou 2;4;11 ou 2;6;9 ou 2;9;11 ou 3;5;8 ou
3;8;12
> ou 4;6;7 ou 4;7;11 ou 5;8;10 ou 6;7;9
>
> Voici donc à la grosse ce que fais la fonction récursive sous VBA et
> fonctionne. Mais, bon, pour ce cas, c'est très rapide mais quand elle
> 200 par 200 avec comme combinaison mimimum, 23 niveau de regroupement,
> ça ne plante pas, mais c'est très long... D'où, le faire sur un autre
> language ???
>
> Voici le code VBA (pas complet) mais qui ne marche pas après conversion
sous
> VB .NET :
>
> 'Déclaration de variables globales :
> Dim lngCombi as long 'nombre de niveaux de récursivité
> dim tabResult() as integer 'tableaux de comparaison (matrice de
> supérieur)
> dim tabSolution() as string
> dim lngSolution as long
> dim lngAllGrille as long
>
> function lancement()
> lngcombi = 3
> lngallgrille
> tabresult() = matrice de l'exemple
> redim tabcombi(1 to lngallgrille) 'tableau avec une dimension avec que
0
> frecursive_combinaison 1,1,"", tabcombi
>
> end function
>
> Function fRecursive_Combinaison(x, ind, strCombi As String, tabCombi()
> Integer)
> '** Fonction récursive pour les combinaisons
> Dim lngResult As Long
> Dim tabCombi_tmp() As Integer
> Dim strCombi_tmp As String
>
> 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 - Access MVP
>
> ------------------------------------
> Site @ccess : http://access.jessy.free.fr/
> Pour l'efficacité de tous :
> http://www.mpfa.info/
> ------------------------------------
> "Patrice" a écrit dans le message de
> news:
> > Difficile à dire sans voir le code. Le problème est peut-être qu'un
> tableau
> > est un objet donc un simple pointeur. Que le pointeur soit passé par
> > référence ou par valeur, il pointe de toute façon sur les données
> originales
> > ce qui annihile la récursivité.
> >
> > Peut-être un tableau de tableaux, l'un des arguments de dimension
le
> > niveau de récursivité.
> >
> > Il est peut être possible aussi de revoir l'algo. Le fond du problème
est
> > veux tu vraiment que chaque niveau de récursivité ait son propre
?
> > Cela impliequerait de copier les données à chaque niveau de qui peut
> > peut-être être évité (par exemple avec une pile).
> >
> >
> > --
> > Patrice
> >
> > "Jessy Sempere [MVP]" a écrit dans le
message
> de
> > news:43f48aaf$
> > > Re,
> > >
> > > Merci pour ta réponse...
> > > En fait je pense savoir d'où viens le problème, en VBA, les
> > passer
> > > dans une fonction sont passer par défaut par référence, surtout un
> > argument
> > > tableau qui ne peut pas être passé par valeur...
> > > Visiblement, sous VB.NET, cette contrainte n'éxiste pas lorsque j'ai
> > > retranscri mon code VBA sous VB.NET, il m'a mis pour tous mes
arguments
> > > ByVal y compris pour mon argument tableau...
> > >
> > > Je ne peux pas tester au boulot mais je testerais ce soir pour
vérifier
> ma
> > > théorie ???
> > >
> > > Sinon, en terme de rapidité, est ce qu'après compilation de mon code
si
> il
> > > fonctionne j'aurais les même performances que si je faisais plus ou
> moins
> > le
> > > même code sous C ???
> > >
> > > @+
> > > Jessy Sempere - Access MVP
> > >
> > > ------------------------------------
> > > Site @ccess : http://access.jessy.free.fr/
> > > Pour l'efficacité de tous :
> > > http://www.mpfa.info/
> > > ------------------------------------
> > > "TroXsA" a écrit dans le message de
> > > news:dt1u5u$nab$
> > > > Bonjour,
> > > >
> > > > Voilà un exemple de récursivité avec tableau ArrayList
> > > >
> > >
> >
>
> > > >
> > > > je sais pas si c'est bien ça que vous cherchiez ! mais bon ça peut
> aidé
> > !
> > > >
> > > > Cordialement
> > > >
> > > > --
> > > >
> > > > Mail : http://cerbermail.com/?rIXgaw9Xsl
> > > > Site : http://troxsa.info
> > > >
> > > >
> > > > "Jessy Sempere [MVP]" a écrit dans le
> > message
> > > de
> > > > news: 43f477f0$
> > > > > 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,
> > 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 .NET sous visual studio .net...
> > > > >
> > > > > A mon grand désespoir, la récursivité pour l'argument de type
string
> > > > > fonctionne mais pas 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 .NET 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/
> > > > > ------------------------------------
> > > > >
> > > > >
> > > > >
> > > >
> > > >
> > >
> > >
> >
> >
>
>
A priori je pense que c'est parce que les tableaux sont des zones mémoires
dans VBA (ou autres languages) mais des objets (donc des pointeurs) en
comme expliqué précédemment.
Je pense qu'il faut que tu copies explicitement le tableau (de mémoire, il
doit y avoir une méthode Copy qui permet de copier un tableau) avant de
passer la copie au niveau suivant...
Tu peux peut-être commencer par faire une maquette avec un tableau 2x2 qui
remplit les cellules avec le niveau de récursivté et imprime le tableau
vérifier séparemment ce mécanisme avant de le mettre en oeuvre dans ton
algo.
Je ne suis pas sûr de bien comprendre le principe (la somme est
nécessairement différente de 0 à partir ou tu as au moins un 1 dans chaque
ligne ?). Je ne suis pas sûr non plus que la récursivité soit la meilleure
solution (je pense par exemple qu'il serait sans doute possible de
le problème en calculant les solutions plutôt que par la force brute).
"Jessy Sempere [MVP]" <jessy.sempere@prg.sncf.fr> a écrit dans le message
news:43f5783f$1@news.sncf.fr...
> Bonjour
>
> Bon, ça ne fonctionne pas même en mettant byRef...
>
> Sinon voilà le complément d'information que j'avais mis dans le
> sur VB6 :
>
> Sinon, je n'ai pas le code que j'ai adapter chez moi pour VB .NET, par
> contre j'ai mon code VBA, je vais le réduire un maximum pour aller à
> l'essentiel et montrer son fonctionnement :
> Le but, c'est de comparer une matrice et de voir quelle combinaison
peuvent
> se couvrir mutuellement, exemple d'une matrice à comparer :
>
> 1 2 3 4 5 6 7 8 9 10 11 12
> ----------------------------------------------------------
> 1 1 1 1 0 1 0 1 0 0 0 0 0
> 2 1 1 0 1 0 1 0 1 0 0 0 0
> 3 1 0 1 1 1 0 0 0 1 0 0 0
> 4 0 1 1 1 0 1 0 0 0 1 0 0
> 5 1 0 1 0 1 1 0 0 0 0 1 0
> 6 0 1 0 1 1 1 0 0 0 0 0 1
> 7 1 0 0 0 0 0 1 1 1 0 1 0
> 8 0 1 0 0 0 0 1 1 0 1 0 1
> 9 0 0 1 0 0 0 1 0 1 1 1 0
> 10 0 0 0 1 0 0 0 1 1 1 0 1
> 11 0 0 0 0 1 0 1 0 1 0 1 1
> 12 0 0 0 0 0 1 0 1 0 1 1 1
>
> Donc cette matrice sera déclarée en globale dans le code, le but de la
> fonction, c'est de combiner la colonne 1 avec la 2 et de vérifier que la
> somme de chaque ligne soit différente de 0, si on a 0, on combine alor
1
> avec la 3, ensuite la 1 avec la 4... ensuite, 2 et 3, 2 et 4, ...
> Si on a rien, on va descendre d'un niveau et combiner la 1 et 2 avec la
> la 1 et 2 avec la 4,... , 1 et 3 avec la 4, 1 et 3 avec la 5, ...
>
> Bon, pour chaque matrice par contre, je déterminer dès le départ le
> de combinaison minimum, ici, c'est 3, et pour ce cas les solutions sont
> 1;3;12 ou 1;5;10 ou 1;10;12 ou 2;4;11 ou 2;6;9 ou 2;9;11 ou 3;5;8 ou
3;8;12
> ou 4;6;7 ou 4;7;11 ou 5;8;10 ou 6;7;9
>
> Voici donc à la grosse ce que fais la fonction récursive sous VBA et
> fonctionne. Mais, bon, pour ce cas, c'est très rapide mais quand elle
> 200 par 200 avec comme combinaison mimimum, 23 niveau de regroupement,
> ça ne plante pas, mais c'est très long... D'où, le faire sur un autre
> language ???
>
> Voici le code VBA (pas complet) mais qui ne marche pas après conversion
sous
> VB .NET :
>
> 'Déclaration de variables globales :
> Dim lngCombi as long 'nombre de niveaux de récursivité
> dim tabResult() as integer 'tableaux de comparaison (matrice de
> supérieur)
> dim tabSolution() as string
> dim lngSolution as long
> dim lngAllGrille as long
>
> function lancement()
> lngcombi = 3
> lngallgrille
> tabresult() = matrice de l'exemple
> redim tabcombi(1 to lngallgrille) 'tableau avec une dimension avec que
0
> frecursive_combinaison 1,1,"", tabcombi
>
> end function
>
> Function fRecursive_Combinaison(x, ind, strCombi As String, tabCombi()
> Integer)
> '** Fonction récursive pour les combinaisons
> Dim lngResult As Long
> Dim tabCombi_tmp() As Integer
> Dim strCombi_tmp As String
>
> 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 - Access MVP
> news@access.fr.vu
> ------------------------------------
> Site @ccess : http://access.jessy.free.fr/
> Pour l'efficacité de tous :
> http://www.mpfa.info/
> ------------------------------------
> "Patrice" <a@bc.c> a écrit dans le message de
> news:uGVdRpxMGHA.2828@TK2MSFTNGP12.phx.gbl...
> > Difficile à dire sans voir le code. Le problème est peut-être qu'un
> tableau
> > est un objet donc un simple pointeur. Que le pointeur soit passé par
> > référence ou par valeur, il pointe de toute façon sur les données
> originales
> > ce qui annihile la récursivité.
> >
> > Peut-être un tableau de tableaux, l'un des arguments de dimension
le
> > niveau de récursivité.
> >
> > Il est peut être possible aussi de revoir l'algo. Le fond du problème
est
> > veux tu vraiment que chaque niveau de récursivité ait son propre
?
> > Cela impliequerait de copier les données à chaque niveau de qui peut
> > peut-être être évité (par exemple avec une pile).
> >
> >
> > --
> > Patrice
> >
> > "Jessy Sempere [MVP]" <jessy.sempere@prg.sncf.fr> a écrit dans le
message
> de
> > news:43f48aaf$1@news.sncf.fr...
> > > Re,
> > >
> > > Merci pour ta réponse...
> > > En fait je pense savoir d'où viens le problème, en VBA, les
> > passer
> > > dans une fonction sont passer par défaut par référence, surtout un
> > argument
> > > tableau qui ne peut pas être passé par valeur...
> > > Visiblement, sous VB.NET, cette contrainte n'éxiste pas lorsque j'ai
> > > retranscri mon code VBA sous VB.NET, il m'a mis pour tous mes
arguments
> > > ByVal y compris pour mon argument tableau...
> > >
> > > Je ne peux pas tester au boulot mais je testerais ce soir pour
vérifier
> ma
> > > théorie ???
> > >
> > > Sinon, en terme de rapidité, est ce qu'après compilation de mon code
si
> il
> > > fonctionne j'aurais les même performances que si je faisais plus ou
> moins
> > le
> > > même code sous C ???
> > >
> > > @+
> > > Jessy Sempere - Access MVP
> > > news@access.fr.vu
> > > ------------------------------------
> > > Site @ccess : http://access.jessy.free.fr/
> > > Pour l'efficacité de tous :
> > > http://www.mpfa.info/
> > > ------------------------------------
> > > "TroXsA" <neat@pk.com> a écrit dans le message de
> > > news:dt1u5u$nab$1@s1.news.oleane.net...
> > > > Bonjour,
> > > >
> > > > Voilà un exemple de récursivité avec tableau ArrayList
> > > >
> > >
> >
>
> > > >
> > > > je sais pas si c'est bien ça que vous cherchiez ! mais bon ça peut
> aidé
> > !
> > > >
> > > > Cordialement
> > > >
> > > > --
> > > >
> > > > Mail : http://cerbermail.com/?rIXgaw9Xsl
> > > > Site : http://troxsa.info
> > > >
> > > >
> > > > "Jessy Sempere [MVP]" <jessy.sempere@prg.sncf.fr> a écrit dans le
> > message
> > > de
> > > > news: 43f477f0$1@news.sncf.fr...
> > > > > 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,
> > 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 .NET sous visual studio .net...
> > > > >
> > > > > A mon grand désespoir, la récursivité pour l'argument de type
string
> > > > > fonctionne mais pas 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 .NET 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/
> > > > > ------------------------------------
> > > > >
> > > > >
> > > > >
> > > >
> > > >
> > >
> > >
> >
> >
>
>
A priori je pense que c'est parce que les tableaux sont des zones mémoires
dans VBA (ou autres languages) mais des objets (donc des pointeurs) en
comme expliqué précédemment.
Je pense qu'il faut que tu copies explicitement le tableau (de mémoire, il
doit y avoir une méthode Copy qui permet de copier un tableau) avant de
passer la copie au niveau suivant...
Tu peux peut-être commencer par faire une maquette avec un tableau 2x2 qui
remplit les cellules avec le niveau de récursivté et imprime le tableau
vérifier séparemment ce mécanisme avant de le mettre en oeuvre dans ton
algo.
Je ne suis pas sûr de bien comprendre le principe (la somme est
nécessairement différente de 0 à partir ou tu as au moins un 1 dans chaque
ligne ?). Je ne suis pas sûr non plus que la récursivité soit la meilleure
solution (je pense par exemple qu'il serait sans doute possible de
le problème en calculant les solutions plutôt que par la force brute).
"Jessy Sempere [MVP]" a écrit dans le message
news:43f5783f$
> Bonjour
>
> Bon, ça ne fonctionne pas même en mettant byRef...
>
> Sinon voilà le complément d'information que j'avais mis dans le
> sur VB6 :
>
> Sinon, je n'ai pas le code que j'ai adapter chez moi pour VB .NET, par
> contre j'ai mon code VBA, je vais le réduire un maximum pour aller à
> l'essentiel et montrer son fonctionnement :
> Le but, c'est de comparer une matrice et de voir quelle combinaison
peuvent
> se couvrir mutuellement, exemple d'une matrice à comparer :
>
> 1 2 3 4 5 6 7 8 9 10 11 12
> ----------------------------------------------------------
> 1 1 1 1 0 1 0 1 0 0 0 0 0
> 2 1 1 0 1 0 1 0 1 0 0 0 0
> 3 1 0 1 1 1 0 0 0 1 0 0 0
> 4 0 1 1 1 0 1 0 0 0 1 0 0
> 5 1 0 1 0 1 1 0 0 0 0 1 0
> 6 0 1 0 1 1 1 0 0 0 0 0 1
> 7 1 0 0 0 0 0 1 1 1 0 1 0
> 8 0 1 0 0 0 0 1 1 0 1 0 1
> 9 0 0 1 0 0 0 1 0 1 1 1 0
> 10 0 0 0 1 0 0 0 1 1 1 0 1
> 11 0 0 0 0 1 0 1 0 1 0 1 1
> 12 0 0 0 0 0 1 0 1 0 1 1 1
>
> Donc cette matrice sera déclarée en globale dans le code, le but de la
> fonction, c'est de combiner la colonne 1 avec la 2 et de vérifier que la
> somme de chaque ligne soit différente de 0, si on a 0, on combine alor
1
> avec la 3, ensuite la 1 avec la 4... ensuite, 2 et 3, 2 et 4, ...
> Si on a rien, on va descendre d'un niveau et combiner la 1 et 2 avec la
> la 1 et 2 avec la 4,... , 1 et 3 avec la 4, 1 et 3 avec la 5, ...
>
> Bon, pour chaque matrice par contre, je déterminer dès le départ le
> de combinaison minimum, ici, c'est 3, et pour ce cas les solutions sont
> 1;3;12 ou 1;5;10 ou 1;10;12 ou 2;4;11 ou 2;6;9 ou 2;9;11 ou 3;5;8 ou
3;8;12
> ou 4;6;7 ou 4;7;11 ou 5;8;10 ou 6;7;9
>
> Voici donc à la grosse ce que fais la fonction récursive sous VBA et
> fonctionne. Mais, bon, pour ce cas, c'est très rapide mais quand elle
> 200 par 200 avec comme combinaison mimimum, 23 niveau de regroupement,
> ça ne plante pas, mais c'est très long... D'où, le faire sur un autre
> language ???
>
> Voici le code VBA (pas complet) mais qui ne marche pas après conversion
sous
> VB .NET :
>
> 'Déclaration de variables globales :
> Dim lngCombi as long 'nombre de niveaux de récursivité
> dim tabResult() as integer 'tableaux de comparaison (matrice de
> supérieur)
> dim tabSolution() as string
> dim lngSolution as long
> dim lngAllGrille as long
>
> function lancement()
> lngcombi = 3
> lngallgrille
> tabresult() = matrice de l'exemple
> redim tabcombi(1 to lngallgrille) 'tableau avec une dimension avec que
0
> frecursive_combinaison 1,1,"", tabcombi
>
> end function
>
> Function fRecursive_Combinaison(x, ind, strCombi As String, tabCombi()
> Integer)
> '** Fonction récursive pour les combinaisons
> Dim lngResult As Long
> Dim tabCombi_tmp() As Integer
> Dim strCombi_tmp As String
>
> 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 - Access MVP
>
> ------------------------------------
> Site @ccess : http://access.jessy.free.fr/
> Pour l'efficacité de tous :
> http://www.mpfa.info/
> ------------------------------------
> "Patrice" a écrit dans le message de
> news:
> > Difficile à dire sans voir le code. Le problème est peut-être qu'un
> tableau
> > est un objet donc un simple pointeur. Que le pointeur soit passé par
> > référence ou par valeur, il pointe de toute façon sur les données
> originales
> > ce qui annihile la récursivité.
> >
> > Peut-être un tableau de tableaux, l'un des arguments de dimension
le
> > niveau de récursivité.
> >
> > Il est peut être possible aussi de revoir l'algo. Le fond du problème
est
> > veux tu vraiment que chaque niveau de récursivité ait son propre
?
> > Cela impliequerait de copier les données à chaque niveau de qui peut
> > peut-être être évité (par exemple avec une pile).
> >
> >
> > --
> > Patrice
> >
> > "Jessy Sempere [MVP]" a écrit dans le
message
> de
> > news:43f48aaf$
> > > Re,
> > >
> > > Merci pour ta réponse...
> > > En fait je pense savoir d'où viens le problème, en VBA, les
> > passer
> > > dans une fonction sont passer par défaut par référence, surtout un
> > argument
> > > tableau qui ne peut pas être passé par valeur...
> > > Visiblement, sous VB.NET, cette contrainte n'éxiste pas lorsque j'ai
> > > retranscri mon code VBA sous VB.NET, il m'a mis pour tous mes
arguments
> > > ByVal y compris pour mon argument tableau...
> > >
> > > Je ne peux pas tester au boulot mais je testerais ce soir pour
vérifier
> ma
> > > théorie ???
> > >
> > > Sinon, en terme de rapidité, est ce qu'après compilation de mon code
si
> il
> > > fonctionne j'aurais les même performances que si je faisais plus ou
> moins
> > le
> > > même code sous C ???
> > >
> > > @+
> > > Jessy Sempere - Access MVP
> > >
> > > ------------------------------------
> > > Site @ccess : http://access.jessy.free.fr/
> > > Pour l'efficacité de tous :
> > > http://www.mpfa.info/
> > > ------------------------------------
> > > "TroXsA" a écrit dans le message de
> > > news:dt1u5u$nab$
> > > > Bonjour,
> > > >
> > > > Voilà un exemple de récursivité avec tableau ArrayList
> > > >
> > >
> >
>
> > > >
> > > > je sais pas si c'est bien ça que vous cherchiez ! mais bon ça peut
> aidé
> > !
> > > >
> > > > Cordialement
> > > >
> > > > --
> > > >
> > > > Mail : http://cerbermail.com/?rIXgaw9Xsl
> > > > Site : http://troxsa.info
> > > >
> > > >
> > > > "Jessy Sempere [MVP]" a écrit dans le
> > message
> > > de
> > > > news: 43f477f0$
> > > > > 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,
> > 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 .NET sous visual studio .net...
> > > > >
> > > > > A mon grand désespoir, la récursivité pour l'argument de type
string
> > > > > fonctionne mais pas 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 .NET 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/
> > > > > ------------------------------------
> > > > >
> > > > >
> > > > >
> > > >
> > > >
> > >
> > >
> >
> >
>
>
Re
"Patrice" a écrit :
> A priori je pense que c'est parce que les tableaux sont des zones
> dans VBA (ou autres languages) mais des objets (donc des pointeurs) en
.NET
> comme expliqué précédemment.
> Je pense qu'il faut que tu copies explicitement le tableau (de mémoire,
> doit y avoir une méthode Copy qui permet de copier un tableau) avant de
> passer la copie au niveau suivant...
Tout d'abord, merci de t'interesser à mon problème... ;-)
Si tu regardes le code en exemple, c'est bien ce que je fais, dès que je
rentre dans ma fonction récursive, je mets le tableau tabCombi() dans le
tableau temporaire tabCombi_TMP()
> Tu peux peut-être commencer par faire une maquette avec un tableau 2x2
> remplit les cellules avec le niveau de récursivté et imprime le tableau
pour
> vérifier séparemment ce mécanisme avant de le mettre en oeuvre dans ton
> algo.
>
> Je ne suis pas sûr de bien comprendre le principe (la somme est
> nécessairement différente de 0 à partir ou tu as au moins un 1 dans
> ligne ?). Je ne suis pas sûr non plus que la récursivité soit la
> solution (je pense par exemple qu'il serait sans doute possible de
résoudre
> le problème en calculant les solutions plutôt que par la force brute).
En fait si tu regardes mon exemple, tu vois que si tu combines la colonnes
1, la 2 et la 3, tu n'obtiendras pas 1 pour chaque ligne, et c'est
ce que cherche ma fonction récursive, trouver quelles combinaisons de
colonnes permet d'avoir 1 sur chaque ligne ???
(sous VBA ça fonctionne mais pas sous VB .NET)
@+
Jessy Sempere - Access MVP
------------------------------------
Site @ccess : http://access.jessy.free.fr/
Pour l'efficacité de tous :
http://www.mpfa.info/
------------------------------------
>
> "Jessy Sempere [MVP]" a écrit dans le
de
> news:43f5783f$
> > Bonjour
> >
> > Bon, ça ne fonctionne pas même en mettant byRef...
> >
> > Sinon voilà le complément d'information que j'avais mis dans le
newsgroupe
> > sur VB6 :
> >
> > Sinon, je n'ai pas le code que j'ai adapter chez moi pour VB .NET, par
> > contre j'ai mon code VBA, je vais le réduire un maximum pour aller à
> > l'essentiel et montrer son fonctionnement :
> > Le but, c'est de comparer une matrice et de voir quelle combinaison
> peuvent
> > se couvrir mutuellement, exemple d'une matrice à comparer :
> >
> > 1 2 3 4 5 6 7 8 9 10 11 12
> > ----------------------------------------------------------
> > 1 1 1 1 0 1 0 1 0 0 0 0 0
> > 2 1 1 0 1 0 1 0 1 0 0 0 0
> > 3 1 0 1 1 1 0 0 0 1 0 0 0
> > 4 0 1 1 1 0 1 0 0 0 1 0 0
> > 5 1 0 1 0 1 1 0 0 0 0 1 0
> > 6 0 1 0 1 1 1 0 0 0 0 0 1
> > 7 1 0 0 0 0 0 1 1 1 0 1 0
> > 8 0 1 0 0 0 0 1 1 0 1 0 1
> > 9 0 0 1 0 0 0 1 0 1 1 1 0
> > 10 0 0 0 1 0 0 0 1 1 1 0 1
> > 11 0 0 0 0 1 0 1 0 1 0 1 1
> > 12 0 0 0 0 0 1 0 1 0 1 1 1
> >
> > Donc cette matrice sera déclarée en globale dans le code, le but de la
> > fonction, c'est de combiner la colonne 1 avec la 2 et de vérifier que
> > somme de chaque ligne soit différente de 0, si on a 0, on combine alor
la
> 1
> > avec la 3, ensuite la 1 avec la 4... ensuite, 2 et 3, 2 et 4, ...
> > Si on a rien, on va descendre d'un niveau et combiner la 1 et 2 avec
3,
> > la 1 et 2 avec la 4,... , 1 et 3 avec la 4, 1 et 3 avec la 5, ...
> >
> > Bon, pour chaque matrice par contre, je déterminer dès le départ le
nombre
> > de combinaison minimum, ici, c'est 3, et pour ce cas les solutions
:
> > 1;3;12 ou 1;5;10 ou 1;10;12 ou 2;4;11 ou 2;6;9 ou 2;9;11 ou 3;5;8 ou
> 3;8;12
> > ou 4;6;7 ou 4;7;11 ou 5;8;10 ou 6;7;9
> >
> > Voici donc à la grosse ce que fais la fonction récursive sous VBA et
elle
> > fonctionne. Mais, bon, pour ce cas, c'est très rapide mais quand elle
fait
> > 200 par 200 avec comme combinaison mimimum, 23 niveau de regroupement,
là,
> > ça ne plante pas, mais c'est très long... D'où, le faire sur un autre
> > language ???
> >
> > Voici le code VBA (pas complet) mais qui ne marche pas après
> sous
> > VB .NET :
> >
> > 'Déclaration de variables globales :
> > Dim lngCombi as long 'nombre de niveaux de récursivité
> > dim tabResult() as integer 'tableaux de comparaison (matrice de
l'exemple
> > supérieur)
> > dim tabSolution() as string
> > dim lngSolution as long
> > dim lngAllGrille as long
> >
> > function lancement()
> > lngcombi = 3
> > lngallgrille
> > tabresult() = matrice de l'exemple
> > redim tabcombi(1 to lngallgrille) 'tableau avec une dimension avec que
des
> 0
> > frecursive_combinaison 1,1,"", tabcombi
> >
> > end function
> >
> > 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
> >
> > 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 - Access MVP
> >
> > ------------------------------------
> > Site @ccess : http://access.jessy.free.fr/
> > Pour l'efficacité de tous :
> > http://www.mpfa.info/
> > ------------------------------------
> > "Patrice" a écrit dans le message de
> > news:
> > > Difficile à dire sans voir le code. Le problème est peut-être qu'un
> > tableau
> > > est un objet donc un simple pointeur. Que le pointeur soit passé par
> > > référence ou par valeur, il pointe de toute façon sur les données
> > originales
> > > ce qui annihile la récursivité.
> > >
> > > Peut-être un tableau de tableaux, l'un des arguments de dimension
étant
> le
> > > niveau de récursivité.
> > >
> > > Il est peut être possible aussi de revoir l'algo. Le fond du
> est
> > > veux tu vraiment que chaque niveau de récursivité ait son propre
tableau
> ?
> > > Cela impliequerait de copier les données à chaque niveau de qui peut
> > > peut-être être évité (par exemple avec une pile).
> > >
> > >
> > > --
> > > Patrice
> > >
> > > "Jessy Sempere [MVP]" a écrit dans le
> message
> > de
> > > news:43f48aaf$
> > > > Re,
> > > >
> > > > Merci pour ta réponse...
> > > > En fait je pense savoir d'où viens le problème, en VBA, les
arguments
> > > passer
> > > > dans une fonction sont passer par défaut par référence, surtout un
> > > argument
> > > > tableau qui ne peut pas être passé par valeur...
> > > > Visiblement, sous VB.NET, cette contrainte n'éxiste pas lorsque
> > > > retranscri mon code VBA sous VB.NET, il m'a mis pour tous mes
> arguments
> > > > ByVal y compris pour mon argument tableau...
> > > >
> > > > Je ne peux pas tester au boulot mais je testerais ce soir pour
> vérifier
> > ma
> > > > théorie ???
> > > >
> > > > Sinon, en terme de rapidité, est ce qu'après compilation de mon
> si
> > il
> > > > fonctionne j'aurais les même performances que si je faisais plus
> > moins
> > > le
> > > > même code sous C ???
> > > >
> > > > @+
> > > > Jessy Sempere - Access MVP
> > > >
> > > > ------------------------------------
> > > > Site @ccess : http://access.jessy.free.fr/
> > > > Pour l'efficacité de tous :
> > > > http://www.mpfa.info/
> > > > ------------------------------------
> > > > "TroXsA" a écrit dans le message de
> > > > news:dt1u5u$nab$
> > > > > Bonjour,
> > > > >
> > > > > Voilà un exemple de récursivité avec tableau ArrayList
> > > > >
> > > >
> > >
> >
>
> > > > >
> > > > > je sais pas si c'est bien ça que vous cherchiez ! mais bon ça
> > aidé
> > > !
> > > > >
> > > > > Cordialement
> > > > >
> > > > > --
> > > > >
> > > > > Mail : http://cerbermail.com/?rIXgaw9Xsl
> > > > > Site : http://troxsa.info
> > > > >
> > > > >
> > > > > "Jessy Sempere [MVP]" a écrit dans
> > > message
> > > > de
> > > > > news: 43f477f0$
> > > > > > 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 .NET sous visual studio .net...
> > > > > >
> > > > > > A mon grand désespoir, la récursivité pour l'argument de type
> string
> > > > > > fonctionne mais pas 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 .NET 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/
> > > > > > ------------------------------------
> > > > > >
> > > > > >
> > > > > >
> > > > >
> > > > >
> > > >
> > > >
> > >
> > >
> >
> >
>
>
Re
"Patrice" <a@bc.c> a écrit :
> A priori je pense que c'est parce que les tableaux sont des zones
> dans VBA (ou autres languages) mais des objets (donc des pointeurs) en
.NET
> comme expliqué précédemment.
> Je pense qu'il faut que tu copies explicitement le tableau (de mémoire,
> doit y avoir une méthode Copy qui permet de copier un tableau) avant de
> passer la copie au niveau suivant...
Tout d'abord, merci de t'interesser à mon problème... ;-)
Si tu regardes le code en exemple, c'est bien ce que je fais, dès que je
rentre dans ma fonction récursive, je mets le tableau tabCombi() dans le
tableau temporaire tabCombi_TMP()
> Tu peux peut-être commencer par faire une maquette avec un tableau 2x2
> remplit les cellules avec le niveau de récursivté et imprime le tableau
pour
> vérifier séparemment ce mécanisme avant de le mettre en oeuvre dans ton
> algo.
>
> Je ne suis pas sûr de bien comprendre le principe (la somme est
> nécessairement différente de 0 à partir ou tu as au moins un 1 dans
> ligne ?). Je ne suis pas sûr non plus que la récursivité soit la
> solution (je pense par exemple qu'il serait sans doute possible de
résoudre
> le problème en calculant les solutions plutôt que par la force brute).
En fait si tu regardes mon exemple, tu vois que si tu combines la colonnes
1, la 2 et la 3, tu n'obtiendras pas 1 pour chaque ligne, et c'est
ce que cherche ma fonction récursive, trouver quelles combinaisons de
colonnes permet d'avoir 1 sur chaque ligne ???
(sous VBA ça fonctionne mais pas sous VB .NET)
@+
Jessy Sempere - Access MVP
news@access.fr.vu
------------------------------------
Site @ccess : http://access.jessy.free.fr/
Pour l'efficacité de tous :
http://www.mpfa.info/
------------------------------------
>
> "Jessy Sempere [MVP]" <jessy.sempere@prg.sncf.fr> a écrit dans le
de
> news:43f5783f$1@news.sncf.fr...
> > Bonjour
> >
> > Bon, ça ne fonctionne pas même en mettant byRef...
> >
> > Sinon voilà le complément d'information que j'avais mis dans le
newsgroupe
> > sur VB6 :
> >
> > Sinon, je n'ai pas le code que j'ai adapter chez moi pour VB .NET, par
> > contre j'ai mon code VBA, je vais le réduire un maximum pour aller à
> > l'essentiel et montrer son fonctionnement :
> > Le but, c'est de comparer une matrice et de voir quelle combinaison
> peuvent
> > se couvrir mutuellement, exemple d'une matrice à comparer :
> >
> > 1 2 3 4 5 6 7 8 9 10 11 12
> > ----------------------------------------------------------
> > 1 1 1 1 0 1 0 1 0 0 0 0 0
> > 2 1 1 0 1 0 1 0 1 0 0 0 0
> > 3 1 0 1 1 1 0 0 0 1 0 0 0
> > 4 0 1 1 1 0 1 0 0 0 1 0 0
> > 5 1 0 1 0 1 1 0 0 0 0 1 0
> > 6 0 1 0 1 1 1 0 0 0 0 0 1
> > 7 1 0 0 0 0 0 1 1 1 0 1 0
> > 8 0 1 0 0 0 0 1 1 0 1 0 1
> > 9 0 0 1 0 0 0 1 0 1 1 1 0
> > 10 0 0 0 1 0 0 0 1 1 1 0 1
> > 11 0 0 0 0 1 0 1 0 1 0 1 1
> > 12 0 0 0 0 0 1 0 1 0 1 1 1
> >
> > Donc cette matrice sera déclarée en globale dans le code, le but de la
> > fonction, c'est de combiner la colonne 1 avec la 2 et de vérifier que
> > somme de chaque ligne soit différente de 0, si on a 0, on combine alor
la
> 1
> > avec la 3, ensuite la 1 avec la 4... ensuite, 2 et 3, 2 et 4, ...
> > Si on a rien, on va descendre d'un niveau et combiner la 1 et 2 avec
3,
> > la 1 et 2 avec la 4,... , 1 et 3 avec la 4, 1 et 3 avec la 5, ...
> >
> > Bon, pour chaque matrice par contre, je déterminer dès le départ le
nombre
> > de combinaison minimum, ici, c'est 3, et pour ce cas les solutions
:
> > 1;3;12 ou 1;5;10 ou 1;10;12 ou 2;4;11 ou 2;6;9 ou 2;9;11 ou 3;5;8 ou
> 3;8;12
> > ou 4;6;7 ou 4;7;11 ou 5;8;10 ou 6;7;9
> >
> > Voici donc à la grosse ce que fais la fonction récursive sous VBA et
elle
> > fonctionne. Mais, bon, pour ce cas, c'est très rapide mais quand elle
fait
> > 200 par 200 avec comme combinaison mimimum, 23 niveau de regroupement,
là,
> > ça ne plante pas, mais c'est très long... D'où, le faire sur un autre
> > language ???
> >
> > Voici le code VBA (pas complet) mais qui ne marche pas après
> sous
> > VB .NET :
> >
> > 'Déclaration de variables globales :
> > Dim lngCombi as long 'nombre de niveaux de récursivité
> > dim tabResult() as integer 'tableaux de comparaison (matrice de
l'exemple
> > supérieur)
> > dim tabSolution() as string
> > dim lngSolution as long
> > dim lngAllGrille as long
> >
> > function lancement()
> > lngcombi = 3
> > lngallgrille
> > tabresult() = matrice de l'exemple
> > redim tabcombi(1 to lngallgrille) 'tableau avec une dimension avec que
des
> 0
> > frecursive_combinaison 1,1,"", tabcombi
> >
> > end function
> >
> > 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
> >
> > 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 - Access MVP
> > news@access.fr.vu
> > ------------------------------------
> > Site @ccess : http://access.jessy.free.fr/
> > Pour l'efficacité de tous :
> > http://www.mpfa.info/
> > ------------------------------------
> > "Patrice" <a@bc.c> a écrit dans le message de
> > news:uGVdRpxMGHA.2828@TK2MSFTNGP12.phx.gbl...
> > > Difficile à dire sans voir le code. Le problème est peut-être qu'un
> > tableau
> > > est un objet donc un simple pointeur. Que le pointeur soit passé par
> > > référence ou par valeur, il pointe de toute façon sur les données
> > originales
> > > ce qui annihile la récursivité.
> > >
> > > Peut-être un tableau de tableaux, l'un des arguments de dimension
étant
> le
> > > niveau de récursivité.
> > >
> > > Il est peut être possible aussi de revoir l'algo. Le fond du
> est
> > > veux tu vraiment que chaque niveau de récursivité ait son propre
tableau
> ?
> > > Cela impliequerait de copier les données à chaque niveau de qui peut
> > > peut-être être évité (par exemple avec une pile).
> > >
> > >
> > > --
> > > Patrice
> > >
> > > "Jessy Sempere [MVP]" <jessy.sempere@prg.sncf.fr> a écrit dans le
> message
> > de
> > > news:43f48aaf$1@news.sncf.fr...
> > > > Re,
> > > >
> > > > Merci pour ta réponse...
> > > > En fait je pense savoir d'où viens le problème, en VBA, les
arguments
> > > passer
> > > > dans une fonction sont passer par défaut par référence, surtout un
> > > argument
> > > > tableau qui ne peut pas être passé par valeur...
> > > > Visiblement, sous VB.NET, cette contrainte n'éxiste pas lorsque
> > > > retranscri mon code VBA sous VB.NET, il m'a mis pour tous mes
> arguments
> > > > ByVal y compris pour mon argument tableau...
> > > >
> > > > Je ne peux pas tester au boulot mais je testerais ce soir pour
> vérifier
> > ma
> > > > théorie ???
> > > >
> > > > Sinon, en terme de rapidité, est ce qu'après compilation de mon
> si
> > il
> > > > fonctionne j'aurais les même performances que si je faisais plus
> > moins
> > > le
> > > > même code sous C ???
> > > >
> > > > @+
> > > > Jessy Sempere - Access MVP
> > > > news@access.fr.vu
> > > > ------------------------------------
> > > > Site @ccess : http://access.jessy.free.fr/
> > > > Pour l'efficacité de tous :
> > > > http://www.mpfa.info/
> > > > ------------------------------------
> > > > "TroXsA" <neat@pk.com> a écrit dans le message de
> > > > news:dt1u5u$nab$1@s1.news.oleane.net...
> > > > > Bonjour,
> > > > >
> > > > > Voilà un exemple de récursivité avec tableau ArrayList
> > > > >
> > > >
> > >
> >
>
> > > > >
> > > > > je sais pas si c'est bien ça que vous cherchiez ! mais bon ça
> > aidé
> > > !
> > > > >
> > > > > Cordialement
> > > > >
> > > > > --
> > > > >
> > > > > Mail : http://cerbermail.com/?rIXgaw9Xsl
> > > > > Site : http://troxsa.info
> > > > >
> > > > >
> > > > > "Jessy Sempere [MVP]" <jessy.sempere@prg.sncf.fr> a écrit dans
> > > message
> > > > de
> > > > > news: 43f477f0$1@news.sncf.fr...
> > > > > > 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 .NET sous visual studio .net...
> > > > > >
> > > > > > A mon grand désespoir, la récursivité pour l'argument de type
> string
> > > > > > fonctionne mais pas 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 .NET 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/
> > > > > > ------------------------------------
> > > > > >
> > > > > >
> > > > > >
> > > > >
> > > > >
> > > >
> > > >
> > >
> > >
> >
> >
>
>
Re
"Patrice" a écrit :
> A priori je pense que c'est parce que les tableaux sont des zones
> dans VBA (ou autres languages) mais des objets (donc des pointeurs) en
.NET
> comme expliqué précédemment.
> Je pense qu'il faut que tu copies explicitement le tableau (de mémoire,
> doit y avoir une méthode Copy qui permet de copier un tableau) avant de
> passer la copie au niveau suivant...
Tout d'abord, merci de t'interesser à mon problème... ;-)
Si tu regardes le code en exemple, c'est bien ce que je fais, dès que je
rentre dans ma fonction récursive, je mets le tableau tabCombi() dans le
tableau temporaire tabCombi_TMP()
> Tu peux peut-être commencer par faire une maquette avec un tableau 2x2
> remplit les cellules avec le niveau de récursivté et imprime le tableau
pour
> vérifier séparemment ce mécanisme avant de le mettre en oeuvre dans ton
> algo.
>
> Je ne suis pas sûr de bien comprendre le principe (la somme est
> nécessairement différente de 0 à partir ou tu as au moins un 1 dans
> ligne ?). Je ne suis pas sûr non plus que la récursivité soit la
> solution (je pense par exemple qu'il serait sans doute possible de
résoudre
> le problème en calculant les solutions plutôt que par la force brute).
En fait si tu regardes mon exemple, tu vois que si tu combines la colonnes
1, la 2 et la 3, tu n'obtiendras pas 1 pour chaque ligne, et c'est
ce que cherche ma fonction récursive, trouver quelles combinaisons de
colonnes permet d'avoir 1 sur chaque ligne ???
(sous VBA ça fonctionne mais pas sous VB .NET)
@+
Jessy Sempere - Access MVP
------------------------------------
Site @ccess : http://access.jessy.free.fr/
Pour l'efficacité de tous :
http://www.mpfa.info/
------------------------------------
>
> "Jessy Sempere [MVP]" a écrit dans le
de
> news:43f5783f$
> > Bonjour
> >
> > Bon, ça ne fonctionne pas même en mettant byRef...
> >
> > Sinon voilà le complément d'information que j'avais mis dans le
newsgroupe
> > sur VB6 :
> >
> > Sinon, je n'ai pas le code que j'ai adapter chez moi pour VB .NET, par
> > contre j'ai mon code VBA, je vais le réduire un maximum pour aller à
> > l'essentiel et montrer son fonctionnement :
> > Le but, c'est de comparer une matrice et de voir quelle combinaison
> peuvent
> > se couvrir mutuellement, exemple d'une matrice à comparer :
> >
> > 1 2 3 4 5 6 7 8 9 10 11 12
> > ----------------------------------------------------------
> > 1 1 1 1 0 1 0 1 0 0 0 0 0
> > 2 1 1 0 1 0 1 0 1 0 0 0 0
> > 3 1 0 1 1 1 0 0 0 1 0 0 0
> > 4 0 1 1 1 0 1 0 0 0 1 0 0
> > 5 1 0 1 0 1 1 0 0 0 0 1 0
> > 6 0 1 0 1 1 1 0 0 0 0 0 1
> > 7 1 0 0 0 0 0 1 1 1 0 1 0
> > 8 0 1 0 0 0 0 1 1 0 1 0 1
> > 9 0 0 1 0 0 0 1 0 1 1 1 0
> > 10 0 0 0 1 0 0 0 1 1 1 0 1
> > 11 0 0 0 0 1 0 1 0 1 0 1 1
> > 12 0 0 0 0 0 1 0 1 0 1 1 1
> >
> > Donc cette matrice sera déclarée en globale dans le code, le but de la
> > fonction, c'est de combiner la colonne 1 avec la 2 et de vérifier que
> > somme de chaque ligne soit différente de 0, si on a 0, on combine alor
la
> 1
> > avec la 3, ensuite la 1 avec la 4... ensuite, 2 et 3, 2 et 4, ...
> > Si on a rien, on va descendre d'un niveau et combiner la 1 et 2 avec
3,
> > la 1 et 2 avec la 4,... , 1 et 3 avec la 4, 1 et 3 avec la 5, ...
> >
> > Bon, pour chaque matrice par contre, je déterminer dès le départ le
nombre
> > de combinaison minimum, ici, c'est 3, et pour ce cas les solutions
:
> > 1;3;12 ou 1;5;10 ou 1;10;12 ou 2;4;11 ou 2;6;9 ou 2;9;11 ou 3;5;8 ou
> 3;8;12
> > ou 4;6;7 ou 4;7;11 ou 5;8;10 ou 6;7;9
> >
> > Voici donc à la grosse ce que fais la fonction récursive sous VBA et
elle
> > fonctionne. Mais, bon, pour ce cas, c'est très rapide mais quand elle
fait
> > 200 par 200 avec comme combinaison mimimum, 23 niveau de regroupement,
là,
> > ça ne plante pas, mais c'est très long... D'où, le faire sur un autre
> > language ???
> >
> > Voici le code VBA (pas complet) mais qui ne marche pas après
> sous
> > VB .NET :
> >
> > 'Déclaration de variables globales :
> > Dim lngCombi as long 'nombre de niveaux de récursivité
> > dim tabResult() as integer 'tableaux de comparaison (matrice de
l'exemple
> > supérieur)
> > dim tabSolution() as string
> > dim lngSolution as long
> > dim lngAllGrille as long
> >
> > function lancement()
> > lngcombi = 3
> > lngallgrille
> > tabresult() = matrice de l'exemple
> > redim tabcombi(1 to lngallgrille) 'tableau avec une dimension avec que
des
> 0
> > frecursive_combinaison 1,1,"", tabcombi
> >
> > end function
> >
> > 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
> >
> > 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 - Access MVP
> >
> > ------------------------------------
> > Site @ccess : http://access.jessy.free.fr/
> > Pour l'efficacité de tous :
> > http://www.mpfa.info/
> > ------------------------------------
> > "Patrice" a écrit dans le message de
> > news:
> > > Difficile à dire sans voir le code. Le problème est peut-être qu'un
> > tableau
> > > est un objet donc un simple pointeur. Que le pointeur soit passé par
> > > référence ou par valeur, il pointe de toute façon sur les données
> > originales
> > > ce qui annihile la récursivité.
> > >
> > > Peut-être un tableau de tableaux, l'un des arguments de dimension
étant
> le
> > > niveau de récursivité.
> > >
> > > Il est peut être possible aussi de revoir l'algo. Le fond du
> est
> > > veux tu vraiment que chaque niveau de récursivité ait son propre
tableau
> ?
> > > Cela impliequerait de copier les données à chaque niveau de qui peut
> > > peut-être être évité (par exemple avec une pile).
> > >
> > >
> > > --
> > > Patrice
> > >
> > > "Jessy Sempere [MVP]" a écrit dans le
> message
> > de
> > > news:43f48aaf$
> > > > Re,
> > > >
> > > > Merci pour ta réponse...
> > > > En fait je pense savoir d'où viens le problème, en VBA, les
arguments
> > > passer
> > > > dans une fonction sont passer par défaut par référence, surtout un
> > > argument
> > > > tableau qui ne peut pas être passé par valeur...
> > > > Visiblement, sous VB.NET, cette contrainte n'éxiste pas lorsque
> > > > retranscri mon code VBA sous VB.NET, il m'a mis pour tous mes
> arguments
> > > > ByVal y compris pour mon argument tableau...
> > > >
> > > > Je ne peux pas tester au boulot mais je testerais ce soir pour
> vérifier
> > ma
> > > > théorie ???
> > > >
> > > > Sinon, en terme de rapidité, est ce qu'après compilation de mon
> si
> > il
> > > > fonctionne j'aurais les même performances que si je faisais plus
> > moins
> > > le
> > > > même code sous C ???
> > > >
> > > > @+
> > > > Jessy Sempere - Access MVP
> > > >
> > > > ------------------------------------
> > > > Site @ccess : http://access.jessy.free.fr/
> > > > Pour l'efficacité de tous :
> > > > http://www.mpfa.info/
> > > > ------------------------------------
> > > > "TroXsA" a écrit dans le message de
> > > > news:dt1u5u$nab$
> > > > > Bonjour,
> > > > >
> > > > > Voilà un exemple de récursivité avec tableau ArrayList
> > > > >
> > > >
> > >
> >
>
> > > > >
> > > > > je sais pas si c'est bien ça que vous cherchiez ! mais bon ça
> > aidé
> > > !
> > > > >
> > > > > Cordialement
> > > > >
> > > > > --
> > > > >
> > > > > Mail : http://cerbermail.com/?rIXgaw9Xsl
> > > > > Site : http://troxsa.info
> > > > >
> > > > >
> > > > > "Jessy Sempere [MVP]" a écrit dans
> > > message
> > > > de
> > > > > news: 43f477f0$
> > > > > > 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 .NET sous visual studio .net...
> > > > > >
> > > > > > A mon grand désespoir, la récursivité pour l'argument de type
> string
> > > > > > fonctionne mais pas 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 .NET 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/
> > > > > > ------------------------------------
> > > > > >
> > > > > >
> > > > > >
> > > > >
> > > > >
> > > >
> > > >
> > >
> > >
> >
> >
>
>
Je disais donc qu'en .NET les tableaux sont des *objets* :
Dim a(0) As Integer
Dim b(0) As Integer
a(0) = 1
b = a ' b et a "pointent" sur le *même* tableau
b(0) = 2
MsgBox(a(0))
Exit Sub
Affiche 2
Dim a(0) As Integer
Dim b(0) As Integer
a(0) = 1
Array.Copy(a, b, a.Length) ' b et a sont des tableaux différents
b(0) = 2
MsgBox(a(0))
Exit Sub
Affiche 1
Attention aussi à passer le tableau temporaire et non le tableau original
dans l'appel récursif...
Pour le reste je n'ai pas compris le problème. Je crois comprendre
maintenant que tu veux fusionner des "lignes" (et non pas des colonnes ?)
de
telle façon que chaque colonne de ces lignes comporte au moins un "1" ?
(et
non pas que la somme de la ligne soit égale à zéro ?). Cela correspond à
un
casse tête réel, un défi de programmation, un cas d'école ou quoi ?
Si c'est bien le principe, il suffirait de calculer pour chaque ligne le
nombre binaire correspondant. Les solutions sont les lignes dont
l'addition
binaire donne des 1 partout (par exemple 256 avec 8 colonnes). Voir par
exemple la classe BitVector...
En éliminant les doublons (la ligne 1 et la ligne 3 donnent le même
résultat
que la ligne 3 et la ligne 1, les lignes qui ne font pas avancer la
solution
car elles n'apportent pas de nouveaux 1, en favorisant les lignes ayant le
plus grand nombre de 1 ce qui devrait permettre d'atteindre le but plus
rapidement) etc, il devrait être possible de produire une liste de
résultats
plus rapidement (voire même peut-être exhaustive ?)
Quelque part ce n'est qu'une "simple" résolution d'équation...
Bon courage.
--
Patrice
"Jessy Sempere [MVP]" a écrit dans le message
de
news:43f5900b$Re
"Patrice" a écrit :
> A priori je pense que c'est parce que les tableaux sont des zones
mémoires> dans VBA (ou autres languages) mais des objets (donc des pointeurs) en
.NET
> comme expliqué précédemment.
> Je pense qu'il faut que tu copies explicitement le tableau (de mémoire,
il> doit y avoir une méthode Copy qui permet de copier un tableau) avant de
> passer la copie au niveau suivant...
Tout d'abord, merci de t'interesser à mon problème... ;-)
Si tu regardes le code en exemple, c'est bien ce que je fais, dès que je
rentre dans ma fonction récursive, je mets le tableau tabCombi() dans le
tableau temporaire tabCombi_TMP()
> Tu peux peut-être commencer par faire une maquette avec un tableau 2x2
qui> remplit les cellules avec le niveau de récursivté et imprime le tableau
pour
> vérifier séparemment ce mécanisme avant de le mettre en oeuvre dans ton
> algo.
>
> Je ne suis pas sûr de bien comprendre le principe (la somme est
> nécessairement différente de 0 à partir ou tu as au moins un 1 dans
chaque> ligne ?). Je ne suis pas sûr non plus que la récursivité soit la
meilleure> solution (je pense par exemple qu'il serait sans doute possible de
résoudre
> le problème en calculant les solutions plutôt que par la force brute).
En fait si tu regardes mon exemple, tu vois que si tu combines la
colonnes
1, la 2 et la 3, tu n'obtiendras pas 1 pour chaque ligne, et c'est
justementce que cherche ma fonction récursive, trouver quelles combinaisons de
colonnes permet d'avoir 1 sur chaque ligne ???
(sous VBA ça fonctionne mais pas sous VB .NET)
@+
Jessy Sempere - Access MVP
------------------------------------
Site @ccess : http://access.jessy.free.fr/
Pour l'efficacité de tous :
http://www.mpfa.info/
------------------------------------
>
> "Jessy Sempere [MVP]" a écrit dans le
messagede
> news:43f5783f$
> > Bonjour
> >
> > Bon, ça ne fonctionne pas même en mettant byRef...
> >
> > Sinon voilà le complément d'information que j'avais mis dans le
newsgroupe
> > sur VB6 :
> >
> > Sinon, je n'ai pas le code que j'ai adapter chez moi pour VB .NET,
> > par
> > contre j'ai mon code VBA, je vais le réduire un maximum pour aller à
> > l'essentiel et montrer son fonctionnement :
> > Le but, c'est de comparer une matrice et de voir quelle combinaison
> peuvent
> > se couvrir mutuellement, exemple d'une matrice à comparer :
> >
> > 1 2 3 4 5 6 7 8 9 10 11 12
> > ----------------------------------------------------------
> > 1 1 1 1 0 1 0 1 0 0 0 0 0
> > 2 1 1 0 1 0 1 0 1 0 0 0 0
> > 3 1 0 1 1 1 0 0 0 1 0 0 0
> > 4 0 1 1 1 0 1 0 0 0 1 0 0
> > 5 1 0 1 0 1 1 0 0 0 0 1 0
> > 6 0 1 0 1 1 1 0 0 0 0 0 1
> > 7 1 0 0 0 0 0 1 1 1 0 1 0
> > 8 0 1 0 0 0 0 1 1 0 1 0 1
> > 9 0 0 1 0 0 0 1 0 1 1 1 0
> > 10 0 0 0 1 0 0 0 1 1 1 0 1
> > 11 0 0 0 0 1 0 1 0 1 0 1 1
> > 12 0 0 0 0 0 1 0 1 0 1 1 1
> >
> > Donc cette matrice sera déclarée en globale dans le code, le but de
> > la
> > fonction, c'est de combiner la colonne 1 avec la 2 et de vérifier que
la> > somme de chaque ligne soit différente de 0, si on a 0, on combine
> > alor
la
> 1
> > avec la 3, ensuite la 1 avec la 4... ensuite, 2 et 3, 2 et 4, ...
> > Si on a rien, on va descendre d'un niveau et combiner la 1 et 2 avec
la3,
> > la 1 et 2 avec la 4,... , 1 et 3 avec la 4, 1 et 3 avec la 5, ...
> >
> > Bon, pour chaque matrice par contre, je déterminer dès le départ le
nombre
> > de combinaison minimum, ici, c'est 3, et pour ce cas les solutions
sont:
> > 1;3;12 ou 1;5;10 ou 1;10;12 ou 2;4;11 ou 2;6;9 ou 2;9;11 ou 3;5;8 ou
> 3;8;12
> > ou 4;6;7 ou 4;7;11 ou 5;8;10 ou 6;7;9
> >
> > Voici donc à la grosse ce que fais la fonction récursive sous VBA et
elle
> > fonctionne. Mais, bon, pour ce cas, c'est très rapide mais quand elle
fait
> > 200 par 200 avec comme combinaison mimimum, 23 niveau de
> > regroupement,
là,
> > ça ne plante pas, mais c'est très long... D'où, le faire sur un autre
> > language ???
> >
> > Voici le code VBA (pas complet) mais qui ne marche pas après
conversion> sous
> > VB .NET :
> >
> > 'Déclaration de variables globales :
> > Dim lngCombi as long 'nombre de niveaux de récursivité
> > dim tabResult() as integer 'tableaux de comparaison (matrice de
l'exemple
> > supérieur)
> > dim tabSolution() as string
> > dim lngSolution as long
> > dim lngAllGrille as long
> >
> > function lancement()
> > lngcombi = 3
> > lngallgrille
> > tabresult() = matrice de l'exemple
> > redim tabcombi(1 to lngallgrille) 'tableau avec une dimension avec
> > que
des
> 0
> > frecursive_combinaison 1,1,"", tabcombi
> >
> > end function
> >
> > 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
> >
> > 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 - Access MVP
> >
> > ------------------------------------
> > Site @ccess : http://access.jessy.free.fr/
> > Pour l'efficacité de tous :
> > http://www.mpfa.info/
> > ------------------------------------
> > "Patrice" a écrit dans le message de
> > news:
> > > Difficile à dire sans voir le code. Le problème est peut-être qu'un
> > tableau
> > > est un objet donc un simple pointeur. Que le pointeur soit passé
> > > par
> > > référence ou par valeur, il pointe de toute façon sur les données
> > originales
> > > ce qui annihile la récursivité.
> > >
> > > Peut-être un tableau de tableaux, l'un des arguments de dimension
étant
> le
> > > niveau de récursivité.
> > >
> > > Il est peut être possible aussi de revoir l'algo. Le fond du
problème> est
> > > veux tu vraiment que chaque niveau de récursivité ait son propre
tableau
> ?
> > > Cela impliequerait de copier les données à chaque niveau de qui
> > > peut
> > > peut-être être évité (par exemple avec une pile).
> > >
> > >
> > > --
> > > Patrice
> > >
> > > "Jessy Sempere [MVP]" a écrit dans le
> message
> > de
> > > news:43f48aaf$
> > > > Re,
> > > >
> > > > Merci pour ta réponse...
> > > > En fait je pense savoir d'où viens le problème, en VBA, les
arguments
> > > passer
> > > > dans une fonction sont passer par défaut par référence, surtout
> > > > un
> > > argument
> > > > tableau qui ne peut pas être passé par valeur...
> > > > Visiblement, sous VB.NET, cette contrainte n'éxiste pas lorsque
j'ai> > > > retranscri mon code VBA sous VB.NET, il m'a mis pour tous mes
> arguments
> > > > ByVal y compris pour mon argument tableau...
> > > >
> > > > Je ne peux pas tester au boulot mais je testerais ce soir pour
> vérifier
> > ma
> > > > théorie ???
> > > >
> > > > Sinon, en terme de rapidité, est ce qu'après compilation de mon
code> si
> > il
> > > > fonctionne j'aurais les même performances que si je faisais plus
ou> > moins
> > > le
> > > > même code sous C ???
> > > >
> > > > @+
> > > > Jessy Sempere - Access MVP
> > > >
> > > > ------------------------------------
> > > > Site @ccess : http://access.jessy.free.fr/
> > > > Pour l'efficacité de tous :
> > > > http://www.mpfa.info/
> > > > ------------------------------------
> > > > "TroXsA" a écrit dans le message de
> > > > news:dt1u5u$nab$
> > > > > Bonjour,
> > > > >
> > > > > Voilà un exemple de récursivité avec tableau ArrayList
> > > > >
> > > >
> > >
> >
>
http://www.troxsa.info/index.php?option=com_content&task=view&id&Itemid=2> > > > >
> > > > > je sais pas si c'est bien ça que vous cherchiez ! mais bon ça
peut> > aidé
> > > !
> > > > >
> > > > > Cordialement
> > > > >
> > > > > --
> > > > >
> > > > > Mail : http://cerbermail.com/?rIXgaw9Xsl
> > > > > Site : http://troxsa.info
> > > > >
> > > > >
> > > > > "Jessy Sempere [MVP]" a écrit dans
le> > > message
> > > > de
> > > > > news: 43f477f0$
> > > > > > 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 .NET sous visual studio .net...
> > > > > >
> > > > > > A mon grand désespoir, la récursivité pour l'argument de type
> string
> > > > > > fonctionne mais pas 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 .NET 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/
> > > > > > ------------------------------------
> > > > > >
> > > > > >
> > > > > >
> > > > >
> > > > >
> > > >
> > > >
> > >
> > >
> >
> >
>
>
Je disais donc qu'en .NET les tableaux sont des *objets* :
Dim a(0) As Integer
Dim b(0) As Integer
a(0) = 1
b = a ' b et a "pointent" sur le *même* tableau
b(0) = 2
MsgBox(a(0))
Exit Sub
Affiche 2
Dim a(0) As Integer
Dim b(0) As Integer
a(0) = 1
Array.Copy(a, b, a.Length) ' b et a sont des tableaux différents
b(0) = 2
MsgBox(a(0))
Exit Sub
Affiche 1
Attention aussi à passer le tableau temporaire et non le tableau original
dans l'appel récursif...
Pour le reste je n'ai pas compris le problème. Je crois comprendre
maintenant que tu veux fusionner des "lignes" (et non pas des colonnes ?)
de
telle façon que chaque colonne de ces lignes comporte au moins un "1" ?
(et
non pas que la somme de la ligne soit égale à zéro ?). Cela correspond à
un
casse tête réel, un défi de programmation, un cas d'école ou quoi ?
Si c'est bien le principe, il suffirait de calculer pour chaque ligne le
nombre binaire correspondant. Les solutions sont les lignes dont
l'addition
binaire donne des 1 partout (par exemple 256 avec 8 colonnes). Voir par
exemple la classe BitVector...
En éliminant les doublons (la ligne 1 et la ligne 3 donnent le même
résultat
que la ligne 3 et la ligne 1, les lignes qui ne font pas avancer la
solution
car elles n'apportent pas de nouveaux 1, en favorisant les lignes ayant le
plus grand nombre de 1 ce qui devrait permettre d'atteindre le but plus
rapidement) etc, il devrait être possible de produire une liste de
résultats
plus rapidement (voire même peut-être exhaustive ?)
Quelque part ce n'est qu'une "simple" résolution d'équation...
Bon courage.
--
Patrice
"Jessy Sempere [MVP]" <jessy.sempere@prg.sncf.fr> a écrit dans le message
de
news:43f5900b$1@news.sncf.fr...
Re
"Patrice" <a@bc.c> a écrit :
> A priori je pense que c'est parce que les tableaux sont des zones
mémoires
> dans VBA (ou autres languages) mais des objets (donc des pointeurs) en
.NET
> comme expliqué précédemment.
> Je pense qu'il faut que tu copies explicitement le tableau (de mémoire,
il
> doit y avoir une méthode Copy qui permet de copier un tableau) avant de
> passer la copie au niveau suivant...
Tout d'abord, merci de t'interesser à mon problème... ;-)
Si tu regardes le code en exemple, c'est bien ce que je fais, dès que je
rentre dans ma fonction récursive, je mets le tableau tabCombi() dans le
tableau temporaire tabCombi_TMP()
> Tu peux peut-être commencer par faire une maquette avec un tableau 2x2
qui
> remplit les cellules avec le niveau de récursivté et imprime le tableau
pour
> vérifier séparemment ce mécanisme avant de le mettre en oeuvre dans ton
> algo.
>
> Je ne suis pas sûr de bien comprendre le principe (la somme est
> nécessairement différente de 0 à partir ou tu as au moins un 1 dans
chaque
> ligne ?). Je ne suis pas sûr non plus que la récursivité soit la
meilleure
> solution (je pense par exemple qu'il serait sans doute possible de
résoudre
> le problème en calculant les solutions plutôt que par la force brute).
En fait si tu regardes mon exemple, tu vois que si tu combines la
colonnes
1, la 2 et la 3, tu n'obtiendras pas 1 pour chaque ligne, et c'est
justement
ce que cherche ma fonction récursive, trouver quelles combinaisons de
colonnes permet d'avoir 1 sur chaque ligne ???
(sous VBA ça fonctionne mais pas sous VB .NET)
@+
Jessy Sempere - Access MVP
news@access.fr.vu
------------------------------------
Site @ccess : http://access.jessy.free.fr/
Pour l'efficacité de tous :
http://www.mpfa.info/
------------------------------------
>
> "Jessy Sempere [MVP]" <jessy.sempere@prg.sncf.fr> a écrit dans le
message
de
> news:43f5783f$1@news.sncf.fr...
> > Bonjour
> >
> > Bon, ça ne fonctionne pas même en mettant byRef...
> >
> > Sinon voilà le complément d'information que j'avais mis dans le
newsgroupe
> > sur VB6 :
> >
> > Sinon, je n'ai pas le code que j'ai adapter chez moi pour VB .NET,
> > par
> > contre j'ai mon code VBA, je vais le réduire un maximum pour aller à
> > l'essentiel et montrer son fonctionnement :
> > Le but, c'est de comparer une matrice et de voir quelle combinaison
> peuvent
> > se couvrir mutuellement, exemple d'une matrice à comparer :
> >
> > 1 2 3 4 5 6 7 8 9 10 11 12
> > ----------------------------------------------------------
> > 1 1 1 1 0 1 0 1 0 0 0 0 0
> > 2 1 1 0 1 0 1 0 1 0 0 0 0
> > 3 1 0 1 1 1 0 0 0 1 0 0 0
> > 4 0 1 1 1 0 1 0 0 0 1 0 0
> > 5 1 0 1 0 1 1 0 0 0 0 1 0
> > 6 0 1 0 1 1 1 0 0 0 0 0 1
> > 7 1 0 0 0 0 0 1 1 1 0 1 0
> > 8 0 1 0 0 0 0 1 1 0 1 0 1
> > 9 0 0 1 0 0 0 1 0 1 1 1 0
> > 10 0 0 0 1 0 0 0 1 1 1 0 1
> > 11 0 0 0 0 1 0 1 0 1 0 1 1
> > 12 0 0 0 0 0 1 0 1 0 1 1 1
> >
> > Donc cette matrice sera déclarée en globale dans le code, le but de
> > la
> > fonction, c'est de combiner la colonne 1 avec la 2 et de vérifier que
la
> > somme de chaque ligne soit différente de 0, si on a 0, on combine
> > alor
la
> 1
> > avec la 3, ensuite la 1 avec la 4... ensuite, 2 et 3, 2 et 4, ...
> > Si on a rien, on va descendre d'un niveau et combiner la 1 et 2 avec
la
3,
> > la 1 et 2 avec la 4,... , 1 et 3 avec la 4, 1 et 3 avec la 5, ...
> >
> > Bon, pour chaque matrice par contre, je déterminer dès le départ le
nombre
> > de combinaison minimum, ici, c'est 3, et pour ce cas les solutions
sont
:
> > 1;3;12 ou 1;5;10 ou 1;10;12 ou 2;4;11 ou 2;6;9 ou 2;9;11 ou 3;5;8 ou
> 3;8;12
> > ou 4;6;7 ou 4;7;11 ou 5;8;10 ou 6;7;9
> >
> > Voici donc à la grosse ce que fais la fonction récursive sous VBA et
elle
> > fonctionne. Mais, bon, pour ce cas, c'est très rapide mais quand elle
fait
> > 200 par 200 avec comme combinaison mimimum, 23 niveau de
> > regroupement,
là,
> > ça ne plante pas, mais c'est très long... D'où, le faire sur un autre
> > language ???
> >
> > Voici le code VBA (pas complet) mais qui ne marche pas après
conversion
> sous
> > VB .NET :
> >
> > 'Déclaration de variables globales :
> > Dim lngCombi as long 'nombre de niveaux de récursivité
> > dim tabResult() as integer 'tableaux de comparaison (matrice de
l'exemple
> > supérieur)
> > dim tabSolution() as string
> > dim lngSolution as long
> > dim lngAllGrille as long
> >
> > function lancement()
> > lngcombi = 3
> > lngallgrille
> > tabresult() = matrice de l'exemple
> > redim tabcombi(1 to lngallgrille) 'tableau avec une dimension avec
> > que
des
> 0
> > frecursive_combinaison 1,1,"", tabcombi
> >
> > end function
> >
> > 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
> >
> > 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 - Access MVP
> > news@access.fr.vu
> > ------------------------------------
> > Site @ccess : http://access.jessy.free.fr/
> > Pour l'efficacité de tous :
> > http://www.mpfa.info/
> > ------------------------------------
> > "Patrice" <a@bc.c> a écrit dans le message de
> > news:uGVdRpxMGHA.2828@TK2MSFTNGP12.phx.gbl...
> > > Difficile à dire sans voir le code. Le problème est peut-être qu'un
> > tableau
> > > est un objet donc un simple pointeur. Que le pointeur soit passé
> > > par
> > > référence ou par valeur, il pointe de toute façon sur les données
> > originales
> > > ce qui annihile la récursivité.
> > >
> > > Peut-être un tableau de tableaux, l'un des arguments de dimension
étant
> le
> > > niveau de récursivité.
> > >
> > > Il est peut être possible aussi de revoir l'algo. Le fond du
problème
> est
> > > veux tu vraiment que chaque niveau de récursivité ait son propre
tableau
> ?
> > > Cela impliequerait de copier les données à chaque niveau de qui
> > > peut
> > > peut-être être évité (par exemple avec une pile).
> > >
> > >
> > > --
> > > Patrice
> > >
> > > "Jessy Sempere [MVP]" <jessy.sempere@prg.sncf.fr> a écrit dans le
> message
> > de
> > > news:43f48aaf$1@news.sncf.fr...
> > > > Re,
> > > >
> > > > Merci pour ta réponse...
> > > > En fait je pense savoir d'où viens le problème, en VBA, les
arguments
> > > passer
> > > > dans une fonction sont passer par défaut par référence, surtout
> > > > un
> > > argument
> > > > tableau qui ne peut pas être passé par valeur...
> > > > Visiblement, sous VB.NET, cette contrainte n'éxiste pas lorsque
j'ai
> > > > retranscri mon code VBA sous VB.NET, il m'a mis pour tous mes
> arguments
> > > > ByVal y compris pour mon argument tableau...
> > > >
> > > > Je ne peux pas tester au boulot mais je testerais ce soir pour
> vérifier
> > ma
> > > > théorie ???
> > > >
> > > > Sinon, en terme de rapidité, est ce qu'après compilation de mon
code
> si
> > il
> > > > fonctionne j'aurais les même performances que si je faisais plus
ou
> > moins
> > > le
> > > > même code sous C ???
> > > >
> > > > @+
> > > > Jessy Sempere - Access MVP
> > > > news@access.fr.vu
> > > > ------------------------------------
> > > > Site @ccess : http://access.jessy.free.fr/
> > > > Pour l'efficacité de tous :
> > > > http://www.mpfa.info/
> > > > ------------------------------------
> > > > "TroXsA" <neat@pk.com> a écrit dans le message de
> > > > news:dt1u5u$nab$1@s1.news.oleane.net...
> > > > > Bonjour,
> > > > >
> > > > > Voilà un exemple de récursivité avec tableau ArrayList
> > > > >
> > > >
> > >
> >
>
http://www.troxsa.info/index.php?option=com_content&task=view&id&Itemid=2
> > > > >
> > > > > je sais pas si c'est bien ça que vous cherchiez ! mais bon ça
peut
> > aidé
> > > !
> > > > >
> > > > > Cordialement
> > > > >
> > > > > --
> > > > >
> > > > > Mail : http://cerbermail.com/?rIXgaw9Xsl
> > > > > Site : http://troxsa.info
> > > > >
> > > > >
> > > > > "Jessy Sempere [MVP]" <jessy.sempere@prg.sncf.fr> a écrit dans
le
> > > message
> > > > de
> > > > > news: 43f477f0$1@news.sncf.fr...
> > > > > > 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 .NET sous visual studio .net...
> > > > > >
> > > > > > A mon grand désespoir, la récursivité pour l'argument de type
> string
> > > > > > fonctionne mais pas 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 .NET 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/
> > > > > > ------------------------------------
> > > > > >
> > > > > >
> > > > > >
> > > > >
> > > > >
> > > >
> > > >
> > >
> > >
> >
> >
>
>
Je disais donc qu'en .NET les tableaux sont des *objets* :
Dim a(0) As Integer
Dim b(0) As Integer
a(0) = 1
b = a ' b et a "pointent" sur le *même* tableau
b(0) = 2
MsgBox(a(0))
Exit Sub
Affiche 2
Dim a(0) As Integer
Dim b(0) As Integer
a(0) = 1
Array.Copy(a, b, a.Length) ' b et a sont des tableaux différents
b(0) = 2
MsgBox(a(0))
Exit Sub
Affiche 1
Attention aussi à passer le tableau temporaire et non le tableau original
dans l'appel récursif...
Pour le reste je n'ai pas compris le problème. Je crois comprendre
maintenant que tu veux fusionner des "lignes" (et non pas des colonnes ?)
de
telle façon que chaque colonne de ces lignes comporte au moins un "1" ?
(et
non pas que la somme de la ligne soit égale à zéro ?). Cela correspond à
un
casse tête réel, un défi de programmation, un cas d'école ou quoi ?
Si c'est bien le principe, il suffirait de calculer pour chaque ligne le
nombre binaire correspondant. Les solutions sont les lignes dont
l'addition
binaire donne des 1 partout (par exemple 256 avec 8 colonnes). Voir par
exemple la classe BitVector...
En éliminant les doublons (la ligne 1 et la ligne 3 donnent le même
résultat
que la ligne 3 et la ligne 1, les lignes qui ne font pas avancer la
solution
car elles n'apportent pas de nouveaux 1, en favorisant les lignes ayant le
plus grand nombre de 1 ce qui devrait permettre d'atteindre le but plus
rapidement) etc, il devrait être possible de produire une liste de
résultats
plus rapidement (voire même peut-être exhaustive ?)
Quelque part ce n'est qu'une "simple" résolution d'équation...
Bon courage.
--
Patrice
"Jessy Sempere [MVP]" a écrit dans le message
de
news:43f5900b$Re
"Patrice" a écrit :
> A priori je pense que c'est parce que les tableaux sont des zones
mémoires> dans VBA (ou autres languages) mais des objets (donc des pointeurs) en
.NET
> comme expliqué précédemment.
> Je pense qu'il faut que tu copies explicitement le tableau (de mémoire,
il> doit y avoir une méthode Copy qui permet de copier un tableau) avant de
> passer la copie au niveau suivant...
Tout d'abord, merci de t'interesser à mon problème... ;-)
Si tu regardes le code en exemple, c'est bien ce que je fais, dès que je
rentre dans ma fonction récursive, je mets le tableau tabCombi() dans le
tableau temporaire tabCombi_TMP()
> Tu peux peut-être commencer par faire une maquette avec un tableau 2x2
qui> remplit les cellules avec le niveau de récursivté et imprime le tableau
pour
> vérifier séparemment ce mécanisme avant de le mettre en oeuvre dans ton
> algo.
>
> Je ne suis pas sûr de bien comprendre le principe (la somme est
> nécessairement différente de 0 à partir ou tu as au moins un 1 dans
chaque> ligne ?). Je ne suis pas sûr non plus que la récursivité soit la
meilleure> solution (je pense par exemple qu'il serait sans doute possible de
résoudre
> le problème en calculant les solutions plutôt que par la force brute).
En fait si tu regardes mon exemple, tu vois que si tu combines la
colonnes
1, la 2 et la 3, tu n'obtiendras pas 1 pour chaque ligne, et c'est
justementce que cherche ma fonction récursive, trouver quelles combinaisons de
colonnes permet d'avoir 1 sur chaque ligne ???
(sous VBA ça fonctionne mais pas sous VB .NET)
@+
Jessy Sempere - Access MVP
------------------------------------
Site @ccess : http://access.jessy.free.fr/
Pour l'efficacité de tous :
http://www.mpfa.info/
------------------------------------
>
> "Jessy Sempere [MVP]" a écrit dans le
messagede
> news:43f5783f$
> > Bonjour
> >
> > Bon, ça ne fonctionne pas même en mettant byRef...
> >
> > Sinon voilà le complément d'information que j'avais mis dans le
newsgroupe
> > sur VB6 :
> >
> > Sinon, je n'ai pas le code que j'ai adapter chez moi pour VB .NET,
> > par
> > contre j'ai mon code VBA, je vais le réduire un maximum pour aller à
> > l'essentiel et montrer son fonctionnement :
> > Le but, c'est de comparer une matrice et de voir quelle combinaison
> peuvent
> > se couvrir mutuellement, exemple d'une matrice à comparer :
> >
> > 1 2 3 4 5 6 7 8 9 10 11 12
> > ----------------------------------------------------------
> > 1 1 1 1 0 1 0 1 0 0 0 0 0
> > 2 1 1 0 1 0 1 0 1 0 0 0 0
> > 3 1 0 1 1 1 0 0 0 1 0 0 0
> > 4 0 1 1 1 0 1 0 0 0 1 0 0
> > 5 1 0 1 0 1 1 0 0 0 0 1 0
> > 6 0 1 0 1 1 1 0 0 0 0 0 1
> > 7 1 0 0 0 0 0 1 1 1 0 1 0
> > 8 0 1 0 0 0 0 1 1 0 1 0 1
> > 9 0 0 1 0 0 0 1 0 1 1 1 0
> > 10 0 0 0 1 0 0 0 1 1 1 0 1
> > 11 0 0 0 0 1 0 1 0 1 0 1 1
> > 12 0 0 0 0 0 1 0 1 0 1 1 1
> >
> > Donc cette matrice sera déclarée en globale dans le code, le but de
> > la
> > fonction, c'est de combiner la colonne 1 avec la 2 et de vérifier que
la> > somme de chaque ligne soit différente de 0, si on a 0, on combine
> > alor
la
> 1
> > avec la 3, ensuite la 1 avec la 4... ensuite, 2 et 3, 2 et 4, ...
> > Si on a rien, on va descendre d'un niveau et combiner la 1 et 2 avec
la3,
> > la 1 et 2 avec la 4,... , 1 et 3 avec la 4, 1 et 3 avec la 5, ...
> >
> > Bon, pour chaque matrice par contre, je déterminer dès le départ le
nombre
> > de combinaison minimum, ici, c'est 3, et pour ce cas les solutions
sont:
> > 1;3;12 ou 1;5;10 ou 1;10;12 ou 2;4;11 ou 2;6;9 ou 2;9;11 ou 3;5;8 ou
> 3;8;12
> > ou 4;6;7 ou 4;7;11 ou 5;8;10 ou 6;7;9
> >
> > Voici donc à la grosse ce que fais la fonction récursive sous VBA et
elle
> > fonctionne. Mais, bon, pour ce cas, c'est très rapide mais quand elle
fait
> > 200 par 200 avec comme combinaison mimimum, 23 niveau de
> > regroupement,
là,
> > ça ne plante pas, mais c'est très long... D'où, le faire sur un autre
> > language ???
> >
> > Voici le code VBA (pas complet) mais qui ne marche pas après
conversion> sous
> > VB .NET :
> >
> > 'Déclaration de variables globales :
> > Dim lngCombi as long 'nombre de niveaux de récursivité
> > dim tabResult() as integer 'tableaux de comparaison (matrice de
l'exemple
> > supérieur)
> > dim tabSolution() as string
> > dim lngSolution as long
> > dim lngAllGrille as long
> >
> > function lancement()
> > lngcombi = 3
> > lngallgrille
> > tabresult() = matrice de l'exemple
> > redim tabcombi(1 to lngallgrille) 'tableau avec une dimension avec
> > que
des
> 0
> > frecursive_combinaison 1,1,"", tabcombi
> >
> > end function
> >
> > 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
> >
> > 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 - Access MVP
> >
> > ------------------------------------
> > Site @ccess : http://access.jessy.free.fr/
> > Pour l'efficacité de tous :
> > http://www.mpfa.info/
> > ------------------------------------
> > "Patrice" a écrit dans le message de
> > news:
> > > Difficile à dire sans voir le code. Le problème est peut-être qu'un
> > tableau
> > > est un objet donc un simple pointeur. Que le pointeur soit passé
> > > par
> > > référence ou par valeur, il pointe de toute façon sur les données
> > originales
> > > ce qui annihile la récursivité.
> > >
> > > Peut-être un tableau de tableaux, l'un des arguments de dimension
étant
> le
> > > niveau de récursivité.
> > >
> > > Il est peut être possible aussi de revoir l'algo. Le fond du
problème> est
> > > veux tu vraiment que chaque niveau de récursivité ait son propre
tableau
> ?
> > > Cela impliequerait de copier les données à chaque niveau de qui
> > > peut
> > > peut-être être évité (par exemple avec une pile).
> > >
> > >
> > > --
> > > Patrice
> > >
> > > "Jessy Sempere [MVP]" a écrit dans le
> message
> > de
> > > news:43f48aaf$
> > > > Re,
> > > >
> > > > Merci pour ta réponse...
> > > > En fait je pense savoir d'où viens le problème, en VBA, les
arguments
> > > passer
> > > > dans une fonction sont passer par défaut par référence, surtout
> > > > un
> > > argument
> > > > tableau qui ne peut pas être passé par valeur...
> > > > Visiblement, sous VB.NET, cette contrainte n'éxiste pas lorsque
j'ai> > > > retranscri mon code VBA sous VB.NET, il m'a mis pour tous mes
> arguments
> > > > ByVal y compris pour mon argument tableau...
> > > >
> > > > Je ne peux pas tester au boulot mais je testerais ce soir pour
> vérifier
> > ma
> > > > théorie ???
> > > >
> > > > Sinon, en terme de rapidité, est ce qu'après compilation de mon
code> si
> > il
> > > > fonctionne j'aurais les même performances que si je faisais plus
ou> > moins
> > > le
> > > > même code sous C ???
> > > >
> > > > @+
> > > > Jessy Sempere - Access MVP
> > > >
> > > > ------------------------------------
> > > > Site @ccess : http://access.jessy.free.fr/
> > > > Pour l'efficacité de tous :
> > > > http://www.mpfa.info/
> > > > ------------------------------------
> > > > "TroXsA" a écrit dans le message de
> > > > news:dt1u5u$nab$
> > > > > Bonjour,
> > > > >
> > > > > Voilà un exemple de récursivité avec tableau ArrayList
> > > > >
> > > >
> > >
> >
>
http://www.troxsa.info/index.php?option=com_content&task=view&id&Itemid=2> > > > >
> > > > > je sais pas si c'est bien ça que vous cherchiez ! mais bon ça
peut> > aidé
> > > !
> > > > >
> > > > > Cordialement
> > > > >
> > > > > --
> > > > >
> > > > > Mail : http://cerbermail.com/?rIXgaw9Xsl
> > > > > Site : http://troxsa.info
> > > > >
> > > > >
> > > > > "Jessy Sempere [MVP]" a écrit dans
le> > > message
> > > > de
> > > > > news: 43f477f0$
> > > > > > 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 .NET sous visual studio .net...
> > > > > >
> > > > > > A mon grand désespoir, la récursivité pour l'argument de type
> string
> > > > > > fonctionne mais pas 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 .NET 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/
> > > > > > ------------------------------------
> > > > > >
> > > > > >
> > > > > >
> > > > >
> > > > >
> > > >
> > > >
> > >
> > >
> >
> >
>
>