Page 1 sur 5

[Résolu] Base 9 sans nombre 0

Publié : lun. 17/juin/2013 15:05
par Micoute
Bonjour à tous,

pouvez-vous m'aider à optimiser cette procédure, car on voit bien qu'il y a une logique, mais je n'arrive pas bien à la discerner.

le principe de la procédure c'est de décoder des nombre en fausse base 9 qui n'utilise pas de zéro, en vraie base décimale.

Code : Tout sélectionner

Procedure B9ToB10(Nombre.q)
   Retenue = 0
   i = 1
   While i < (Nombre / 10) * 9
      
   If Mod(i, 9) = 0 ; Nombre divisible par 9
      Retenue + 1
      NombreSortie + 1
   Else
      If Retenue <= 9
         NombreSortie = i + Retenue
      ElseIf Retenue >= 9 And Retenue < 19
         NombreSortie = i  + Retenue + 10
      ElseIf Retenue >= 19 And Retenue < 28
         NombreSortie = i  + Retenue  + 20
      ElseIf Retenue >= 28 And Retenue < 37
         NombreSortie = i + Retenue + 30
      ElseIf Retenue >= 37 And Retenue < 46
         NombreSortie = i + Retenue + 40
      ElseIf Retenue >= 46 And Retenue < 55
         NombreSortie = i + Retenue + 50
      ElseIf Retenue >= 55 And Retenue < 64
         NombreSortie = i + Retenue + 60
      ElseIf Retenue >= 64 And Retenue < 73
         NombreSortie = i + Retenue + 70
      ElseIf Retenue >= 73 And Retenue < 82
         NombreSortie = i + Retenue + 80
      ElseIf Retenue >= 82 And Retenue < 91
         NombreSortie = i + Retenue + 90
      ElseIf Retenue >= 91 And Retenue < 100
         NombreSortie = i + Retenue + 200
      ElseIf Retenue >= 100 And Retenue < 109
         NombreSortie = i + Retenue + 210
      ElseIf  Retenue >= 109 And Retenue < 118
         NombreSortie = i + Retenue + 220
      ElseIf Retenue >= 118
         NombreSortie = i + Retenue + 230
      EndIf   
   EndIf
      Debug "(" + Str(NombreSortie) + ") = " + Str(i) + " Retenue = " + Retenue
      i + 1
   Wend     
   ProcedureReturn i - 1
EndProcedure

Debug B9ToB10(1199)
Je vous ai déjà parler de ce projet et ça me ferait extrêmement plaisir de vous associer tous à ce défi qui n'est pas coton et je ne souhaite pas qu'elle calcule seulement jusqu'à 1199 !

Je vous en remercie tous par avance.

Re: Base 9 sans nombre 0

Publié : lun. 17/juin/2013 16:30
par SPH
ENJOY :

Code : Tout sélectionner

For i=1 To 100
  Debug ("("+Str(i)+") = "+Str(i-i/10)+" Retenue = "+Str((i+1)/10))
Next

Re: Base 9 sans nombre 0

Publié : lun. 17/juin/2013 17:11
par Backup
on n'a pas deja fait un topic la dessus ? 8O

Re: Base 9 sans nombre 0

Publié : lun. 17/juin/2013 17:15
par SPH
Dobro a écrit :on n'a pas deja fait un topic la dessus ? 8O
Non, l'autre etait bien plus facile, je m'en rappelle :idea:

Re: Base 9 sans nombre 0

Publié : lun. 17/juin/2013 18:01
par Micoute
SPH a écrit :ENJOY :

Code : Tout sélectionner

For i=1 To 100
  Debug ("("+Str(i)+") = "+Str(i-i/10)+" Retenue = "+Str((i+1)/10))
Next
Hélas non, ce n'est pas ça, car il ne faut pas de zéro !

Merci beaucoup quand même.

Re: Base 9 sans nombre 0

