[résolu] Traduire une fonction VB en PB

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
SPH
Messages : 4947
Inscription : mer. 09/nov./2005 9:53

Re: Traduire une fonction VB en PB

Message par SPH »

100 donne t'il 90 ou bien 89 dans ta logique ?

!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.12LTS- 64 bits
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Traduire une fonction VB en PB

Message par Backup »

ben essaye avec le code

100 va donner 101

alors que 101 va donner 99 car 100 fini par un zero , et qu'il en veux pas ... le gars .. :)


... mais j'ai peut etre rien compris a ce qu'il veux ... :lol:


ps : bon c'est un couche tot , on ne le reverra pas avant demain :)
Avatar de l’utilisateur
SPH
Messages : 4947
Inscription : mer. 09/nov./2005 9:53

Re: Traduire une fonction VB en PB

Message par SPH »

prenons plutot 101.
Micoute : Il y a un zero en plein millieu ! Comment le geres tu ?

!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.12LTS- 64 bits
Avatar de l’utilisateur
Micoute
Messages : 2584
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

Re: Traduire une fonction VB en PB

Message par Micoute »

Bonjour à tous,
100 donne t'il 90 ou bien 89 dans ta logique ?
100 = 121

Je reprend mon programme de codage :

Code : Tout sélectionner

Procedure.s DecimalToBase9(DecimalToBase9.q)
  
  A = 0
  
  Repeat
    
    A + 1
    B + 1
    
    While FindString(Str(B), "0", 1) ; remplacer les 0 par des 1
      B + 1
    Wend
    
    If A => DecimalToBase9.q
      ProcedureReturn Str(A) + " = " + Str(B)
    EndIf
    
  ForEver
  
EndProcedure

For i = 1 To 100
Debug DecimalToBase9(i)
Next
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 6.20 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Avatar de l’utilisateur
SPH
Messages : 4947
Inscription : mer. 09/nov./2005 9:53

Re: Traduire une fonction VB en PB

Message par SPH »

Bon, et a quoi sert ta routine ? :?:

!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.12LTS- 64 bits
Avatar de l’utilisateur
Micoute
Messages : 2584
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

Re: Traduire une fonction VB en PB

Message par Micoute »

SPH a écrit :Bon, et a quoi sert ta routine ? :?:
Si je veux exclure le zéro, c'est parce qu'il va me servir de séparateur, ainsi 13213210346513210 peut mieux se découper si je sais où je dois le faire, mais si je mets un autre caractère, mon code va être cracké tout de suite, car 1321321|34651321| ça se remarque toute de suite.
Dernière modification par Micoute le jeu. 30/mai/2013 9:13, modifié 1 fois.
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 6.20 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Traduire une fonction VB en PB

Message par Backup »

tout ça pour ça ? ...... :lol:

et voila

Code : Tout sélectionner

nombre.s="13213210346513210"
id= CountString(nombre.s,"0")
for i=1 to id
	debug stringfield(nombre.s,i,"0")
next i
; EPB
si tu t'etais expliqué tout de suite , on aurai gagné du temps ;)
Avatar de l’utilisateur
Micoute
Messages : 2584
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

Re: Traduire une fonction VB en PB

Message par Micoute »

Merci Dobro,
Dobro a écrit :tout ça pour ça ? ...... :lol:

et voila

Code : Tout sélectionner

nombre.s="13213210346513210"
id= CountString(nombre.s,"0")
for i=1 to id
	debug stringfield(nombre.s,i,"0")
next i
; EPB
si tu t'étais expliqué tout de suite , on aurai gagné du temps ;)
d'accord, mais comment je décode les nombres trouvés (base 9) en décimal (base 10)?
on en est toujours au point de départ !
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 6.20 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Traduire une fonction VB en PB

Message par Backup »

bon deja voici le meme code utilisant une listchainée , car on ne connais pas le nombre de segment
un segment etant une suite de chiffres entre les "0" ... d'apres tes explications
Micoute a écrit :Si je veux exclure le zéro, c'est parce qu'il va me servir de séparateur, ainsi 13213210346513210 peut mieux se découper si je sais où je dois le faire, mais si je mets un autre caractère, mon code va être cracké tout de suite, car 1321321|34651321| ça se remarque toute de suite.

Code : Tout sélectionner


Declare  decoupe(nombre.s)
calldebugger
nombre.s="132132103465132106548496851306506846860686468600"
debug   "chaines de reference "+nombre.s
global newlist sequence.s()

decoupe(nombre.s) ; on decoupe nombre
; ****** affiche le contenu de la liste ******
ResetList(sequence.i())
While NextElement(sequence.i())
	Debug  val(sequence.i()) ; Affiche tous les éléments de la liste
Wend



procedure decoupe(nombre.s)
	; Dobro
	ClearList(sequence.s()) 
	id= CountString(nombre.s,"0")
	For i=1 to id
		sortie.s=stringfield(nombre.s,i,"0")
		if Sortie.s<>""
			AddElement(sequence.s())
			sequence.s()=sortie.s
		Endif
	Next i
Endprocedure

; EPB

bon , maintenant tu parle de base 9 !!!

il te faut donc un convertisseur de base ...
j'avais posté il y a quelques temp un convertisseur de base

