FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC

Développement d'applications avec le langage Panoramic
 
AccueilAccueil  RechercherRechercher  Dernières imagesDernières images  S'enregistrerS'enregistrer  MembresMembres  Connexion  
Derniers sujets
» Logiciel de planétarium.
Calculatrice code de Gray Emptypar Pedro Sam 23 Nov 2024 - 15:50

» Un autre pense-bête...
Calculatrice code de Gray Emptypar Froggy One Jeu 21 Nov 2024 - 15:54

» Récupération du contenu d'une page html.
Calculatrice code de Gray Emptypar Pedro Sam 16 Nov 2024 - 14:04

» Décompilation
Calculatrice code de Gray Emptypar JL35 Mar 12 Nov 2024 - 19:57

» Un album photos comme du temps des grands-mères
Calculatrice code de Gray Emptypar jjn4 Mar 12 Nov 2024 - 17:23

» traitement d'une feuille excel
Calculatrice code de Gray Emptypar jjn4 Jeu 7 Nov 2024 - 3:52

» Aide-mémoire mensuel
Calculatrice code de Gray Emptypar jjn4 Lun 4 Nov 2024 - 18:56

» Des incomprèhension avec Timer
Calculatrice code de Gray Emptypar Klaus Mer 30 Oct 2024 - 18:26

» KGF_dll - nouvelles versions
Calculatrice code de Gray Emptypar Klaus Mar 29 Oct 2024 - 17:58

» instructions panoramic
Calculatrice code de Gray Emptypar maelilou Lun 28 Oct 2024 - 19:51

» Figures fractales
Calculatrice code de Gray Emptypar Marc Ven 25 Oct 2024 - 12:18

» Panoramic et Scanette
Calculatrice code de Gray Emptypar Yannick Mer 25 Sep 2024 - 22:16

» Editeur d étiquette avec QR évolutif
Calculatrice code de Gray Emptypar JL35 Lun 23 Sep 2024 - 22:40

» BUG QR Code DelphiZXingQRCode
Calculatrice code de Gray Emptypar Yannick Dim 22 Sep 2024 - 11:40

» fichier.exe
Calculatrice code de Gray Emptypar leclode Ven 20 Sep 2024 - 19:02

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Novembre 2024
LunMarMerJeuVenSamDim
    123
45678910
11121314151617
18192021222324
252627282930 
CalendrierCalendrier
Le deal à ne pas rater :
Smartphone Xiaomi 14 – 512 Go- 6,36″ 5G Double SIM à 599€
599 €
Voir le deal

 

 Calculatrice code de Gray

Aller en bas 
AuteurMessage
Marc

Marc


Nombre de messages : 2466
Age : 63
Localisation : TOURS (37)
Date d'inscription : 17/03/2014

Calculatrice code de Gray Empty
MessageSujet: Calculatrice code de Gray   Calculatrice code de Gray EmptyMar 15 Mar 2022 - 20:06

Bonjour à tous !

Utilisé en électronique, le code de Gray est un code binaire que l’on retrouve dans des capteurs de position, des contacteurs, des roues codeuses…
Il est appelé également code binaire réfléchi.

Sa particularité est qu’il n’y a qu’un seul et unique bit qui change quand un nombre est incrémenté ou décrémenté d’une unité.

Cette calculatrice est prévue pour une longueur binaire maximum de 8 bits.
Vous pouvez convertir un code binaire naturel, une valeur décimale ou hexadécimale en code de Gray ou inversement.

Pour changer l’état d’un bit, cliquez dessus.
Pour changer la valeur décimale ou hexadécimale, cliquez sur « + » ou « - » situé au-dessus et en dessous du chiffre à modifier.
A chaque changement, tous les champs sont recalculés.


Calculatrice code de Gray Gray_b10

Code:
' Calculatrice code Gray
' Marc - Mars 2022
' Ecrit en langage Panoramic

dim n_hex$, n_bin$, n_dec$, gray$
dim bin_n%, dec_n%,
dim bit%, valeur%, valeurDecimale%, valeurHexa%, opt%, wFenetre%

