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.
AND OR XOR : calculatrice 8 bits Emptypar Klaus Aujourd'hui à 0:24

» PANORAMIC V 1
AND OR XOR : calculatrice 8 bits Emptypar Marc Hier à 19:51

» Editeur EliP 6 : Le Tiny éditeur avec 25 onglets de travail
AND OR XOR : calculatrice 8 bits Emptypar Froggy One Hier à 11:16

» @Jack
AND OR XOR : calculatrice 8 bits Emptypar Jack Mar 30 Avr 2024 - 20:40

» trop de fichiers en cours
AND OR XOR : calculatrice 8 bits Emptypar papydall Lun 29 Avr 2024 - 23:39

» Une calculatrice en une ligne de programme
AND OR XOR : calculatrice 8 bits Emptypar jean_debord Dim 28 Avr 2024 - 8:47

» Form(résolu)
AND OR XOR : calculatrice 8 bits Emptypar leclode Sam 27 Avr 2024 - 17:59

» Bataille navale SM
AND OR XOR : calculatrice 8 bits Emptypar jjn4 Ven 26 Avr 2024 - 17:39

» Les maths du crocodile
AND OR XOR : calculatrice 8 bits Emptypar jean_debord Jeu 25 Avr 2024 - 10:37

» Naissance de Crocodile Basic
AND OR XOR : calculatrice 8 bits Emptypar jean_debord Jeu 25 Avr 2024 - 8:45

» Dessine-moi une galaxie
AND OR XOR : calculatrice 8 bits Emptypar jjn4 Lun 22 Avr 2024 - 13:47

» Erreur END_SUB
AND OR XOR : calculatrice 8 bits Emptypar jjn4 Lun 22 Avr 2024 - 13:43

» Bug sur DIM_LOCAL ?
AND OR XOR : calculatrice 8 bits Emptypar papydall Dim 21 Avr 2024 - 23:30

» 2D_fill_color(résolu)
AND OR XOR : calculatrice 8 bits Emptypar leclode Sam 20 Avr 2024 - 8:32

» Consommation gaz électricité
AND OR XOR : calculatrice 8 bits Emptypar leclode Mer 17 Avr 2024 - 11:07

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

 

 AND OR XOR : calculatrice 8 bits

Aller en bas 
4 participants
AuteurMessage
Marc

Marc


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

AND OR XOR : calculatrice 8 bits Empty
MessageSujet: AND OR XOR : calculatrice 8 bits   AND OR XOR : calculatrice 8 bits EmptyMer 23 Fév 2022 - 17:32

Bonjour à tous !

Voici une calculatrice binaire  8 bits permettant de mettre en exergue les opérateurs logiques de Panoramic : BIN_AND, BIN_OR et BIN_XOR.

AND OR XOR : calculatrice 8 bits Calcbi10


Chaque valeur binaire est traduite en décimal et hexadécimal, et réciproquement.

Vous pouvez à tout moment changer les valeurs hexadécimales, décimales ou binaires. Tous les champs de la calculatrice sont recalculés et remis à jour à chaque clic.

Pour modifier un champ binaire, cliquez directement sur un bit pour obtenir son changement d’état. Pour les champs décimaux et hexadécimaux, cliquez sur les signes « + » et « -  ».

Vous pouvez aussi changer d’opérateur logique à tout moment.

Code:
' Calculatrice Binaire
' Opérateurs AND, OR et XOR
' Marc - février 2022
' Ecrit en langage Panoramic

dim bin_a%, bin_b%, bin_r%, a_bin$, b_bin$, r_bin$
dim dec_a%, dec_b%, dec_r%, a_dec$, b_dec$, r_dec$
dim hex_a%, hex_b%, hex_r%, a_hex$, b_hex$, r_hex$
dim operator%, bit%, valeur%, valeurBinaire%, valeurDecimale%, valeurHexa%

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

interfaceUtilisateur()

end

