OVH Cloud OVH Cloud

opération sur un tableau complet en une seule fois?

38 réponses
Avatar
marc.dufresne
bonjour
on peut faire correspondre deux tableaux ex tablo1()=tablo2()
mais peut on effectuer une opération sur un tableau complet comme du genre:
tablo1()=tablo2()+5 (ajouter 5 à la valeur de chaque élément du tablo2). Je
sais que ce que j'ai écrit n'est pas valable mais y aurait-il un moyen
quelconque? En fait trouver une méthode utra rapide pour changer toutes les
valeurs d'un tableau!

merci d'avance

10 réponses

1 2 3 4
Avatar
Thierry
On ne t'as jamais dit que multiplier quelque chose par zéro, ca donne zro ?
et que zéro + zéro.. ca ne donne pas à tête à toto mais aussi zéro ?

Thierry, mdr !

"X" a écrit dans le message de news:
#
Non Môsieur,

Les objets commence à zéro, et les variables à 1 (sauf ???), voici un
exemple:

Sub Form_Activate()
Dim i As Long
Dim t1(9)
Dim t2(9)
'
For i = 1 To 9
t1(i) = Second(Time) * i
t2(i) = t1(i) + i
Next i
'
List1.Clear
For i = 1 To 9
List1.AddItem i & " = " & Format(t1(i), "000") & " : " & Format(t2(i),
"000")
Next i
End Sub

Les valeurs 1 à 9 son templies
----------------------------------

Mais si je fais:


Sub Form_Activate()
Dim i As Long
Dim t1(9)
Dim t2(9)
'
For i = 0 To 9
t1(i) = Second(Time) * i
t2(i) = t1(i) + i
Next i
'
List1.Clear
For i = 0 To 9
List1.AddItem i & " = " & Format(t1(i), "000") & " : " & Format(t2(i),
"000")
Next i
End Sub

LA VALEUR 0 EST VIDE !!!

--
Merci beaucoup, au revoir et à bientôt :o)
------
Site logiciels
http://irolog.free.fr
Mail
http://irolog.free.fr/ecrire/index.htm
Site perso
http://irolog.free.fr/joe/index.htm
Principe d'utilisation des news Groups
http://support.microsoft.com/directory/worldwide/fr/newsgroup/regles.htm
--------------------------------------------------------------------------


----------
"Guy DETIENNE" a écrit dans le message de news:

> Salut ;O)
>
> N'oublie pas qu'un tableau par défaut en VB est indicé à 0. Donc ton
> exemple ne remplira jamais l'indice 0, seulement 1 à 100.
> Si tu désires que l'indice commence à 1, il faut le déclarer


explicitement
> en en-tête avec l'instruction suivante : Option Base 1 (perso, je ne


bosse
> jamais ainsi)
>
> Pour évitier cela, utilise LBound et UBound pour connaître les bornes
> inférieures et supérieures d'un tableau :
> Pour info, LBound et UBound plantent si le tableau n'est pas


dimensionné.
> Donc il faudra préalablement vérifié sur le tableau est dimensionné en
> trappant l'erreur.
>
> For i = LBound(t1) To UBound(t1)
> t2(i) = t1(i) + 5
> Next i
>
> Guy
>
>
>
>
> "X" a écrit dans le message de
> news:
>> Bonjour, pour reprendre ton exemple:
>>
>> dim t1(100)
>> dim t2(100)
>> dim i as ong
>> ...on leur donne des valeurs...
>> for i = 1 to 100
>> t2(i)=t1(i) + 5
>> next i
>>
>> --
>> Merci beaucoup, au revoir et à bientôt :o)
>> ------
>> Site logiciels
>> http://irolog.free.fr
>> Mail
>> http://irolog.free.fr/ecrire/index.htm
>> Site perso
>> http://irolog.free.fr/joe/index.htm
>> Principe d'utilisation des news Groups
>>


http://support.microsoft.com/directory/worldwide/fr/newsgroup/regles.htm

-------------------------------------------------------------------------




-
> ----------
>> "marc.dufresne" a écrit dans


