PureBasic

Forums PureBasic
Nous sommes le Ven 23/Aoû/2019 12:40

Heures au format UTC + 1 heure




Poster un nouveau sujet Répondre au sujet  [ 8 messages ] 
Auteur Message
 Sujet du message: [Résolu] Faire mieux qu'un "quad.q=Val(a$)"
MessagePosté: Lun 12/Aoû/2019 23:00 
Hors ligne
Avatar de l’utilisateur

Inscription: Mer 09/Nov/2005 9:53
Messages: 4043
Salut a tous, 8)

je cherche une solution plus rapide et moins bordelique que ma methode pour recuperer un quad dans une chaine.
Je sais, ca ressemble au sujet "décortiquer un quad" mais ca n'est pas la meme chose.
Pouvez vous m'aider :idea: :

Code:
x$="fe15d87c963aab7c4edffd874a54aaca85d6eef"


RandomSeed(1) ; seed

For i=1 To 5
x=Random(Len(x$))
a$="$"+Mid(x$,x,16)
quad.q=Val(a$)
Debug quad
Next i

;###############
Debug("======")
Debug ("La liste du dessus doit etre la meme que celle du dessous")
Debug("======")
;###############


RandomSeed(1) ; seed

For i=1 To 5
x=Random(Len(x$))

;quad.q= ;;;;;    votre methode

Debug quad
Next i


_________________
http://HexaScrabble.com/
!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Portable LENOVO ideapad 110-17ACL 64 bits
Version de PB : 5.70LTS - 32 bits


Dernière édition par SPH le Mer 14/Aoû/2019 15:25, édité 4 fois.

Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Faire mieux qu'un "quad.q=Val(a$)"
MessagePosté: Mar 13/Aoû/2019 1:44 
Hors ligne

Inscription: Ven 29/Juin/2007 17:50
Messages: 3483
On définit un tableau de 8 quads
Code:
Dim Q.Q(7)
On définit n la localisation du word en cours de traitement et Qn l'index du quad affecté par le traitement.
Code:
Define n, Qn
On définit un word
Code:
Define.U word
Puis, on lit, word après word, les mots de 16 bits.
Code:
n = 0
Qn = 0
Repeat
word = PeekU(*X + (n * 2) )
n + 1
; tralala
Until word = 0; quitte si terminal 0
C'est dans le tralala qu'on traite le 'word'. Il peut y avoir une fixation de la casse en minuscule :
Code:
word | $20
On peut détecter les chiffres décimaux
Code:
word - '0'
If word
If word <= 9
  a + word
EndIf
EndIf
word + '0'
On peut détecter les chiffres hexadécimaux
Code:
word - 'a'
If word
If word <= 5
  a + word + 10
EndIf
EndIf
word + 'a'
a devient le nombre accumulateur. C'est a qui va affecter le quad concerné du nombre final.
Code:
If ((n % 16) = 15) or (word = 0)
Q(Qn) = a
Qn + 1
a = 0
EndIf
a << 4

Voilà. Tout ça dans 'tralala' et ça marche...
Le résultat est dans le tableau Q()

_________________
Juste la 4G pour Smartphone


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Faire mieux qu'un "quad.q=Val(a$)"
MessagePosté: Mar 13/Aoû/2019 5:16 
Hors ligne
Avatar de l’utilisateur

Inscription: Mer 09/Nov/2005 9:53
Messages: 4043
Hola, hola, holaaa :!: 8O

Ca me parait incroyablement complexe pour ce que je demande...


Prend mon code au post 1 et rajoute ta methode pour voir :idea:

_________________
http://HexaScrabble.com/
!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Portable LENOVO ideapad 110-17ACL 64 bits
Version de PB : 5.70LTS - 32 bits


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Faire mieux qu'un "quad.q=Val(a$)"
MessagePosté: Mar 13/Aoû/2019 9:10 
Hors ligne

Inscription: Ven 29/Juin/2007 17:50
Messages: 3483
Tu veux ça

x= PokeQ(*Adresse)

Mais ton hasard est déséquilibré, faute d'explication... Pour ma part, c'est juste la fonction Val() que je décompose en étapes.

Ce n'est pas un équivalent total de ton code, juste un équivalent la fonction Val(), au cas où une solution AVX soit nécessaire.

Mais on ne sait rien... Longueur de la chaîne variable ou pas ? Grande ou pas ? Pourquoi choisir une plage qui force à tronquer les quads de droite et qui déséquilibre les statistiques aléatoires ? Etc...

_________________
Juste la 4G pour Smartphone


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Faire mieux qu'un "quad.q=Val(a$)"
MessagePosté: Mar 13/Aoû/2019 14:30 
Hors ligne
Avatar de l’utilisateur