sub interfaceUtilisateur()
    width 0,width(0) - width_client(0) + 674
    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,635
    height 1,310
    color 1,240,240,240
    caption 1," Calculatrice Binaire "
    command_target_is 1

    option 2
    top 2,100
    left 2,25
    font_size 2,10
    font_bold 2
    caption 2,"bin_and (A,B)"
    cursor_point 2
    mark_on 2
    on_click 2,operateur
    
    option 3
    top 3,125
    left 3,25
    caption 3,"bin_or (A,B)"
    cursor_point 3
    on_click 3,operateur

    option 4
    top 4,150
    left 4,25
    font_size 4,10
    caption 4,"bin_xor (A,B)"
    cursor_point 4
    on_click 4,operateur

    ' creer zone de saisie binaire A
    creerZoneBinaire(10,225,80)
    
    ' creer zone de saisie binaire B
    creerZoneBinaire(20,225,155)

    ' creer zone de saisie binaire Résultat
    creerZoneBinaire(30,225,245)
    
    ' creer zone de saisie décimale A
    creerZoneDecimale(40,450,80)

    ' creer zone de saisie décimale B
    creerZoneDecimale(50,450,155)
    
    ' creer zone de saisie décimale Résultat
    creerZoneDecimale(60,450,245)

    ' creer zone de saisie hexadécimale A
    creerZoneHexadecimale(70,550,80)
    
    ' creer zone de saisie hexadécimale B
    creerZoneHexadecimale(80,550,155)

    ' creer zone de saisie hexadécimale Resultat
    creerZoneHexadecimale(90,550,245)
    
    ' légendes
    alpha 200
    top 200,35
    left 200,294
    font_size 200,13
    caption 200,"Binaire"
    
    alpha 201
    top 201,35
    left 201,456
    font_size 201,13
    caption 201,"Décimal"
    
    alpha 202
    top 202,35
    left 202,554
    font_size 202,13
    caption 202,"Hexa."
    
    alpha 203
    top 203,82
    left 203,198
    font_size 203,13
    caption 203,"A :"

    alpha 204
    top 204,157
    left 204,198
    font_size 204,13
    caption 204,"B :"
    
    alpha 205
    top 205,247
    left 205,150
    font_size 205,13
    caption 205,"Résultat :"
    
    alpha 206
    top 206,190
    left 206,195
    caption 206,string$(59,"_")

    alpha 207
    top 207,70
    left 207,45
    font_size 207,12
    caption 207,"Opérateur :"

    logoPanoramic(25,225)
    set_focus 0
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"
        if n% < 30
            cursor_point n%
            on_click n%,binModif
        end_if
        
        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"

        if n% < 60
            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,3
            print "-"
            cursor_point n%+105
            on_click n%+105,decModifMoins
        end_if
        
        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"

        if n% < 90
            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,3
            print "-"
            cursor_point n%+105
            on_click n%+105,hexModifMoins
        end_if
        
        n% = n% + 1
        e% = e% + 25
    next i%

end_sub


sub logoPanoramic(x%,y%)
    ' Logo Panoramic
    picture 220
    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


operateur:
    select number_click
        case 2
            font_bold 2
            font_size 2,10
            caption 2,"bin_and (A,B)"
            font_bold_off 3
            font_size 3,10
            caption 3,"bin_or (A,B)"
            font_bold_off 4
            font_size 4,10
            caption 4,"bin_xor (A,B)"
            operator% = 0
            
        case 3
            font_bold 3
            font_size 3,10
            caption 3,"bin_or (A,B)"
            font_bold_off 4
            font_size 4,10
            caption 4,"bin_xor (A,B)"
            font_bold_off 2
            font_size 2,10
            caption 2,"bin_and (A,B)"
            operator% = 1

        case 4
            font_bold 4
            font_size 4,10
            caption 4,"bin_xor (A,B)"
            font_bold_off 2
            font_size 2,10
            caption 2,"bin_and (A,B)"
            font_bold_off 3
            font_size 3,10
            caption 3,"bin_or (A,B)"
            operator% = 2
    end_select
    calcul_R()