label binModif, decModifPlus, decModifMoins, hexModifPlus, hexModifMoins, optionTable, redim

interfaceUtilisateur()

end

sub interfaceUtilisateur()
    wFenetre% = 900
    width 0,width(0) - width_client(0) + wFenetre%
    height 0,height(0) - height_client(0) + 345
    left 0,(screen_x - width(0)) / 2
    top 0,(screen_y - height(0)) / 2
    color 0,240,240,240
    caption 0,"PANORAMIC"
    font_name 0,"Arial"
    font_size 0,10
    on_resize 0,redim

    container 1
    top 1,15
    left 1,20
    width 1,530
    height 1,310
    color 1,240,240,240
    command_target_is 1
    caption 1," Calculatrice code de Gray "
    
    ' créer zone de saisie binaire
    creerZoneBinaire(10,132,108)
    
    ' créer zone de saisie décimale
    creerZoneDecimale(40,357,108)

    ' créer zone de saisie hexadécimale
    creerZoneHexadecimale(70,457,108)

    ' créer zone de saisie binaire Gray
    creerZoneBinaire(20,132,200)

    ' légendes
    alpha 200
    top 200,57
    left 200,204
    font_size 200,13
    caption 200,"Binaire"
    
    alpha 201
    top 201,57
    left 201,366
    font_size 201,13
    caption 201,"Décimal"
    
    alpha 202
    top 202,57
    left 202,464
    font_size 202,13
    caption 202,"Hexa."
    
    alpha 203
    top 203,112
    left 203,23
    font_size 203,11
    caption 203,"Binaire naturel :"

    alpha 204
    top 204,204
    left 204,18
    font_size 204,11
    caption 204,"Code de GRAY :"

    logoPanoramic(435,220)

    creerTableGray()
    
    boutonOption(550,160)

    opt% = 1
end_sub


sub creerTableGray()
    dim_local a%, b%, c%, dec$, hexa$, binaire$, codeGray$, ligne$
    list 2
    parent 2,0
    top 2,22
    left 2,570
    height 2,303
    width 2,310
    font_name 2,"Courier New"
    font_size 2,12
    
    ' bandeau légende sur fond noir en haut du LIST
    panel 3
    parent 3,0
    left 3,570
    top 3,22
    height 3,30
    width 3,292
    color 3,0,0,0
    
    ' légende "DEC"
    alpha 4
    parent 4,3
    top 4,5
    left 4,13
    font_name 4,"Courier New"
    font_size 4,13
    font_bold 4
    font_color 4,255,255,255
    caption 4,"DEC"
    
    ' Légende "HEX"
    alpha 5
    parent 5,3
    top 5,5
    left 5,58
    font_name 5,"Courier New"
    font_size 5,13
    font_bold 5
    font_color 5,255,255,255
    caption 5,"HEX"
    
    ' Légende "BINAIRE"
    alpha 6
    parent 6,3
    top 6,5
    left 6,109
    font_name 6,"Courier New"
    font_size 6,13
    font_bold 6
    font_color 6,255,255,255
    caption 6,"BINAIRE"
    
    ' Légende "GRAY"
    alpha 7
    parent 7,3
    top 7,5
    left 7,223
    font_name 7,"Courier New"
    font_size 7,13
    font_bold 7
    font_color 7,255,255,255
    caption 7,"GRAY"
    
    ' remplir objet LIST
    item_add 2,""
    item_add 2,""
  
    for a% = 0 to 255

        ' colonne décimale
        dec$ = str$(a%)
        while len(dec$) < 4
            dec$ = " " + dec$
        end_while
        
        ' colonne hexadécimale
        hexa$ = hex$(a%)
        while len(hexa$) < 2
            hexa$ = "0" + hexa$
        end_while
        
        ' colonne binaire pur
        b% = a%
        binaire$ = ""
        while b% > 0
            if frac(b% / 2) = 0
                binaire$ = "0" + binaire$
            else
                binaire$ = "1" + binaire$
            end_if
            b% = int(b% / 2)
        end_while
        while len(binaire$) < 8
            binaire$ = "0" + binaire$
        end_while            

        ' colonne code Gray
        b% = a% * 2
        c% = bin_xor(a%,b%)
        c% = int (c% / 2)
        codeGray$ = ""
        while c% > 0
            if frac(c% / 2) = 0
                codeGray$ = "0" + codeGray$
            else
                codeGray$ = "1" + codeGray$
            end_if
            c% = int(c% / 2)
        end_while
        while len(codeGray$) < 8
            codeGray$ = "0" + codeGray$
        end_while            

        ligne$ = dec$ + "  " + hexa$ + "  " + binaire$ + "  " + codeGray$
        item_add 2,ligne$
    next a%