le
>> message de news: 44723323$0$8028$
>> > bonjour
>> > on peut faire correspondre deux tableaux ex tablo1()=tablo2()
>> > mais peut on effectuer une opération sur un tableau complet comme du
>> > genre: tablo1()=tablo2()+5 (ajouter 5 à la valeur de chaque élément


du
>> > tablo2). Je sais que ce que j'ai écrit n'est pas valable mais y
> aurait-il
>> > un moyen quelconque? En fait trouver une méthode utra rapide pour
> changer
>> > toutes les valeurs d'un tableau!
>> >
>> > merci d'avance
>> >
>>
>>
>
>




Avatar
marc.dufresne
bonsoir

très bien j'ai vu ta page web
je suis étonné qu'en C++ ça se résume à une ligne de commande !
apparement avec les calculs que tu as fait c'est vraiment intéressant
d'utiliser une DLL en C!
J'ai regardé aussi la page d'explication de création d'une DLL en c, mais je
n'y comprends rien en C, j'ai essayé avec un Compilateur que j'ai téléchargé
mais rien n'y fait!!
est ce possible que tu me fournisses cette dll toute faite?

même si c'est pas possible merci pour tes explications et tes tests


"Jean-Marc" a écrit dans le message de news:
4476c2c4$0$411$
"marc.dufresne" a écrit dans le
message de news:4474e4ee$0$24913$
Bonsoir plutôt bonne nuit

je n'ai pas encore essayé avec un coefficient, mais je ne comprends


pas
comment tu obtiens des gains soit de 10% soit de 1000%, je suppose que


ce
n'est pas avec les mêmes méthodes!?

Je suis Ok pour que tu fournisses une dll version C mais il faudra
m'explique comment on s'en sert et surtout si ça ne te dérange pas de


me
commenter ta méthode, je tiens à apprendre quelque chose,c'est ça qui
m'intéresse dans la réalisation de mon programe




Hello,

j'ai fait une petite page web qui résume tout cela,
avec des jolis tableaux et graphiques :-)

Le tout disponible ici:
http://users.skynet.be/candide/bench/bencha/bencharray.htm
et la:
http://myjmnhome.dyndns.org/vb/documents/benchArray/benchArray.htm

--
Jean-marc
Tester mon serveur (VB6) => http://myjmnhome.dyndns.org
"There are only 10 kind of people
those who understand binary and those who don't."
mailto: remove '_no_spam_' ;



Avatar
Jean-Marc
Hello Marc,

oui je peux t'envoyer la dll, si tu me contactes par email.
mon adresse Yahoo:

marc.dufresne a écrit :

bonsoir

très bien j'ai vu ta page web
je suis étonné qu'en C++ ça se résume à une ligne de commande !
apparement avec les calculs que tu as fait c'est vraiment intéressant
d'utiliser une DLL en C!
J'ai regardé aussi la page d'explication de création d'une DLL en c, mais je
n'y comprends rien en C, j'ai essayé avec un Compilateur que j'ai tél échargé
mais rien n'y fait!!
est ce possible que tu me fournisses cette dll toute faite?

même si c'est pas possible merci pour tes explications et tes tests


"Jean-Marc" a écrit dans le message de news:
4476c2c4$0$411$
> "marc.dufresne" a écrit dans le
> message de news:4474e4ee$0$24913$
>> Bonsoir plutôt bonne nuit
>>
>> je n'ai pas encore essayé avec un coefficient, mais je ne comprends
> pas
>> comment tu obtiens des gains soit de 10% soit de 1000%, je suppose que
> ce
>> n'est pas avec les mêmes méthodes!?
>>
>> Je suis Ok pour que tu fournisses une dll version C mais il faudra
>> m'explique comment on s'en sert et surtout si ça ne te dérange pas de
> me
>> commenter ta méthode, je tiens à apprendre quelque chose,c'est ç a qui
>> m'intéresse dans la réalisation de mon programe
>>
>
> Hello,
>
> j'ai fait une petite page web qui résume tout cela,
> avec des jolis tableaux et graphiques :-)
>
> Le tout disponible ici:
> http://users.skynet.be/candide/bench/bencha/bencharray.htm
> et la:
> http://myjmnhome.dyndns.org/vb/documents/benchArray/benchArray.htm
>
> --
> Jean-marc
> Tester mon serveur (VB6) => http://myjmnhome.dyndns.org
> "There are only 10 kind of people
> those who understand binary and those who don't."
> mailto: remove '_no_spam_' ;
>