Publié : lun. 17/juin/2013 18:05
par Micoute
Dobro a écrit :on n'a pas déjà fait un topic la dessus ? 8O
Et oui, c'est vrai, mais j'essaye une autre méthode et j'avoue que c'est un challenge très difficile, car là, il faut entrer un nombre qui à été codé en fausse base 9, disons une base 9 sans 0 et retrouver la valeur qui à été codée pour la ressortir en décimal.

Merci à vous tous !

Re: Base 9 sans nombre 0

Publié : lun. 17/juin/2013 18:27
par SPH
Condamné a echouer...

Tu devrais t'orienter vers un cryptage en Xor, comme te l'avais suggeré Dobro 8)

Re: Base 9 sans nombre 0

Publié : lun. 17/juin/2013 18:48
par Micoute
C'est vrai que ce serait vraiment plus simple, mais c'est pas ça qu'il faut !

Re: Base 9 sans nombre 0

Publié : lun. 17/juin/2013 19:05
par SPH
En tout cas, je continuerais a t'aider car je veux voir le resultat final :idea:

Re: Base 9 sans nombre 0

Publié : lun. 17/juin/2013 19:48
par SPH
Micoute a écrit :
SPH a écrit :ENJOY :

Code : Tout sélectionner

For i=1 To 100
  Debug ("("+Str(i)+") = "+Str(i-i/10)+" Retenue = "+Str((i+1)/10))
Next
Hélas non, ce n'est pas ça, car il ne faut pas de zéro !

Merci beaucoup quand même.
Ha oui tiens, j'ai faux !
Alors la, je ne saurais te dire... :?

Re: Base 9 sans nombre 0

Publié : lun. 17/juin/2013 19:52
par Micoute
SPH a écrit :
Micoute a écrit :
SPH a écrit :ENJOY :

Code : Tout sélectionner

For i=1 To 100
  Debug ("("+Str(i)+") = "+Str(i-i/10)+" Retenue = "+Str((i+1)/10))
Next
Hélas non, ce n'est pas ça, car il ne faut pas de zéro !

Merci beaucoup quand même.
Ha oui tiens, j'ai faux !
Alors la, je ne saurais te dire... :?
Pourquoi crois-tu que je m'échine à faire des tas de IF ?
C'est un algorithme que je cherche pour qu'il me fasse les test automatiquement !

Re: Base 9 sans nombre 0

Publié : lun. 17/juin/2013 20:31
par SPH
Il y a une chose qui me tracasse : est ce que tu vas transformer un fichier octet par octet ? Si oui, tu n'as que 256 possibilités. Alors, tu peux faire un tableau de 256 transformations.

Re: Base 9 sans nombre 0

Publié : lun. 17/juin/2013 22:18
par GallyHC
Je n'ai pas vraiment tout compris mais j'essais :)

Code : Tout sélectionner

Define i.i

For i=0 To 100
  If CountString(Str(i), "0") = 0
    Debug i  
  EndIf
Next i


Cordialement,
GallyHC

Re: Base 9 sans nombre 0

Publié : lun. 17/juin/2013 22:23
par SPH
GallyHC a écrit :Je n'ai pas vraiment tout compris mais j'essais :)

Code : Tout sélectionner

Define i.i

For i=0 To 100
  If CountString(Str(i), "0") = 0
    Debug i  
  EndIf
Next i


Cordialement,
GallyHC
Tres interessant. Court et précis !

Re: Base 9 sans nombre 0

Publié : mar. 18/juin/2013 1:06
par GallyHC
Toujours sans vraiment comprendre (le code avec le tout) :

Code : Tout sélectionner

Define.i i, j

For i=0 To 100
  If CountString(Str(i), "0") = 0
    j + 1    
    Debug ("(" + Str(j) + ") = " + Str(i) + " Retenue = " + Str((i + 1) / 10))
  EndIf
Next i
@SPH : J'aime bien les codes courts, mais fonctionnel :)

Cordialement,
GallyHC