end_sub


sub boutonOption(x%,y%)
    picture 9
    parent 9,0
    width 9,20
    height 9,30
    left 9,x%
    top 9,y%
    color 9,240,240,240
    cursor_point 9
    on_click 9,optionTable
    2d_target_is 9
    2d_pen_color 0,0,0
    2d_line 4,15,9,5
    2d_line 4,15,9,25
    2d_line 8,15,13,5
    2d_line 8,15,13,25
end_sub


sub creerZoneBinaire(n%,x%,y%)
    dim_local i%, e%, b%
    b% = 7
    for i% = 0 to 7
        button n%
        left n%, x% + e%
        top n%, y%
        width n%, 25
        height n%, 25
        font_name n%,"Courier"
        font_size n%,13
        font_bold n%
        caption n%,"0"
        cursor_point n%
        on_click n%,binModif
        
        alpha n%+100
        left n%+100, x% + e% + 8
        top n%+100, y% - 17
        width n%+100, 25
        height n%+100, 25
        font_name n%+100,"Courier"
        font_size n%+100,10
        caption n%+100,b%
        
        n% = n% + 1
        b% = b% - 1
        e% = e% + 25
    next i%
end_sub

sub creerZoneDecimale(n%,x%,y%)
    dim_local i%, e%
    for i% = 0 to 2
        button n%
        left n%, x% + e%
        top n%, y%
        width n%, 25
        height n%, 25
        font_name n%,"Courier"
        font_size n%,13
        font_bold n%
        caption n%,"0"

        picture n%+100
        left n%+100, x% + e%
        top n%+100, y% - 20
        width n%+100, 25
        height n%+100, 25
        2d_target_is n%+100
        2d_fill_color 240,240,240
        color n%+100,240,240,240
        font_name n%+100,"Courier"
        font_size n%+100,12
        print_target_is n%+100
        print_locate 8,3
        print "+"
        cursor_point n%+100
        on_click n%+100,decModifPlus
        
        picture n%+105
        left n%+105, x% + e%
        top n%+105, y% + 20
        width n%+105, 25
        height n%+105, 25
        2d_target_is n%+105
        2d_fill_color 240,240,240
        color n%+105,240,240,240
        font_name n%+105,"Courier"
        font_size n%+105,12
        print_target_is n%+105
        print_locate 8,5
        print "-"
        cursor_point n%+105
        on_click n%+105,decModifMoins
        
        n% = n% + 1
        e% = e% + 25
    next i%
end_sub

sub creerZoneHexadecimale(n%,x%,y%)
    dim_local i%, e%
    for i% = 0 to 1
        button n%
        left n%, x% + e%
        top n%, y%
        width n%, 25
        height n%, 25
        font_name n%,"Courier"
        font_size n%,13
        font_bold n%
        caption n%,"0"

        picture n%+100
        left n%+100, x% + e%
        top n%+100, y% - 20
        width n%+100, 25
        height n%+100, 25
        2d_target_is n%+100
        2d_fill_color 240,240,240
        color n%+100,240,240,240
        font_name n%+100,"Courier"
        font_size n%+100,12
        print_target_is n%+100
        print_locate 8,3
        print "+"
        cursor_point n%+100
        on_click n%+100,hexModifPlus
        
        picture n%+105
        left n%+105, x% + e%
        top n%+105, y% + 20
        width n%+105, 25
        height n%+105, 25
        2d_target_is n%+105
        2d_fill_color 240,240,240
        color n%+105,240,240,240
        font_name n%+105,"Courier"
        font_size n%+105,12
        print_target_is n%+105
        print_locate 8,5
        print "-"
        cursor_point n%+105
        on_click n%+105,hexModifMoins
        
        n% = n% + 1
        e% = e% + 25
    next i%