return


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 :' modification de la valeur binaire A
        modif_bin_a()
    end_if
    if number_click > 19 and number_click < 28 :' modification de la valeur binaire B
        modif_bin_b()
    end_if
    calcul_R()
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()

        case 150
            valeur% = val(caption$(50))
            valeur% = valeur% + 1
            valeurDecimale% = (valeur% * 100) + (val(caption$(51))*10) + val(caption$(52))
            if valeurDecimale% > 255
                return
            end_if
            caption 50,str$(valeur%)
            modif_dec_b()

        case 151
            valeur% = val(caption$(51))
            valeur% = valeur% + 1
            if valeur% > 9
                valeur% = 9
            end_if
            valeurDecimale% = (val(caption$(50))*100) + (valeur% * 10) + val(caption$(52))
            if valeurDecimale% > 255
                return
            end_if
            caption 51,str$(valeur%)
            modif_dec_b()

        case 152
            valeur% = val(caption$(52))
            valeur% = valeur% + 1
            if valeur% > 9
                valeur% = 9
            end_if
            valeurDecimale% = (val(caption$(50))*100) + (val(caption$(51))*10) + valeur%
            if valeurDecimale% > 255
                return
            end_if
            caption 52,str$(valeur%)
            modif_dec_b()
    end_select  
    calcul_R()
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()

        case 155
            valeur% = val(caption$(50))
            valeur% = valeur% - 1
            if valeur% < 0
                valeur% = 0
            end_if
            caption 50,str$(valeur%)
            modif_dec_b()

        case 156
            valeur% = val(caption$(51))
            valeur% = valeur% - 1
            if valeur% < 0
                valeur% = 0
            end_if
            caption 51,str$(valeur%)
            modif_dec_b()

        case 157
            valeur% = val(caption$(52))
            valeur% = valeur% - 1
            if valeur% < 0
                valeur% = 0
            end_if
            caption 52,str$(valeur%)
            modif_dec_b()
    end_select  
    calcul_R()
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()
            calcul_R()
            
        case 171
            valeurHexa% = hex(caption$(71))
            valeurHexa% = valeurHexa% + 1
            if valeurHexa% > 15
                valeurHexa% = 15
            end_if
            caption 71,hex$(valeurHexa%)
            modif_hex_a()
            calcul_R()
            
        case 180
            valeurHexa% = hex(caption$(80))
            valeurHexa% = valeurHexa% + 1
            if valeurHexa% > 15
                valeurHexa% = 15
            end_if
            caption 80,hex$(valeurHexa%)
            modif_hex_b()
            calcul_R()
            
        case 181
            valeurHexa% = hex(caption$(81))
            valeurHexa% = valeurHexa% + 1
            if valeurHexa% > 15
                valeurHexa% = 15
            end_if
            caption 81,hex$(valeurHexa%)
            modif_hex_b()
            calcul_R()
    end_select
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()
            
        case 185
            valeurHexa% = hex(caption$(80))
            valeurHexa% = valeurHexa% - 1
            if valeurHexa% < 0
                valeurHexa% = 0
            end_if
            caption 80,hex$(valeurHexa%)
            modif_hex_b()
            
        case 186
            valeurHexa% = hex(caption$(81))
            valeurHexa% = valeurHexa% - 1
            if valeurHexa% < 0
                valeurHexa% = 0
            end_if
            caption 81,hex$(valeurHexa%)
            modif_hex_b()
    end_select
    calcul_R()
return


sub modif_bin_a()
    ' lecture de la nouvelle valeur binaire A en décimal
    dec_a% = 0
    for bit% = 0 to 7
        if val(caption$(bit% + 10)) = 1
            dec_a% = dec_a% + POWER(2,7-Bit%)
        end_if
    next bit%

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

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

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

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


