[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
Micoute
Messages : 2584
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

[résolu] Traduire une fonction VB en PB

Message 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
Dernière modification par Micoute le mer. 19/juin/2013 14:39, 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 »

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 :)
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Traduire une fonction VB en PB

Message 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.
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
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 à 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.
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 :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 :)
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 »

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
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
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Traduire une fonction VB en PB

Message par Ar-S »

a pas compris bibi :?
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Traduire une fonction VB en PB

Message par Backup »

Gné ? Image
Avatar de l’utilisateur
SPH
Messages : 4947
Inscription : mer. 09/nov./2005 9:53

Re: Traduire une fonction VB en PB

Message par SPH »

Je n'ai rien capté non plus... 8O

!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 »

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.
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 »

Ha, je vois. Laisse moi reflechir...

!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
SPH
Messages : 4947
Inscription : mer. 09/nov./2005 9:53

Re: Traduire une fonction VB en PB

Message par SPH »

Code ultra optimisé :

Code : Tout sélectionner

nombre=31

Debug nombre-(nombre/10)

!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
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 »

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 ?
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%
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Traduire une fonction VB en PB

Message 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.
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Traduire une fonction VB en PB

Message 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
Dernière modification par Backup le mer. 29/mai/2013 22:05, modifié 3 fois.
Répondre