end_sub


sub logoPanoramic(x%,y%)
    ' Logo Panoramic
    picture 220
    parent 220,1
    height 220,60
    width 220,60
    top 220,y%
    left 220,x%
    color 220,255,255,255
    2d_target_is 220
    ' dessin des cercles rouges
    2d_fill_color 255,255,255
    2d_pen_color 255,0,0
    2d_pen_width 2
    2d_circle 30,30,26
    2d_circle 30,30,20
    ' dessin du "P" en bleu
    2d_pen_width 1
    2d_pen_color 51,52,153
    2d_fill_color 51,52,153
    2d_rectangle 23,20,27,42
    2d_line 19,20,37,20
    2d_line 21,21,39,21
    2d_line 32,22,40,22
    2d_line 34,23,41,23
    2d_rectangle 35,24,41,28
    2d_line 34,28,41,28
    2d_line 32,29,40,29
    2d_line 27,30,39,30
    2d_line 27,31,37,31
    2d_line 21,40,29,40
    2d_line 19,41,32,41
end_sub


binModif:
    if caption$(number_click) = "0"
       caption number_click,"1"
    else
       caption number_click,"0"
    end_if        
    if number_click > 9 and number_click < 18 :' la valeur binaire naturelle a été modifée
        modif_bin_a()
        calculAffichageGray()
    end_if
    if number_click > 19 and number_click < 28 :' la valeur binaire Gray a été modifiée
        modif_gray()
    end_if
return


decModifPlus:
    select number_click
        case 140
            valeur% = val(caption$(40))
            valeur% = valeur% + 1
            valeurDecimale% = (valeur% * 100) + (val(caption$(41))*10) + val(caption$(42))
            if valeurDecimale% > 255
                return
            end_if
            caption 40,str$(valeur%)
            modif_dec_a()

        case 141
            valeur% = val(caption$(41))
            valeur% = valeur% + 1
            if valeur% > 9
                valeur% = 9
            end_if
            valeurDecimale% = (val(caption$(40))*100) + (valeur% * 10) + val(caption$(42))
            if valeurDecimale% > 255
                return
            end_if
            caption 41,str$(valeur%)
            modif_dec_a()

        case 142
            valeur% = val(caption$(42))
            valeur% = valeur% + 1
            if valeur% > 9
                valeur% = 9
            end_if
            valeurDecimale% = (val(caption$(40))*100) + (val(caption$(41))*10) + valeur%
            if valeurDecimale% > 255
                return
            end_if
            caption 42,str$(valeur%)
            modif_dec_a()
    end_select
    
    calculAffichageGray()
return

decModifMoins:
    select number_click
        case 145
            valeur% = val(caption$(40))
            valeur% = valeur% - 1
            if valeur% < 0
                valeur% = 0
            end_if
            caption 40,str$(valeur%)
            modif_dec_a()

        case 146
            valeur% = val(caption$(41))
            valeur% = valeur% - 1
            if valeur% < 0
                valeur% = 0
            end_if
            caption 41,str$(valeur%)
            modif_dec_a()

        case 147
            valeur% = val(caption$(42))
            valeur% = valeur% - 1
            if valeur% < 0
                valeur% = 0
            end_if
            caption 42,str$(valeur%)
            modif_dec_a()
    end_select  
    calculAffichageGray()
return


hexModifPlus:
    select number_click
        case 170
            valeurHexa% = hex(caption$(70))
            valeurHexa% = valeurHexa% + 1
            if valeurHexa% > 15
                valeurHexa% = 15
            end_if
            caption 70,hex$(valeurHexa%)
            modif_hex_a()
            
        case 171
            valeurHexa% = hex(caption$(71))
            valeurHexa% = valeurHexa% + 1
            if valeurHexa% > 15
                valeurHexa% = 15
            end_if
            caption 71,hex$(valeurHexa%)
            modif_hex_a()
    end_select
    calculAffichageGray()