tu mets la base que tu veux , ça va le faire ;)

Code : Tout sélectionner

; l'algo est basé sur le principe suivant :
; pour le nombre 94 en base 2 
; 94/2 = 0 reste 47
; 47/2 = 1 reste 23
; 23/2 = 1 reste 11
; 11/2 = 1 reste 5
; 5/2 = 1 reste 2
; 2/2 = 0 reste 1 
; donc : nombre/base .... on recup le resultat qu'on affiche, puis on prends le reste de la division comme nouveau nombre !
; ce qui donne  "1011110" (en partant du dernier puis en remontant )

Declare.s Base(nombre,Base)


nombre=194
Debug "la valeur 194 en Decimal"
base=8 ; en Octal
debug  "en octal :"+Base(nombre,Base)
nombre=194
base=16 ; en Hexa
debug   "en Hexadecimal :"+Base(nombre,Base)
nombre=194
base=2 ; en Binaire
debug   "en Binaire:"+Base(nombre,Base)

nombre=194
base=20 ; en base 20 !!!! 
debug   "en base 20:"+Base(nombre,Base)


calldebugger


Procedure.s Base(nombre,Base)
	; By Dobro
	string_ref.s="0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z"
	while nombre>0
		reste=Mod(nombre,base)
		Resultat.s=Resultat.s+ StringField(string_ref.s,Reste+1,",")  ;;str(reste)
		nombre=nombre/base
	Wend
	ProcedureReturn ReverseString(Resultat.s)
Endprocedure

; 

; EPB
Dernière modification par Backup le jeu. 30/mai/2013 10:16, modifié 3 fois.
Avatar de l’utilisateur
Micoute
Messages : 2584
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

Re: Traduire une fonction VB en PB

Message par Micoute »

Merci beaucoup Dobro,

ton code s'approche très fortement de ce que je souhaite faire, mais c'est pas encore ça, car il laisse passer les zéros

ça me donne une idée, quand on à un multiple de la base, le résultat indique le nombre de fois que la base à été multipliée, ainsi 9 donne 10 (1 fois la base + 0 unités), 18 donne 20 (2 * base + 0) etc...

j'aimerais donc, chaque fois qu'on à un multiple de la base, ajouter 1 au nombre, ainsi 10 deviendrai 11, 20 = 21, 30 = 31, ainsi de suite, mais j'ai vérifié au delà de 89, il y a un problème parce 90 = 100 et là j'ai deux zéros, donc ma logique n'est pas bonne !

Sinon je pense à une base de données où je mettrais ma valeur décimale et ma valeur codée et il me suffirait de retrouver une des valeur pour retrouver l'autre, mais si je veux coder une image la palette de valeurs RGBA() irait de 0 à 4294967295, alors bonjour la taille de la BDD surtout s'il faut l'envoyer avec l'image codée !
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 6.20 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Avatar de l’utilisateur
SPH
Messages : 4947
Inscription : mer. 09/nov./2005 9:53

Re: Traduire une fonction VB en PB

Message par SPH »

SPH a écrit :Code ultra optimisé :

Code : Tout sélectionner

nombre=31

Debug nombre-(nombre/10)
Ca ne te conviens pas, ca ? :|

!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.12LTS- 64 bits
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Traduire une fonction VB en PB

Message par Backup »

Micoute a écrit :car il laisse passer les zéros
plus maintenant !!
reessaye mon code de decoupe ;)
Avatar de l’utilisateur
Micoute
Messages : 2584
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

Re: Traduire une fonction VB en PB

Message par Micoute »

Merci encore Dobro,

ton code de découpe est excellent, mais je reviens toujours à mon problème principal, c'est-à-dire le décodage des nombres, mon idée de BDD est bien sûr a proscrire, bien que ce soit la meilleure méthode de codage/décodage, car il serait mieux de trouver une méthode mathématique, après tout, les ordinateurs sont faits pour ça !
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 6.20 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Traduire une fonction VB en PB

Message par Backup »

Micoute a écrit :Merci encore Dobro,

ton code de découpe est excellent, mais je reviens toujours à mon problème principal, c'est-à-dire le décodage des nombres,
precise ce point precis , qu'entends tu exactement par "decodage"/"codage"

si le but est d'encoder les Segments (rappel un segment est un nombre obtenu apres decoupe (entre les "0")
c'est simple , l'encodage reversible le plus simple c'est XOR !
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Traduire une fonction VB en PB

Message par falsam »

@Dobro Micoute souhaite obtenir ceci :
1 = 1, 2 = 2, 3 = 3, 4 = 4, 5 = 5, 6 = 6, 7 = 7, 8 = 8, 9 = 9, 10 = 11, 11 = 12, 12 = 13, 13 = 14, 14 = 15, 15 = 16, 16 = 17, 17 = 18, 18 = 19, 19 = 21, 20 = 22, 21 = 23, 22 = 24, 23 = 25, 24 = 26, 25 = 27, 26 = 28, 27 = 29, 28 = 31, etc...
Le code que tu donnes sur ce lien ne fonctionne pas. Ex : Debug nombre_encode(nombre,99) donne 10 alors que ça devrait Etre 109
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Répondre