[résolu] Création code Binaire amélioré (BinEx, BinValEx)

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Lord Nelson
Messages : 355
Inscription : dim. 01/déc./2013 15:29

Re: [résolu] Création code Binaire amélioré (BinEx, BinValEx

Message par Lord Nelson »

Vous inquiétez pas, je suis pas fout, je sais se que je fais, merci de vos avis :)
Modification par Demivec à ma demande, très grand merci à lui :D

Code : Tout sélectionner

; renvoie un nombre maintenant et pas une chaîne, similaire Val()
Procedure BinValEx(BinEx$, Depart = 0, Pas = 1, DepartBinEx$ = "0")
  If Len(BinEx$)
    If DepartBinEx$ = "0"
      ProcedureReturn ((Val("%1" + BinEx$) - 2) * Pas) + Depart
    Else
      ProcedureReturn ((Val("%1" + BinEx$) - 2 - BinValEx(DepartBinEx$)) * Pas) + Depart
    EndIf
  Else
    ProcedureReturn 0
  EndIf
EndProcedure

Procedure.s BinEx(Nombre, Depart = 0, Pas = 1, DepartBinEx$ = "0")
  If Pas < 1
    ProcedureReturn ""
  EndIf
 
  Nombre - Depart
  If Nombre < 0
    ProcedureReturn ""
  Else
    Nombre / Pas
    If DepartBinEx$ <> "0"
      Nombre + BinValEx(DepartBinEx$)
    EndIf
   
    If Nombre < 2
      ProcedureReturn Str(Nombre)
    Else
      ProcedureReturn Mid(Bin(Nombre + 2), 2)
    EndIf
  EndIf
EndProcedure

Define Nombre, BinEx$
Nombre = 5
BinEx$ = BinEx(Nombre, 5, 3, "0110")
Debug "Codé: " + BinEx$ + " = " + Str(Nombre) + ", Décodé: " + BinValEx(BinEx$, 5, 3, "0110")

For Nombre = 0 To 1000
  BinEx$ = BinEx(Nombre)
  Debug "Codé: " + BinEx$ + " = " + Str(Nombre) + ", Décodé: " + BinValEx(BinEx$)
Next
Fonctionnement:

Nombre = Nombre à coder (Attention, ne dois jamais être inférieur à "Depart" et supérieur à 0), exemple 1000
Depart = Ont commence à partir d'un nombre (Ne dois jamais être inférieur à 0), par exemple 100
Pas = Ont va de tant à tant (Step), (Ne dois jamais être inférieur à 0), par exemple 2 (De 2 en 2)
DepartBinEx$ = Départ du codage, normalement ont commence à "0" mais maintenant ont peut mettre se qu'ont veux mais attention au dépassement de capacité !, par exemple "1011010010110"

Exemple:

Code : Tout sélectionner

; renvoie un nombre maintenant et pas une chaîne, similaire Val()
Procedure BinValEx(BinEx$, Depart = 0, Pas = 1, DepartBinEx$ = "0")
  If Len(BinEx$)
    If DepartBinEx$ = "0"
      ProcedureReturn ((Val("%1" + BinEx$) - 2) * Pas) + Depart
    Else
      ProcedureReturn ((Val("%1" + BinEx$) - 2 - BinValEx(DepartBinEx$)) * Pas) + Depart
    EndIf
  Else
    ProcedureReturn 0
  EndIf
EndProcedure

Procedure.s BinEx(Nombre, Depart = 0, Pas = 1, DepartBinEx$ = "0")
  If Pas < 1
    ProcedureReturn ""
  EndIf
 
  Nombre - Depart
  If Nombre < 0
    ProcedureReturn ""
  Else
    Nombre / Pas
    If DepartBinEx$ <> "0"
      Nombre + BinValEx(DepartBinEx$)
    EndIf
   
    If Nombre < 2
      ProcedureReturn Str(Nombre)
    Else
      ProcedureReturn Mid(Bin(Nombre + 2), 2)
    EndIf
  EndIf
EndProcedure

Depart = 50000
Pas = 2
DepartBinExe$ = "000000"

For Nombre = Depart To 60000 Step 2
BinEx$ = BinEx(Nombre, Depart, Pas, DepartBinExe$)
BinValEx$ = Str(BinValEx(BinEx$, Depart, Pas, DepartBinExe$))
Debug "Codé: " + BinEx$ + " = " + Str(Nombre) + ", Décodé: " + BinValEx$
Next
Répondre