sub modif_bin_b()
    ' lecture de la nouvelle valeur binaire B en décimal
    dec_b% = 0
    for bit% = 0 to 7
        if val(caption$(bit% + 20)) = 1
            dec_b% = dec_b% + POWER(2,7-Bit%)
        end_if
    next bit%

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

    ' affiche de la nouvelle valeur décimale A
    caption 50,left$(b_dec$,1)
    caption 51,mid$(b_dec$,2,1)
    caption 52,right$(b_dec$,1)

    ' conversion valeur décimale de A en hexa et ajout de "0" en tête pour avoir 2 chiffres
    b_hex$ = hex$(dec_b%)
    while len(b_hex$) < 2
       b_hex$ = "0" + b_hex$
    end_while

    ' affiche de la valeur hexadécimale de A
    caption 80,left$(b_hex$,1)
    caption 81,right$(b_hex$,1)
end_sub


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

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

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

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


sub modif_dec_b()
    ' lecture de la nouvelle valeur decimale de B
    dec_b% = val(caption$(50)+caption$(51)+caption$(52))  

    ' conversion valeur décimale de B en hexa avec ajout de "0" en tête pour obtenir 2 chiffres
    b_hex$ = hex$(dec_b%)
    while len(b_hex$) < 2
       b_hex$ = "0" + b_hex$
    end_while
    ' affichage de la valeur hexadécimale de A
    caption 80,left$(b_hex$,1)
    caption 81,right$(b_hex$,1)

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

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


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

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

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


sub modif_hex_b()
    ' lecture nouvelle valeur hexadécimale de B
    b_hex$ = caption$(80)+caption$(81)
    
    ' conversion de la valeur haxe de B en décimal
    dec_b% = hex(b_hex$)
    ' conversion valeur décimale de B en chaine avec complement de "0" en tête pour avoir 3 chiffres
    b_dec$ = str$(dec_b%)
    while len(b_dec$) < 3
       b_dec$ = "0" + b_dec$
    end_while
    ' affiche de la valeur décimale de B
    caption 50,left$(b_dec$,1)
    caption 51,mid$(b_dec$,2,1)
    caption 52,right$(b_dec$,1)

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

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



sub calcul_R()
    ' calcul de R en fonction de A et B
    dec_a% = val(caption$(40)+caption$(41)+caption$(42))
    dec_b% = val(caption$(50)+caption$(51)+caption$(52))  

    select operator%
        case 0
            dec_r% = bin_and(dec_a%,dec_b%)
        case 1
            dec_r% = bin_or(dec_a%,dec_b%)
        case 2
            dec_r% = bin_xor(dec_a%,dec_b%)
    end_select
          
    ' conversion valeur décimale R en chaine avec complement de "0" en tête pour avoir 3 chiffres
    r_dec$ = str$(dec_r%)
    while len(r_dec$) < 3
       r_dec$ = "0" + r_dec$
    end_while
    ' affiche la valeur décimale de B
    caption 60,left$(r_dec$,1)
    caption 61,mid$(r_dec$,2,1)
    caption 62,right$(r_dec$,1)

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

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

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


redim:
    width 0,width(0) - width_client(0) + 674
    height 0,height(0) - height_client(0) + 345
return
Revenir en haut Aller en bas
jjn4

jjn4


Nombre de messages : 2692
Date d'inscription : 13/09/2009

AND OR XOR : calculatrice 8 bits Empty
MessageSujet: Re: AND OR XOR : calculatrice 8 bits   AND OR XOR : calculatrice 8 bits EmptyJeu 24 Fév 2022 - 17:44

Je ne crois pas que je m'en servirai pour faire ma compta, Laughing
mais ça peut toujours servir pour des opérations plus compliquées.
Donc, à mettre en réserve...
Bravo, Marc !
cheers
Revenir en haut Aller en bas
http://jjn4.e-monsite.com
Minibug

Minibug


Nombre de messages : 4566
Age : 57
Localisation : Vienne (86)
Date d'inscription : 09/02/2012

AND OR XOR : calculatrice 8 bits Empty
MessageSujet: Re: AND OR XOR : calculatrice 8 bits   AND OR XOR : calculatrice 8 bits EmptyVen 25 Fév 2022 - 16:13

Heu... je crois bien que je ne me suis jamais servi de ces fonctions !! Embarassed
C'est peut être le moment de les découvrir...

Merci Marc pour ton programme. Wink


