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é ? Image

Re: Traduire une fonction VB en PB

Publié : mer. 29/mai/2013 19:45
par SPH
Je n'ai rien capté non plus... 8O

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
Code ultra optimisé :

Code : Tout sélectionner

nombre=31

Debug nombre-(nombre/10)

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

Code : Tout sélectionner

For i = 1 To 50
Debug Str(i) +" = " + Str(i-(i/10))
Next
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 ?? 8O

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