Warning: Undefined array key "DOKU_PREFS" in /home/clients/a4e6fc1ce1761b72982b805de0f418c4/web/python/mesrecettespython/inc/common.php on line 2082
code_gray [Les recettes Python de Tyrtamos]

Outils pour utilisateurs

Outils du site


code_gray

Warning: Undefined array key -1 in /home/clients/a4e6fc1ce1761b72982b805de0f418c4/web/python/mesrecettespython/inc/html.php on line 1458

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
code_gray [2008/07/09 07:15]
tyrtamos
code_gray [2012/03/17 08:19]
tyrtamos
Ligne 42: Ligne 42:
 ===== Générateur de code de Gray ===== ===== Générateur de code de Gray =====
  
-Code proposé:+Code proposé (script inspiré de la page de wikipedia):
  
 <code python> <code python>
Ligne 48: Ligne 48:
 # -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
 from __future__ import division from __future__ import division
 +# Python v2.7
  
-def dec2gray(n,nb=8): +def dec2gray(num): 
-    ch="" +    """retourne le code gray correspondant au nombre entier 'num' """ 
-    for k in xrange(nb,0,-1): +    return (num>>1)^num 
-        ch+="01"[((n+(2**(k-1)))>>k)%2] + 
-    return ch+# dec2bin améliore l'affichage binaire des nombres en ajoutant si nécessaire des zéros à gauche 
 +dec2bin lambda x, n=8: bin(x)[2:].zfill(n)
  
 # exemple d'utilisation # exemple d'utilisation
-print dec2gray(14)  # affiche: "00001001" +print dec2bin(dec2gray(14))   
-print dec2gray(14,16)  # affiche: "0000000000001001"+# affiche: "00001001" 
 + 
 +print dec2bin(dec2gray(14),16)   
 +# affiche: "0000000000001001"
 </code> </code>
  
-En entrée de cette fonction, est le nombre décimal que l'on veut convertir en code de Gray, et nb est le nombre de bits (8 par défaut).+En entrée de cette fonction dec2graynum est le nombre décimal que l'on veut convertir en code de Gray. La fonction dec2gray est valable pour des mots de plus de 8 bits.
  
 ===== Conversion inverse ===== ===== Conversion inverse =====
  
-Pour obtenir le nombre décimal correspondant à un code de Gray donné:+Pour obtenir le nombre décimal correspondant à un code de Gray donné (script inspiré de la page de wikipedia):
  
 <code python> <code python>
-def gray2dec(ch): +def gray2dec(num): 
-    i=ch.find("1") +    """retourne le nombre entier correspondant au code Gray num""" 
-    if i<0: +    shift = 1 
-        return 0 +    while True
-    lg=len(ch) +        idiv num >> shift 
-    k=lg-i +        num ^idiv 
-    n=(2**k)-(2**(k-1)) +        if idiv <= 1 or shift == 32:  
-    while k>1+            return num 
-        k-=1 +        shift <<= 1
-        b=int(ch[lg-k]) +
-        y=+
-        while (2*y+b)*(2**k)-(2**(k-1))+(2**k)-1 < n+
-            y+=1 +
-        np=(2*y+b)*(2**k)-(2**(k-1)) +
-        if np>n: +
-            n=np +
-    return n+
  
 # exemple d'utilisation # exemple d'utilisation
-print gray2dec("00001001" # affiche: 14+print gray2dec(int("00001001",2))  # affiche: 14
 </code> </code>
  
-En entrée de cette fonction, le seul paramètre est la chaîne de caractère représentant le code de Gray.+En entrée de cette fonction, num est le nombre entier décimal représentant le code de Gray. Si celui-ci est connu sous forme de chaine binaire (ex: "00001001"), il faut faire une conversion comme: int("00001001",2). 
 + 
 +\\ 
 +Amusez-vous bien!
  
-Vous pouvez tester ces fonctions sur ma Calculext en ligne: [[http://calculext.jpvweb.com]] 
  
 <html> <html>
code_gray.txt · Dernière modification: 2012/03/17 08:19 de tyrtamos