Page 1 sur 1

...

Publié : ven. 07/mai/2004 21:57
par Dr. Dri
...

Publié : ven. 07/mai/2004 22:33
par Dr. Dri
...

Publié : ven. 07/mai/2004 22:51
par Flype
intéréssant :wink:

Publié : ven. 07/mai/2004 22:58
par Dr. Dri
...

Publié : ven. 07/mai/2004 23:14
par nico
Moi qui me faisait une joie d'aller le voir ! :roll:

Publié : ven. 07/mai/2004 23:19
par Dr. Dri
...

Publié : sam. 08/mai/2004 10:47
par Dr. Dri
...

Publié : ven. 21/mai/2004 12:05
par Dr. Dri
...

Publié : ven. 21/mai/2004 13:07
par Backup
heu!! je veux pas chercher la polémique mais ils me parrait tres compliqué
d'usée de peek et poke pour faire un echange de variable !!

esce vraiment plus rapide que d'utiliser 3 variables
ou meme de 2 variables pour les contenus numerique ???

ha moins que le but soit le chalenge intellectuel , dans ce cas je comprend !
:)

Publié : ven. 21/mai/2004 13:54
par fweil
Dobro,

Les Peek / Poke coûtent + cher que le passage par des variables oui ... à ma connaissance.

Voici la preuve ?!

Code : Tout sélectionner

Procedure SwapB(a.l, b.l) ; de Dr Dri
  c.b 
  c = PeekB(a) 
  PokeB(a, PeekB(b)) 
  PokeB(b, c) 
EndProcedure 

Procedure Swap(*a, *b) ; Pour bien comprendre
  a = PeekL(*a)
  b = PeekL(*b)
  PokeL(*a, b)
  PokeL(*b, a)
EndProcedure

Procedure MySwapL(*a, *b) ; Et voilà ce que je fais MOOOOA ! Toujours le principe d'évitement des Peek / Poke
  !  MOV    eax,dword [esp] ; eax = *a
  !  MOV    ecx,[eax] ; ecx = a
  !  MOV    ebx,dword [esp+4] ; ebx = *b
  !  MOV    edx,[ebx] ; edx = b
  !  MOV    [eax], edx ; *a = b
  !  MOV    [ebx], ecx ; *b = a
EndProcedure

Count = 2500000 ; Je fixe Count à "l'infini", valeur assez grande pour faire un bon test et paire, comme ça la dernière itération devrait donner pour résultat deux valeurs permutées

OpenConsole()

tz = ElapsedMilliseconds() : a = 13 : b = 12 : For i = 1 To Count : SwapB(@a, @b) : Next : PrintN(Str(ElapsedMilliseconds() - tz) + " " + Str(a) + " " + Str(b))
tz = ElapsedMilliseconds() : a = 13 : b = 12 : For i = 1 To Count : Swap(@a, @b) : Next : PrintN(Str(ElapsedMilliseconds() - tz) + " " + Str(a) + " " + Str(b))
tz = ElapsedMilliseconds() : a = 13 : b = 12 : For i = 1 To Count : MySwapL(@a, @b) : Next : PrintN(Str(ElapsedMilliseconds() - tz) + " " + Str(a) + " " + Str(b))

While Inkey() = "" : Wend

CloseConsole()

End

Publié : ven. 21/mai/2004 14:43
par Dr. Dri
...

Publié : ven. 21/mai/2004 14:58
par Backup
ben je voulai juste (son prenom) savoir si c'etait pas plus simple de faire

si
a=5
b=8

-----algorithme tres complexe !!------------
c=a
a=b
b=c
------------------
resultat

a=8
b=5
avantage !! ça marche avec tout type de variables !!!

:D

faut mettre ça dans le site des codes !!! :)

Publié : ven. 21/mai/2004 20:51
par Dr. Dri
...

Publié : ven. 21/mai/2004 21:46
par Backup
Dr. Dri a écrit : L'algo je veux bien le faire mais y faudrait juste qu'il y ai des marcos paramètrées en PB...
Dri
c'est pas prevu ça dans une prochaine version de pure ? :)