Avatar
Jean-marc
marc.dufresne a écrit :

bonsoir

très bien j'ai vu ta page web
je suis étonné qu'en C++ ça se résume à une ligne de commande !



C'est l'avanatge du C (pas du C++ ici, c'est du C)

apparement avec les calculs que tu as fait c'est vraiment intéressant
d'utiliser une DLL en C!



Oui c'est clair!

J'ai regardé aussi la page d'explication de création d'une DLL en c, mais je
n'y comprends rien en C, j'ai essayé avec un Compilateur que j'ai tél échargé
mais rien n'y fait!!



...

est ce possible que tu me fournisses cette dll toute faite?

même si c'est pas possible merci pour tes explications et tes tests



Non seulement c'est possible, mais c'est même avec plaisir:
http://users.skynet.be/candide/bench/bencha/bench_dll.html

Sur cette page, tu trouveras la dll et le .map (juste pour l'exemple,
il n'est pas nécessaire).

Bonne prog :-)
Avatar
marc.dufresne
bonjour

merci pour cette dll je vais essayé de ce pas mais le .map c'est quoi ?? à
quoi ca sert??
merci et mille fois merci

"Jean-marc" a écrit dans le message de news:


marc.dufresne a écrit :

bonsoir

très bien j'ai vu ta page web
je suis étonné qu'en C++ ça se résume à une ligne de commande !



C'est l'avanatge du C (pas du C++ ici, c'est du C)

apparement avec les calculs que tu as fait c'est vraiment intéressant
d'utiliser une DLL en C!



Oui c'est clair!

J'ai regardé aussi la page d'explication de création d'une DLL en c, mais
je
n'y comprends rien en C, j'ai essayé avec un Compilateur que j'ai
téléchargé
mais rien n'y fait!!



...

est ce possible que tu me fournisses cette dll toute faite?

même si c'est pas possible merci pour tes explications et tes tests



Non seulement c'est possible, mais c'est même avec plaisir:
http://users.skynet.be/candide/bench/bencha/bench_dll.html

Sur cette page, tu trouveras la dll et le .map (juste pour l'exemple,
il n'est pas nécessaire).

Bonne prog :-)
Avatar
marc.dufresne
rebonjour
je viens de tenter d'intégrer tadll dans mon prog mais:
j'ai vu dans le fichier le nom interne de la fonction si je ne me suis pas
trompé c'est ?
après dans le fichier map il y a aussi trois noms je suppose de
fonction,(, , , mais
celles ci je ne les appelle pas?
-ensuite dans http://users.skynet.be/candide/jmn/vb/documents/cvb/cetvb.htm
tu dits qu'il faut déclarer la fonction comme:
"Option Explicit
Public Declare Function GradientTablo Lib "App.Path & quickarray.dll" Alias
"" (ByVal n As Long) As Integer"
1er je ne sais pas si app.path est bon ou s'il faut marquer en toute lettre
un chemin? mais surtout
2eme c'est la fin "(ByVal n As Long) As Integer" qui me parrait pas correcte
car en fait j'envois un tableau et des dimmensions pour récupérer un
tableau!! j'ai comme message d'erreur "nombre d'arguments incorrect ou
d'affectation de propriété incorrecte" bien sûr avecla fonction
GradientTablo surligné!!

J'ai réglé le pb de app.path, copié la bonne adresse.
j'ai suprimé à la fin de la fonction ""(ByVal n As Long) As Integer"
et là quand je lance le prog au momment ou il va chercher la dll il ferme
mon application VB même compilée

enfin si ça ne te dérange pas comment faire pour bien déclarer ma fonction,
ou enregistrer la dll, et comment bien l'appeler

merci encore




"Jean-marc" a écrit dans le message de news:


marc.dufresne a écrit :

bonsoir

très bien j'ai vu ta page web
je suis étonné qu'en C++ ça se résume à une ligne de commande !



C'est l'avanatge du C (pas du C++ ici, c'est du C)

apparement avec les calculs que tu as fait c'est vraiment intéressant
d'utiliser une DLL en C!



Oui c'est clair!

J'ai regardé aussi la page d'explication de création d'une DLL en c, mais
je
n'y comprends rien en C, j'ai essayé avec un Compilateur que j'ai
téléchargé
mais rien n'y fait!!



...

est ce possible que tu me fournisses cette dll toute faite?

même si c'est pas possible merci pour tes explications et tes tests



Non seulement c'est possible, mais c'est même avec plaisir:
http://users.skynet.be/candide/bench/bencha/bench_dll.html

Sur cette page, tu trouveras la dll et le .map (juste pour l'exemple,
il n'est pas nécessaire).

Bonne prog :-)
Avatar
Jean-marc
> rebonjour



Hello,

je viens de tenter d'intégrer tadll dans mon prog mais:
j'ai vu dans le fichier le nom interne de la fonction si je ne me suis pas
trompé c'est ?



Oui.

après dans le fichier map il y a aussi trois noms je suppose de
fonction,(, , , mais
celles ci je ne les appelle pas?



Exact.

-ensuite dans http://users.skynet.be/candide/jmn/vb/documents/cvb/cetvb.h tm
tu dits qu'il faut déclarer la fonction comme:
"Option Explicit
Public Declare Function GradientTablo Lib "App.Path & quickarray.dll" Al ias
"" (ByVal n As Long) As Integer"
1er je ne sais pas si app.path est bon ou s'il faut marquer en toute lett re
un chemin? mais surtout



Il faut marquer en toute lettre un chemin.


2eme c'est la fin "(ByVal n As Long) As Integer" qui me parrait pas corre cte
car en fait j'envois un tableau et des dimmensions pour récupérer un
tableau!! j'ai comme message d'erreur "nombre d'arguments incorrect ou
d'affectation de propriété incorrecte" bien sûr avecla fonction
GradientTablo surligné!!



Non, tu te trompes. La déclaration est:

Private Declare Sub GradientTablo Lib
"C:JMDvpmtVCquickarrayreleasequickarray.dll" Alias
"" _
(PicBits2 As Long, _
PicBits As Long, _
ByVal nbElem As Long, _
ByVal Coeff As Double)

La focntion prend en paramètre un tableau pour le résultat, un
tableau avec les valeurs de départ, le nombre d'éléments (voir le
calcul plus bas) et un coeff.



Const Lpics As Long = 1280
Const Hpics As Long = 1024
Const Sprof As Long = 3
Const Coeff As Long = 0.5
Dim PicBits2(1 To Sprof, 1 To Lpics, 1 To Hpics) As Long
Dim PicBits(1 To Sprof, 1 To Lpics, 1 To Hpics) As Long

Et voici l'appel:

GradientTablo PicBits2(1, 1, 1), PicBits(1, 1, 1), CLng(Lpics *
Hpics * Sprof), 0.5

enfin si ça ne te dérange pas comment faire pour bien déclarer ma f onction,
ou enregistrer la dll, et comment bien l'appeler



La déclaration, c'est comme indiqué. Autre moyen, beaucoup plus
propre:
1) copier la dll dans ton répertoire Windowssystem ou system32
2) La registrer avec regsvr32
3) changer la déclaration en VB en mettant uniquement le nom de la
dll, sans mention de chemin.

Voila, A++
Avatar
marc.dufresne
bonjour
je viens de faire ces essais mais big problème VB plante,
ceci en déclaration Public Declare Sub GradientTablo Lib "G:Mes
Documentsprrogramationvisual basicessai ecran de
veilleveille_scrquickarray.dll" Alias "" _
(PicBits2 As Byte, _
PicBits As Byte, _
ByVal nbElem As Long, _
ByVal Coeff As Double)
j'ai changé picsbits2 as long par as byte puisque c'est des tableau de byte
et j'avais le message d'erreur "type d'argument By Ref incompatible"

j'ai donc essayé d'enregistrer directement la dll mais là autre problème :
"quickarray.dll a été chargé mais le point d'entrée DllRegisterServer est
introuvable. Ce fichier ne peut pas être enregistré."

Et enfi j'ai reéssayé en transformant mes tableau PicsBits en Long et donc
la déclaration PicsBits2 as long mais là l'image n'est pas celle que
j'attendais!
car la fonction qui va afficher le tableau picbits2 attends un tableau de
byte avec les valeurs des couleurs pour chaque pixel. Enfin je crois que
c'est ça qui me donne un affichage erronné

pourrais tu me rectifier cette dll pour quelle accepte des tableaux de byte

merci



"Jean-marc" a écrit dans le message de news:

rebonjour



Hello,

je viens de tenter d'intégrer tadll dans mon prog mais:
j'ai vu dans le fichier le nom interne de la fonction si je ne me suis pas
trompé c'est ?



Oui.

après dans le fichier map il y a aussi trois noms je suppose de
fonction,(, , , mais
celles ci je ne les appelle pas?



Exact.

-ensuite dans
http://users.skynet.be/candide/jmn/vb/documents/cvb/cetvb.htm
tu dits qu'il faut déclarer la fonction comme:
"Option Explicit
Public Declare Function GradientTablo Lib "App.Path & quickarray.dll"
Alias
"" (ByVal n As Long) As Integer"
1er je ne sais pas si app.path est bon ou s'il faut marquer en toute
lettre
un chemin? mais surtout



Il faut marquer en toute lettre un chemin.


2eme c'est la fin "(ByVal n As Long) As Integer" qui me parrait pas
correcte
car en fait j'envois un tableau et des dimmensions pour récupérer un
tableau!! j'ai comme message d'erreur "nombre d'arguments incorrect ou
d'affectation de propriété incorrecte" bien sûr avecla fonction
GradientTablo surligné!!



Non, tu te trompes. La déclaration est:

Private Declare Sub GradientTablo Lib
"C:JMDvpmtVCquickarrayreleasequickarray.dll" Alias
"" _
(PicBits2 As Long, _
PicBits As Long, _
ByVal nbElem As Long, _
ByVal Coeff As Double)

La focntion prend en paramètre un tableau pour le résultat, un
tableau avec les valeurs de départ, le nombre d'éléments (voir le
calcul plus bas) et un coeff.



Const Lpics As Long = 1280
Const Hpics As Long = 1024
Const Sprof As Long = 3
Const Coeff As Long = 0.5
Dim PicBits2(1 To Sprof, 1 To Lpics, 1 To Hpics) As Long
Dim PicBits(1 To Sprof, 1 To Lpics, 1 To Hpics) As Long

Et voici l'appel:

GradientTablo PicBits2(1, 1, 1), PicBits(1, 1, 1), CLng(Lpics *
Hpics * Sprof), 0.5

enfin si ça ne te dérange pas comment faire pour bien déclarer ma
fonction,
ou enregistrer la dll, et comment bien l'appeler



La déclaration, c'est comme indiqué. Autre moyen, beaucoup plus
propre:
1) copier la dll dans ton répertoire Windowssystem ou system32
2) La registrer avec regsvr32
3) changer la déclaration en VB en mettant uniquement le nom de la
dll, sans mention de chemin.

Voila, A++
Avatar
jean-marc
"marc.dufresne" a écrit dans le
message de news:448adf36$0$1337$
bonjour

pourrais tu me rectifier cette dll pour quelle accepte des tableaux de


byte

Hello,

c'est fait la dll est dispo ici:
http://users.skynet.be/candide/jmn/vb/quickarraybytedll/benchbytedll.html

Voici mon programme de test:

Private Declare Sub GradientTabloByte Lib
"C:JMDvpmtVCquickarrayreleasequickarray.dll" Alias
"" _
(PicBits2 As Byte, _
PicBits As Byte, _
ByVal nbElem As Long, _
ByVal Coeff As Double)

Const Lpics As Long = 1280
Const Hpics As Long = 1024
Const Sprof As Long = 3
Const Coeff As Long = 0.5
Dim PicBits2(1 To Sprof, 1 To Lpics, 1 To Hpics) As Byte
Dim PicBits(1 To Sprof, 1 To Lpics, 1 To Hpics) As Byte

Public Sub test2()
Dim x As Long, y As Long

For x = 1 To Lpics
For y = 1 To Hpics
PicBits(1, x, y) = 254
PicBits(2, x, y) = 254
PicBits(3, x, y) = 254
Next y
Next x
GradientTabloByte PicBits2(1, 1, 1), PicBits(1, 1, 1), CLng(Lpics *
Hpics * Sprof), 0.5
End Sub