return


hexModifMoins:
    select number_click
        case 175
            valeurHexa% = hex(caption$(70))
            valeurHexa% = valeurHexa% - 1
            if valeurHexa% < 0
                valeurHexa% = 0
            end_if
            caption 70,hex$(valeurHexa%)
            modif_hex_a()
            
        case 176
            valeurHexa% = hex(caption$(71))
            valeurHexa% = valeurHexa% - 1
            if valeurHexa% < 0
                valeurHexa% = 0
            end_if
            caption 71,hex$(valeurHexa%)
            modif_hex_a()
    end_select
    calculAffichageGray()
return


sub modif_bin_a()
    ' conversion valeur binaire en format décimal
    dec_n% = 0
    for bit% = 0 to 7
        if val(caption$(bit% + 10)) = 1
            dec_n% = dec_n% + POWER(2,7-Bit%)
        end_if
    next bit%

    ' conversion valeur décimale en chaine avec complément de "0" en tête pour avoir 3 chiffres
    n_dec$ = str$(dec_n%)
    while len(n_dec$) < 3
       n_dec$ = "0" + n_dec$
    end_while

    ' affiche la nouvelle valeur décimale
    caption 40,left$(n_dec$,1)
    caption 41,mid$(n_dec$,2,1)
    caption 42,right$(n_dec$,1)

    ' conversion valeur décimale en hexa avec complement de "0" en tête pour avoir 2 chiffres
    n_hex$ = hex$(dec_n%)
    while len(n_hex$) < 2
       n_hex$ = "0" + n_hex$
    end_while

    ' affiche la valeur décimale
    caption 70,left$(n_hex$,1)
    caption 71,right$(n_hex$,1)
end_sub


sub modif_dec_a()
    ' lecture de la nouvelle valeur decimale
    dec_n% = val(caption$(40)+caption$(41)+caption$(42))  

    ' conversion valeur décimale en hexa avec ajout de "0" en tête pour obtenir 2 chiffres
    n_hex$ = hex$(dec_n%)
    while len(n_hex$) < 2
       n_hex$ = "0" + n_hex$
    end_while
    ' affichage de la valeur hexadécimale
    caption 70,left$(n_hex$,1)
    caption 71,right$(n_hex$,1)

    ' conversion de la valeur decimale en binaire
    n_bin$ = ""
    while dec_n% > 0
        if frac(dec_n% / 2) = 0
            n_bin$ = "0" + n_bin$
        else
            n_bin$ = "1" + n_bin$
        end_if
        dec_n% = int(dec_n% / 2)
    end_while

    while len(n_bin$) < 8
        n_bin$ = "0" + n_bin$
    end_while
    ' affiche la valeur binaire
    for bit% = 0 to 7
        caption 10+bit%,mid$(n_bin$,bit%+1,1)
    next bit%
end_sub


sub modif_hex_a()
    ' lecture nouvelle valeur hexadécimale
    n_hex$ = caption$(70)+caption$(71)
    
    ' conversion de la valeur hexa en décimal
    dec_n% = hex(n_hex$)
    ' conversion valeur décimale en chaine avec complement de "0" en tête pour avoir 3 chiffres
    n_dec$ = str$(dec_n%)
    while len(n_dec$) < 3
       n_dec$ = "0" + n_dec$
    end_while
    ' affiche de la valeur décimale de A
    caption 40,left$(n_dec$,1)
    caption 41,mid$(n_dec$,2,1)
    caption 42,right$(n_dec$,1)

    ' conversion de la valeur decimale en binaire
    n_bin$ = ""
    while dec_n% > 0
        if frac(dec_n% / 2) = 0
            n_bin$ = "0" + n_bin$
        else
            n_bin$ = "1" + n_bin$
        end_if
        dec_n% = int(dec_n% / 2)
    end_while

    while len(n_bin$) < 8
        n_bin$ = "0" + n_bin$
    end_while
    ' affiche la nouvelle valeur binaire
    for bit% = 0 to 7
        caption 10+bit%,mid$(n_bin$,bit%+1,1)
    next bit%
end_sub