Dernière édition par Minibug le Sam 26 Fév 2022 - 10:14, édité 1 fois
Revenir en haut Aller en bas
http://gpp.panoramic.free.fr
papydall

papydall


Nombre de messages : 7000
Age : 73
Localisation : Moknine (Tunisie) Entre la chaise et le clavier
Date d'inscription : 03/03/2012

AND OR XOR : calculatrice 8 bits Empty
MessageSujet: Re: AND OR XOR : calculatrice 8 bits   AND OR XOR : calculatrice 8 bits EmptySam 26 Fév 2022 - 2:42

jjn4 a écrit:
Je ne crois pas que je m'en servirai pour faire ma compta

Minibug a écrit:
Heu... je crois bien que je ne me suis jamais servi de ces opérateurs !!

Bon, alors pour vous deux et pour les autres aussi qui en demandent, je vous propose ceci:

Code:

rem ============================================================================
rem Graphisme avec les fonctions logiques binaires : BIN_AND ; BIN_OR ; BIN_XOR
rem                           par Papydall
rem ============================================================================
dim a,x,y,x0,y0,ym,i
label choix, quitter
width 0,1000 : height 0,700
picture 10 : width 10,600 : height 10,600 : 2d_target_is 10
x0 = width_client(10)*.5 : y0 = height_client(10)-10 : ym = y0/2
color 10,200,100,50 : 2d_fill_color 50,100,200 : 2d_circle x0,y0/2+5,ym
container_option 20 : top 20,20 : left 20,650 : height 20,520 : width 20,300
font_bold 20 : caption 20,"Faites votre choix"

option  30 : caption 30,"bin_and(x,y-x)"
option  40 : caption 40,"bin_or(x,y-x)"
option  50 : caption 50,"bin_xor(x,y-x)"
option  60 : caption 60,"bin_and(x,y)"
option  70 : caption 70,"bin_and(x,y+x)"
option  80 : caption 80,"bin_and(y/pi,y+x/sqr(2))"
option  90 : caption 90,"bin_and(x,sqr(x*x+y*y))"
option 100 : caption 100,"bin_and(bin_and(x,sqr(x*x+y*y)),y)"
option 110 : caption 110,"bin_and(x*pi,y*pi)"
option 120 : caption 120,"bin_and(bin_and(x*x,x*x),sqr(y*x+y*x))"
option 130 : caption 130,"bin_and(bin_and(bin_and(x,x*y*pi),y),x)"
option 140 : caption 140,"bin_and(x*x/y+pi,y*y/x+pi)"
option 150 : caption 150,"bin_and(pi*x-y,pi*y)"
option 160 : caption 160,"bin_and(exp(1)*x,exp(1)*y)"
option 170 : caption 170,"bin_or(exp(1)*x,exp(1)*y)"
option 180 : caption 180,"bin_and(exp(pi)*x,exp(1)*y)"

alpha 998  : top 998,height(10)+20 : left 998,50 : font_bold 998
font_color 998,0,0,255 : font_size 998,12
caption 998,"Papydall vous propose du graphisme avec les fonctions binaires"
button 999 : top 999, height(20)+50 : left 999,width(10)+50
caption 999,"Quitter" : on_click 999,quitter

for i = 30 to 180 step 10
    parent i,20 : top i,i*3-50 : left i,10 : width i,250 : font_bold i
    on_click i,choix
next i
end
rem ============================================================================
Choix:    
    Tracer()
return
rem ============================================================================
Quitter:
    terminate