C'est testé, et ça marche (après l'appel, toutes les
valeurs de picBits2 sont à 127, ce qui est bien 254*0.5)

--
Jean-marc
Tester mon serveur (VB6) => http://myjmnhome.dyndns.org
"There are only 10 kind of people
those who understand binary and those who don't."
mailto: remove '_no_spam_' ;
Avatar
marc.dufresne
bonjour jean marc
c'est impécable , c'est très rapide j'affiche une photo de 1280*960 en 11
secondes avec 15 variations différentes!
j'ai remarquè une petite différence entre le mode non compilé en VB et le
mode compilé, bizarement en non compilé c'est un peu plus rapide!! ça te
parait normal???
Je voudrais encore abuser de ton temps en fait j'aurais voulu partir d'une
couleur de fond pour arriver à mon image
donc est ce que tu pourrais me refaire 2 dll pour tester ces nouveaux
résultat je voudrais 1er ce type de calcul:
PicBits2(1, X, Y) = 216 + ((PicBits(1, X, Y) - 216) * coef)
PicBits2(2, X, Y) = 233 + ((PicBits(2, X, Y) - 233) * coef)
PicBits2(3, X, Y) = 236 + ((PicBits(3, X, Y) - 236) * coef)
216,233,236 étant la valeur rgb de ma couleur de fond donc comme variable
rajouter Rfond,Gfond,Bfond