sub calculAffichageGray()
    dim_local c%
    dec_n% = val(caption$(40)+caption$(41)+caption$(42))  
    c% = dec_n% * 2
    c% = bin_xor(dec_n%,c%)
    c% = int (c% / 2)
    gray$ = ""
    while c% > 0
        if frac(c% / 2) = 0
            gray$ = "0" + gray$
        else
            gray$ = "1" + gray$
        end_if
        c% = int(c% / 2)
    end_while
    while len(gray$) < 8
        gray$ = "0" + gray$
    end_while            
    ' affiche la nouvelle valeur code Gray
    for bit% = 0 to 7
        caption 20+bit%,mid$(gray$,bit%+1,1)
    next bit%
end_sub


sub modif_gray()
    dim_local g%(7), pos%, a%, b%
    
    ' lecture des 8 bits de Gray
    bit% = 7
    for pos% = 20 to 27
        g%(bit%) = caption$(pos%)
        bit% = bit% - 1
    next pos%

    ' recherche emplacement du premier bit à 1 en partant du bit de poids fort
    for bit% = 7 to 0 step -1
        if g%(bit%) = 1
            exit_for
        end_if
    next bit%

    if bit% > 0
        ' conversion vers binaire naturel
        n_bin$ = "1"
        a% = 1
        bit% = bit% - 1
        for pos% = bit% to 0 step -1
            b% = bin_xor(a%,g%(pos%))
            n_bin$ = n_bin$ + str$(b%)
            a% = b%    
        next pos%
        ' ajout de "0" en tête pour obtenir une longueur de 8 bits
        while len(n_bin$) < 8
            n_bin$ = "0" + n_bin$
        end_while
    else
        if bit% = 0
            n_bin$ = "00000001"
        else
            n_bin$ = "00000000"
        end_if
    end_if
    
   ' affichage de la valeur binaire obtenue
    for bit% = 0 to 7
        caption 10+bit%,mid$(n_bin$,bit%+1,1)
    next bit%
  
    ' conversion du binaire en format décimal
    dec_n% = 0
    for bit% = 0 to 7
        if val(caption$(bit% + 10)) = 1
            dec_n% = dec_n% + POWER(2,7-Bit%)
        end_if
    next bit%

    ' conversion valeur décimale en chaine avec complement de "0" en tête pour avoir 3 chiffres
    n_dec$ = str$(dec_n%)
    while len(n_dec$) < 3
       n_dec$ = "0" + n_dec$
    end_while

    ' affiche la nouvelle valeur décimale
    caption 40,left$(n_dec$,1)
    caption 41,mid$(n_dec$,2,1)
    caption 42,right$(n_dec$,1)

    ' conversion valeur décimale en hexa avec complement de "0" en tête pour avoir 2 chiffres
    n_hex$ = hex$(dec_n%)
    while len(n_hex$) < 2
       n_hex$ = "0" + n_hex$
    end_while

    ' affiche la valeur décimale
    caption 70,left$(n_hex$,1)
    caption 71,right$(n_hex$,1)
end_sub


optionTable:
    if opt% = 1
        opt% = 0
        wFenetre% = 570
        width 0,width(0) - width_client(0) + wFenetre%
        color 9,240,240,240
        2d_line 11,15,6,5
        2d_line 11,15,6,25
        2d_line 15,15,10,5
        2d_line 15,15,10,25
    else
        opt% = 1
        wFenetre% = 900
        width 0,width(0) - width_client(0) + wFenetre%
        color 9,240,240,240
        2d_line 4,15,9,5
        2d_line 4,15,9,25
        2d_line 8,15,13,5
        2d_line 8,15,13,25
        
    end_if        
return


redim:
    width 0,width(0) - width_client(0) + wFenetre%
    height 0,height(0) - height_client(0) + 345
return
Revenir en haut Aller en bas
 
Calculatrice code de Gray
Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» Balises code /code du forum
» Calculatrice
» Calculatrice
» Calculatrice 8 bits, complément à 2
» AND OR XOR : calculatrice 8 bits

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC :: PANORAMIC :: Vos sources, vos utilitaires à partager-
Sauter vers: