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
» Gestion d'un système client-serveur.
Calculatrice code de Gray Emptypar Klaus Ven 17 Mai 2024 - 14:02

» item_index(résolu)
Calculatrice code de Gray Emptypar jjn4 Mar 14 Mai 2024 - 19:38

» Bataille terrestre
Calculatrice code de Gray Emptypar jjn4 Lun 13 Mai 2024 - 15:01

» SineCube
Calculatrice code de Gray Emptypar Marc Sam 11 Mai 2024 - 12:38

» Editeur EliP 6 : Le Tiny éditeur avec 25 onglets de travail
Calculatrice code de Gray Emptypar Marc Sam 11 Mai 2024 - 12:22

» Philharmusique
Calculatrice code de Gray Emptypar jjn4 Ven 10 Mai 2024 - 13:58

» PANORAMIC V 1
Calculatrice code de Gray Emptypar papydall Jeu 9 Mai 2024 - 3:22

» select intégrés [résolu]
Calculatrice code de Gray Emptypar jjn4 Mer 8 Mai 2024 - 17:00

» number_mouse_up
Calculatrice code de Gray Emptypar jjn4 Mer 8 Mai 2024 - 11:59

» Aide de PANORAMIC
Calculatrice code de Gray Emptypar jjn4 Mer 8 Mai 2024 - 11:16

» trop de fichiers en cours
Calculatrice code de Gray Emptypar lepetitmarocain Mer 8 Mai 2024 - 10:43

» Je teste PANORAMIC V 1 beta 1
Calculatrice code de Gray Emptypar papydall Mer 8 Mai 2024 - 4:17

» bouton dans autre form que 0(résolu)
Calculatrice code de Gray Emptypar leclode Lun 6 Mai 2024 - 13:59

» KGF_dll - nouvelles versions
Calculatrice code de Gray Emptypar Klaus Lun 6 Mai 2024 - 11:41

» @Jack
Calculatrice code de Gray Emptypar Jack Mar 30 Avr 2024 - 20:40

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Mai 2024
LunMarMerJeuVenSamDim
  12345
6789101112
13141516171819
20212223242526
2728293031  
CalendrierCalendrier
-21%
Le deal à ne pas rater :
LEGO® Icons 10329 Les Plantes Miniatures, Collection Botanique
39.59 € 49.99 €
Voir le deal

 

 Calculatrice code de Gray

Aller en bas 
AuteurMessage
Marc

Marc


Nombre de messages : 2397
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
-
» Calculatrice spéciale
» Calculatrice
» Calculatrice 8 bits, complément à 2
» AND OR XOR : calculatrice 8 bits
» Calculatrice romaine

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: