[Résolu] Codage et décodage

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] Codage et décodage

Message par Micoute »

Bonjour à tous,

toujours sur le même principe, je souhaiterais faire une procédure faisant l'inverse de celle-ci, c'est-à-dire de remettre en décimal le code sortant de cette même procédure que voici :

Code : Tout sélectionner

Procedure  Coder(Nombre.q)

   ; À toutes les dizaines on est décalé d'une unité, ça donne une Retenue
   Retenue = (Nombre - 1) / 9

   ; On ajoute la Retenue au résultat
   Resultat = Nombre + Retenue

   ; Pour l'instant on n'a modifié que les unités ajoutés toutes les dizaines, il faut aussi ajouter
   ; tous les blocs de 0 qui apparaissent 10 fois toutes les centaines, 100 fois tous les milliers, etc.

   ; Sans oublier qu'à chaque fois qu'on ajoute une Retenue celle-ci décale le résultat, il faut donc
   ; calculer aussi la Retenue de la Retenue !

   ; 1 = unités, 10 = dizaines, 100 = centaines...
   Rang = 1

   ; On s'arrête quand il n'y a plus de Retenue à ajouter
   While Retenue > 0

       ; Nouvelle Retenue à ajouter
       Retenue = (10 * Rang) * ((Retenue - 1) / (9 * Rang))

       ; Ajout de la Retenue
       Resultat + Retenue

       ; Passage au Rang suivant
       Rang * 10

   Wend

   ProcedureReturn Resultat

EndProcedure
Je vous remercie tous par avance de votre participation
Dernière modification par Micoute le mer. 19/juin/2013 14:38, 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 !
Avatar de l’utilisateur
SPH
Messages : 4947
Inscription : mer. 09/nov./2005 9:53

Re: Codage et décodage

Message par SPH »

Tjr difficile de decoder une procedure comme la tienne. Si tu pouvais donner plusieurs exemples, on pourrais t'aider...

!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
G-Rom
Messages : 3641
Inscription : dim. 10/janv./2010 5:29

Re: Codage et décodage

Message par G-Rom »

Le plus simple , tu sauvegardes la relation dans une map :

Code : Tout sélectionner

Global NewMap Codage.d()


Procedure  Coder(Nombre.d)

   ; À toutes les dizaines on est décalé d'une unité, ça donne une Retenue
   Retenue = (Nombre - 1) / 9

   ; On ajoute la Retenue au résultat
   Resultat = Nombre + Retenue

   ; Pour l'instant on n'a modifié que les unités ajoutés toutes les dizaines, il faut aussi ajouter
   ; tous les blocs de 0 qui apparaissent 10 fois toutes les centaines, 100 fois tous les milliers, etc.

   ; Sans oublier qu'à chaque fois qu'on ajoute une Retenue celle-ci décale le résultat, il faut donc
   ; calculer aussi la Retenue de la Retenue !

   ; 1 = unités, 10 = dizaines, 100 = centaines...
   Rang = 1

   ; On s'arrête quand il n'y a plus de Retenue à ajouter
   While Retenue > 0

       ; Nouvelle Retenue à ajouter
       Retenue = (10 * Rang) * ((Retenue - 1) / (9 * Rang))

       ; Ajout de la Retenue
       Resultat + Retenue

       ; Passage au Rang suivant
       Rang * 10

   Wend
   
   Codage(Str(Resultat)) = nombre
   ProcedureReturn Resultat

 EndProcedure
 
Procedure.d Decoder(nombre)
  If FindMapElement(Codage(),Str(nombre))
   ProcedureReturn Codage(StrD(nombre)) 
  EndIf 
EndProcedure 
 
 

 
Debug StrD(Decoder( Coder(55.2) ) ,1)
Avatar de l’utilisateur
SPH
Messages : 4947
Inscription : mer. 09/nov./2005 9:53

Re: Codage et décodage

Message par SPH »

Micoute : tiens nous au courant de tes travaux, ca m'interesse :idea:

!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: Codage et décodage

Message par Micoute »

Rebonjour à tous,

je vous avais tous laissé un peu tomber, car j'ai été passer quelque jours à Carnac où je n'ai eu que du mauvais temps et mal au dos tous les jours, je crois avoir compris pourquoi il pousse des pierres par chez eux : c'est parce qu'ils sont arrosés copieusement à longueur de temps.

Revenons à PureBasic ma raison de vivre, je remercie G-Rom pour son idée et j'ai conçu ceci:

Code : Tout sélectionner

Global NewMap Codage.q()


Procedure  Coder(Nombre.q)

   ; À toutes les dizaines on est décalé d'une unité, ça donne une Retenue
   Retenue = (Nombre - 1) / 9

   ; On ajoute la Retenue au résultat
   Resultat = Nombre + Retenue

   ; Pour l'instant on n'a modifié que les unités ajoutées toutes les dizaines, il faut aussi ajouter
   ; tous les blocs de 0 qui apparaissent 10 fois toutes les centaines, 100 fois tous les milliers, etc.

   ; Sans oublier qu'à chaque fois qu'on ajoute une Retenue celle-ci décale le résultat, il faut donc
   ; calculer aussi la Retenue de la Retenue !

   ; 1 = unités, 10 = dizaines, 100 = centaines...
   Rang = 1

   ; On s'arrête quand il n'y a plus de Retenue à ajouter
   While Retenue > 0

       ; Nouvelle Retenue à ajouter
       Retenue = (10 * Rang) * ((Retenue - 1) / (9 * Rang))

       ; Ajout de la Retenue
       Resultat + Retenue

       ; Passage au Rang suivant
       Rang * 10

   Wend
   
   Codage(Str(Resultat)) = nombre
   ProcedureReturn Resultat

EndProcedure

Procedure.q Decoder(nombre)
  If FindMapElement(Codage(),Str(nombre))
   ProcedureReturn Codage(Str(nombre)) 
  EndIf 
EndProcedure 


;Test
;For i = 0 To 40
;   Debug Str(Coder(i)) + " = " + Str(Decoder( Coder(i) ))
;Next
;CallDebugger
Debug Str(Coder(50200)) + " = " + Str(Decoder(75767))
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 !
Répondre