Inscription: Mer 09/Nov/2005 9:53
Messages: 4043
Bon, j'ai trouvé un moyen. Je bosse dessus...

_________________
http://HexaScrabble.com/
!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Portable LENOVO ideapad 110-17ACL 64 bits
Version de PB : 5.70LTS - 32 bits


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: [En voie d'etre résolu] Faire mieux qu'un "quad.q=Val(a$
MessagePosté: Mar 13/Aoû/2019 16:33 
Hors ligne
Avatar de l’utilisateur

Inscription: Ven 11/Fév/2005 17:34
Messages: 4222
Localisation: Arras, France
Si tu fais x=Random(Len(x$)), tu risques de dépasser la fin de la chaîne. Il faut faire x=Random(Len(x$)-16).


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: [En voie d'etre résolu] Faire mieux qu'un "quad.q=Val(a$
MessagePosté: Mar 13/Aoû/2019 16:57 
Hors ligne
Avatar de l’utilisateur

Inscription: Mer 09/Nov/2005 9:53
Messages: 4043
djes a écrit:
Si tu fais x=Random(Len(x$)), tu risques de dépasser la fin de la chaîne. Il faut faire x=Random(Len(x$)-16).

C'est tres precisement ce que je pensais !
Oui, il faut faire attention :wink:

_________________
http://HexaScrabble.com/
!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Portable LENOVO ideapad 110-17ACL 64 bits
Version de PB : 5.70LTS - 32 bits


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: [Résolu] Faire mieux qu'un "quad.q=Val(a$)"
MessagePosté: Mer 14/Aoû/2019 2:00 
Hors ligne

Inscription: Ven 29/Juin/2007 17:50
Messages: 3483
Tu peux remplacer Val(Mid(A$,i,1) ) par un tableau pré-rempli
Code:
Dim vm(255)
vm(0) = -1
For i = 1 to 255
vm(i) = Val(Chr(i) )
Next

vm(?) -->> donne l'équivalent décimal d'un caractère hexadécimal codé en ASCII.

Code:
; exemple
Debug vm('f') ; affichera 15

; Exemple : "35a" (hexa)
Debug Hex(vm('3') << 8   |   vm('5') << 4   |   vm('a') )
; (affichera 35A)
Pour stocker dans un quad :

1) on fait de la place
Code:
myQuad << 4
2) on y "gare" sa nouvelle valeur de 4 bits (= 1 chiffre hexa)
Code:
myQuad | vm(Chose)



Remarques :



"Chose" est une valeur ASCII entre 1 et 255.
2 méthodes pour la récupérer

1/2) Chose = Asc(Mid("DE9A", i, 1) )

2/2) Chose = PeekA(*Adresse): *Adresse + 2



nombre << exposant
Ceci fait de la place à droite du nombre, et écrase la gauche du nombre :
exemples factices (base inadéquate, base 10 au lieu de base 2) :
1998 << 1 = 9980
1998 << 2 = 9800
1998 << 3 = 8000


nombre >> exposant
Ceci fait de la place à gauche du nombre, et écrase la droite du nombre :
exemples factices (base inadéquate, base 10 au lieu de base 2) :
1998 >> 1 = 0199
1998 >> 2 = 0019
1998 >> 3 = 0001


Logiquement, 4 chiffres de décalage dans un nombre de 4 chiffres, ça écrase tout : il ne reste que des zéros.


De la théorie à la pratique,
1) le signe et la grandeur du nombre ne sont pas à oublier.
Dans les décalages à droite (a >> b), le bit de signe est étiré et duppliqué autant que le nombre subit de bits de décalage.
2) les exemples sont en base 10, tandis que la réalité est en base 2.
3) dans les exemples, les nombres ont 4 chiffres. Dans la réalité, les entiers binaires ont entre 32 bits en X86, et 64 bits en X64.
4) dans un entier, le bit de droite, c'est le bit numéro zéro, et c'est aussi le bit de parité (0= nombre pair, 1= nombre impair)
5) dans un entier, le bit de gauche, c'est le bit numéro 31 (X86) ou 63 (X64), et c'est aussi le bit de signe.

_________________
Juste la 4G pour Smartphone


Haut
 Profil  
Répondre en citant le message  
Afficher les messages postés depuis:  Trier par  
Poster un nouveau sujet Répondre au sujet  [ 8 messages ] 

Heures au format UTC + 1 heure


Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 4 invités


Vous ne pouvez pas poster de nouveaux sujets
Vous ne pouvez pas répondre aux sujets
Vous ne pouvez pas éditer vos messages
Vous ne pouvez pas supprimer vos messages

Rechercher:
Aller à:  

 


Powered by phpBB © 2008 phpBB Group | Traduction par: phpBB-fr.com
subSilver+ theme by Canver Software, sponsor Sanal Modifiye