mais peut être que le calcul sur les éléments séparés vont augmenter trop le
temps de calcul alors on peut essayé un autre type de calcul
pour tous les éléments:
PicBits2()"9+((PicBits()-229)*coef)
229 étant une valeur moyenne RGB(229,229,229) pour partir d'une couleur de
fond qui n'est pas toute noire.

car toutes mes transitions d'image se font sur un fond qui est
rgb(236,233,216)

Enfin tu vois si c'est possible et pas trop génant pour toi

encore merci


"jean-marc" a écrit dans le message de news:
448af0ca$0$28386$
"marc.dufresne" a écrit dans le
message de news:448adf36$0$1337$
bonjour

pourrais tu me rectifier cette dll pour quelle accepte des tableaux de


byte

Hello,

c'est fait la dll est dispo ici:
http://users.skynet.be/candide/jmn/vb/quickarraybytedll/benchbytedll.html

Voici mon programme de test:

Private Declare Sub GradientTabloByte Lib
"C:JMDvpmtVCquickarrayreleasequickarray.dll" Alias
"" _
(PicBits2 As Byte, _
PicBits As Byte, _
ByVal nbElem As Long, _
ByVal Coeff As Double)

Const Lpics As Long = 1280
Const Hpics As Long = 1024
Const Sprof As Long = 3
Const Coeff As Long = 0.5
Dim PicBits2(1 To Sprof, 1 To Lpics, 1 To Hpics) As Byte
Dim PicBits(1 To Sprof, 1 To Lpics, 1 To Hpics) As Byte

Public Sub test2()
Dim x As Long, y As Long

For x = 1 To Lpics
For y = 1 To Hpics
PicBits(1, x, y) = 254
PicBits(2, x, y) = 254
PicBits(3, x, y) = 254
Next y
Next x
GradientTabloByte PicBits2(1, 1, 1), PicBits(1, 1, 1), CLng(Lpics *
Hpics * Sprof), 0.5
End Sub

C'est testé, et ça marche (après l'appel, toutes les
valeurs de picBits2 sont à 127, ce qui est bien 254*0.5)

--
Jean-marc
Tester mon serveur (VB6) => http://myjmnhome.dyndns.org
"There are only 10 kind of people
those who understand binary and those who don't."
mailto: remove '_no_spam_' ;



1 2 3 4