Page 1 sur 4
[résolu] Traduire une fonction VB en PB
Publié : mer. 29/mai/2013 8:45
par Micoute
Bonjour à tous,
j'aimerais traduire cette fonction VB en procédure PureBasic, alors si quelqu'un à des notions dans ce domaine, il aura toute ma considération pour l'aide qu'il aura bien voulu m'offrir.
Je vous remercie tous par avance.
Function NombreSansZéro(n As Int64) As Long
Dim m = CInt(Math.Floor(Math.Log(8L * n + 1L, 9)))
Dim b = Function(_j As Int64) (8L * n + 1L - CLng(Math.Pow(9, m))) \ (8L * CLng(Math.Pow(9, _j)))
Return Enumerable.Range(0, m).Sum(Function(j) (1L + b(j) Mod 9L) * CLng(Math.Pow(10, j)))
End Function
Re: Traduire une fonction VB en PB
Publié : mer. 29/mai/2013 9:20
par Backup
le plus simple serai de savoir ce que fait cette procedure ...
quel est le résultat attendu ..
il serai plus simple de la refaire a zero , plutot que de convertir

Re: Traduire une fonction VB en PB
Publié : mer. 29/mai/2013 12:57
par Ar-S
Micoute a écrit :Bonjour à tous,
Function NombreSansZéro(n As Int64) As Long
Dim m = CInt(Math.Floor(Math.Log(8L * n + 1L, 9)))
Dim b = Function(_j As Int64) (8L * n + 1L - CLng(Math.Pow(9, m))) \ (8L * CLng(Math.Pow(9, _j)))
Return Enumerable.Range(0, m).Sum(Function(j) (1L + b(j) Mod 9L) * CLng(Math.Pow(10, j)))
End Function
je ne m'y connait pas en VB mais je mense que math. appelle des commandes matheuses pour vb, ces commandes sont natives comme POW (dans ce cas tout va bien) ou pas (dans ce cas faut les faire : floor ?)
après un truc comme ça
Function NombreSansZéro(n As Int64) As Long
je le verrai bien en
Procedure NombreSansZero.l(n.l)
mais pas sûr du tout...
Mais Dobro à raison, savoir ce que fait ce programme serait pratique.
Re: Traduire une fonction VB en PB
Publié : mer. 29/mai/2013 14:32
par Micoute
Merci à tous pour votre aide si précieuse,
la fonction Floor() permet d'afficher le nombre entier le plus proche du nombre donné et la fonction CInt() est équivalente à la fonction PB Str(Nombre.i), si ça permet de vous avancer.
Pour préciser mon projet, je souhaite convertir des nombres entiers en nombres ne comportant aucun 0 (zéro) et qui soit réversible.
Merci encore à tous.
Re: Traduire une fonction VB en PB
Publié : mer. 29/mai/2013 15:00
par Backup
Micoute a écrit :Pour préciser mon projet, je souhaite convertir des nombres entiers en nombres ne comportant aucun 0 (zéro) et qui soit réversible..
avec une annonce pareil , comment veux tu qu'on t'aide ...
j'ai ete voir deja , ce que voulais dire nombre "reversible"...
j'ai decouvert alors , que 10 et 01 ou bien 1881 et 1881 ; 34 et 43 etc .. étaient des exemples de "réversibilités" ...
et que meme "35383113" qui a l'envers en retournant la calculette donnait "ELLEBESE" etait considéré comme un nombre "reversible"
et que meme certains nombre devais etre multiplié par un chiffre pour connaitre leur "reversibilité" ....
alors deja en dehors du fait que je me demande quel est l’intérêt de chercher ces nombres...
il faudrait donc préciser quel type de réversibilité , tu recherches ....
quand au fait de ne pas avoir de zero , c'est assez simple avec une fonction comme ReplaceString()
mais j'ai surement du louper un épisode

Re: Traduire une fonction VB en PB
Publié : mer. 29/mai/2013 16:21
par Micoute
j'ai decouvert alors , que 10 et 01 ou bien 1881 et 1881 ; 34 et 43 etc .. étaient des exemples de "réversibilités"
Merci Dobro, mais ce n'est pas de ça que je veux parler.
Quand je parle de réversible, je ne parle pas de palindrome qui peuvent se lire dans les deux sens.
pour donner un exemple : Hex(10) = "A" et $A = 10, donc le principe c'est de faire des couples de nombre et quand on en connait un, on trouve forcément l'autre puisqu'il sont toujours équivalents chacun dans leurs base, mais la complexité c'est que je souhaite que le zéro n'existe pas et j'avoue que c'est très complexe.
J'ai trouvé ce système, mais il n'est pas réversible :
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 40
;Debug DecimalToBase9(i)
;Next
Debug DecimalToBase9(12345)
En tout cas merci à tous pour tous vos efforts
Re: Traduire une fonction VB en PB
Publié : mer. 29/mai/2013 16:53
par Ar-S
a pas compris bibi

Re: Traduire une fonction VB en PB
Publié : mer. 29/mai/2013 17:45
par Backup
Gné ?

Re: Traduire une fonction VB en PB
Publié : mer. 29/mai/2013 19:45
par SPH
Je n'ai rien capté non plus...

Re: Traduire une fonction VB en PB
Publié : mer. 29/mai/2013 19:55
par Micoute
C'est pourtant simple,
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...
mais je ne sais pas le faire dans l'autre sens.
Re: Traduire une fonction VB en PB
Publié : mer. 29/mai/2013 19:59
par SPH
Ha, je vois. Laisse moi reflechir...
Re: Traduire une fonction VB en PB
Publié : mer. 29/mai/2013 20:08
par SPH
Re: Traduire une fonction VB en PB
Publié : mer. 29/mai/2013 20:56
par falsam
Version empirique
Code : Tout sélectionner
Procedure NombreSansZero(Value)
Protected X,N
For X=1 To Value
If Right(Str(X+N),1)="0"
N+1
EndIf
Next
ProcedureReturn(Value+N)
EndProcedure
Debug NombreSansZero(19)
La version réversible d'SPH a l'air de fonctionner
Au fait quel est le but de cette fonction ?
Re: Traduire une fonction VB en PB
Publié : mer. 29/mai/2013 21:31
par Ar-S
La version réversible d'SPH a l'air de fonctionner

Vi elle a l'air de coller
Au fait quel est le but de cette fonction ?
Je suis preneur aussi.
Re: Traduire une fonction VB en PB
Publié : mer. 29/mai/2013 21:50
par Backup
je sais pas si j'ai tout compris
mais voici un code qui
lorsque le Type est egale a 1 on encode , si le type est egale a 0 on decode (ça permet le "reversing")
ici la valeur 10 encodé donne 11
la valeur 11 décodé, ne va pas donner 10 puisqu'il y a un zero , mais 9 ....
pour les autres cas par exemple :
12 va donner 13
lors que 13 va donner 12 ....
c'est ça qu'tu voulais ??
Code : Tout sélectionner
Declare nombre_encode(nombre,type)
nombre=10
debug nombre_encode(nombre,1) ; encode donne "11"
nombre=11
debug nombre_encode(nombre,0) ; decode donne 9
End
; ***************************************************************
Procedure nombre_encode(nombre,type)
; Dobro
If nombre<10 And nombre>0
ProcedureReturn nombre
Else
select type
case 1 ; encode
nombre=nombre+1
if right(str(nombre),1)="0"
nombre=nombre+1
Endif
case 0 ;decode
nombre=nombre-1
if right(str(nombre),1)="0"
nombre=nombre-1
Endif
Endselect
ProcedureReturn nombre
Endif
Endprocedure
; EPB