return
rem ============================================================================
SUB Tracer()
    inactive 20
    color 10,200,100,50 : 2d_fill_color 50,100,200 : 2d_circle x0,y0/2+5,ym
    caption 0,"Graphisme avec les fonctions logiques binaires ... Tracé en cours ... <ESC> pour arrêter"
    for y = 1 to ym
        for x = 1 to y
            select number_click
                case 30  : a = bin_and(x,y-x)  
                case 40  : a = bin_or(x,y-x)  
                case 50  : a = bin_xor(x,y-x)
                case 60  : a = bin_and(x,y)
                case 70  : a = bin_and(x,y+x)
                case 80  : a = bin_and(y,y-x)
                case 90  : a = bin_and(y/pi,y+x/sqr(2))
                case 100 : a = bin_and(x,sqr(x*x+y*y))
                case 110 : a = bin_and(bin_and(x,sqr(x*x+y*y)),y)
                case 120 : a = bin_and(x*pi,y*pi)
                case 130 : a = bin_and(bin_and(x*x,x*x),sqr(y*x+y*x))
                case 140 : a = bin_and(bin_and(bin_and(x,x*y*pi),y),x)
                case 150 : a = bin_and(x*x/y+pi,y*y/x+pi)
                case 160 : a = bin_and(pi*x-y,pi*y)
                case 170 : a = bin_and(exp(1)*x,exp(1)*y)
                case 180 : a = bin_and(exp(1)*x,exp(1)*y)
              
            end_select            
            if a <> 0
               couleur(a)
               2d_point x0+x,y+5    : 2d_point x0-x,y+5
               2d_point x0+x,y0-y+5 : 2d_point x0-x,y0-y+5          
               display
            end_if
            if scancode = 27 then caption 0,"Programme arrêté par l'utilisateur ! " : end
        next x
    next y
    caption 0,"TERMINE"
    active 20
END_SUB
rem ============================================================================
SUB Couleur(a)
    if a > 10 then 2d_pen_color 255,0,0
    if a > 20 then 2d_pen_color 0,255,0
    if a > 30 then 2d_pen_color 0,0,255
    if a > 40 then 2d_pen_color 255,255,0
    if a > 50 then 2d_pen_color 0,255,255
    if a > 60 then 2d_pen_color 127,0,0
    if a > 70 then 2d_pen_color 0,127,0
    if a > 80 then 2d_pen_color 0,0,127
    if a > 100 then 2d_pen_color rnd(255),rnd(255),rnd(255)
END_SUB
rem ============================================================================

Spoiler:
Revenir en haut Aller en bas
http://papydall-panoramic.forumarabia.com/
Marc

Marc


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

AND OR XOR : calculatrice 8 bits Empty
MessageSujet: Re: AND OR XOR : calculatrice 8 bits   AND OR XOR : calculatrice 8 bits EmptySam 26 Fév 2022 - 9:48

Merci Papydall !

Papydall a écrit:
Graphisme avec les fonctions logiques binaires : BIN_AND ; BIN_OR ; BIN_XOR par Papydall

C'est beaucoup plus jovial lol!
Revenir en haut Aller en bas
Minibug

Minibug


Nombre de messages : 4566
Age : 57
Localisation : Vienne (86)
Date d'inscription : 09/02/2012

AND OR XOR : calculatrice 8 bits Empty
MessageSujet: Re: AND OR XOR : calculatrice 8 bits   AND OR XOR : calculatrice 8 bits EmptySam 26 Fév 2022 - 10:15

Cela parait si simple comme ça... Laughing

Merci Papydall ! cheers
Revenir en haut Aller en bas
http://gpp.panoramic.free.fr
jjn4

jjn4


Nombre de messages : 2692
Date d'inscription : 13/09/2009

AND OR XOR : calculatrice 8 bits Empty
MessageSujet: Re: AND OR XOR : calculatrice 8 bits   AND OR XOR : calculatrice 8 bits EmptySam 26 Fév 2022 - 12:50

Ouahhh, joli !
Bravo !
Mais juste une question comme ça, en passant,
ça simplifie ou ça complique ?
lol!
Revenir en haut Aller en bas
http://jjn4.e-monsite.com
Contenu sponsorisé





AND OR XOR : calculatrice 8 bits Empty
MessageSujet: Re: AND OR XOR : calculatrice 8 bits   AND OR XOR : calculatrice 8 bits Empty

Revenir en haut Aller en bas
 
AND OR XOR : calculatrice 8 bits
Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» Calculatrice 8 bits, complément à 2
» Calculatrice
» Calculatrice
» KGF.dll 64 bits
» Une calculatrice parlante

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: