FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC

Développement d'applications avec le langage Panoramic
 
AccueilAccueil  FAQFAQ  RechercherRechercher  S'enregistrerS'enregistrer  MembresMembres  GroupesGroupes  Connexion  
Derniers sujets
» Le Forum est en vacances.
par JL35 Aujourd'hui à 21:20

» Une autre façon de terminer une application.
par JL35 Hier à 14:27

» Compilateur FBPano
par Mike Lun 21 Aoû 2017 - 23:17

» Pb 20 (en analyse): plantage à l'appel d'un SUB
par Jack Lun 21 Aoû 2017 - 21:58

» Pb 19 (en analyse): libellé d'erreur dans des IF imbriqués
par Jack Lun 21 Aoû 2017 - 21:55

» Copier / coller du texte à partir de la fenêtre de commandes
par jean_debord Lun 21 Aoû 2017 - 9:46

» COMPILATEUR V 0.9 beta 8 du 18 aout 2017
par papydall Lun 21 Aoû 2017 - 5:01

» Mettre en windows en veille
par papydall Lun 21 Aoû 2017 - 4:15

» Stretch_on ne stretch plus...
par papydall Dim 20 Aoû 2017 - 15:22

» Pb 18 (en analyse): RESTORE_LABEL avec DATA à la fin
par Jack Dim 20 Aoû 2017 - 13:21

» Problème de traitement des opérateurs avec le compilateur.
par Pedro Alvarez Sam 19 Aoû 2017 - 20:01

» Pb 17 (résolu): ITEM_SELECT ne fonctionne pas
par Jack Jeu 17 Aoû 2017 - 19:26

» un nouveau editeur panobasic
par Jean Claude Jeu 17 Aoû 2017 - 10:18

» Le compilateur.
par Pedro Alvarez Jeu 17 Aoû 2017 - 8:36

» Pb 16 (résolu): ON_CLOSE plante à l'exécution
par Jack Mer 16 Aoû 2017 - 20:00

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Août 2017
LunMarMerJeuVenSamDim
 123456
78910111213
14151617181920
21222324252627
28293031   
CalendrierCalendrier

Partagez | 
 

 Convertisseur binaire

Voir le sujet précédent Voir le sujet suivant Aller en bas 
AuteurMessage
gigi75

avatar

Nombre de messages : 91
Age : 44
Date d'inscription : 13/04/2013

MessageSujet: Convertisseur binaire   Ven 8 Aoû 2014 - 11:28

 pig Bonjour à tous,

Je ne suis pas souvent là, et incroyable, je suis en vacances en Normandie, le ciel est gris, je programme.
Je n'ai pas trouvé de fonction pour convertir le décimal en binaire, pour entrainement, j'ai donc fait que je partage avec plaisir, un convertisseur binaire qui si on le souhaite sauvegarde dans un fichier.
Mais si il existe une fonction pour la convertion que je n'ai point vu, rien de grave, on apprends toujours avec grands plaisir.
Une chose étrange apparait, je vous avoue que je suis allé vers d'autres langages pour apprendre, et tous les chemins dirigent vers panoramic.

Gilles

Code:
rem declaration variables
dim nomb : dim a$
dim chaine2$
dim chaine$
dim long$
dim d
dim i
dim z
d=90
z=0

rem declaration labels
label start
label calcul
label exit
label sauv

rem declaration fenetre
width 0,430 : height 0,300
caption 0, "Convertisseur V 1.0"
alpha 1
font_size 1,14 : top 1,10 : left 1,40 : caption 1,"Entrez le nombre décimal (1-9,e+8)"
alpha 7
font_size 7,14 : top 7,40 : left 7,40 : caption 7,">>"
alpha 3
font_size 3,14 : top 3,70 : left 3,40 : caption 3,"(Touche retour pour effacer)"
alpha 5
font_size 5,14 : top 5,40 : left 5,64
button 2
font_size 2,14 : top 2,170 : left 2,170 : caption 2,"Sortir"
button 4
font_size 4,14 : top 4,70 : left 4,280 : caption 4,"Valider"
alpha 6
font_size 6,14 : font_bold 6 : top 6,100 : left 6,40
alpha 8
font_size 8,14 :  top 8,130 : left 8,40
alpha 9
font_size 9,14 :  top 9,160 : left 9,40
button 10
font_size 10,14 : top 10,170 : left 10,40 : caption 10,"Sauver"
hide 10
alpha 11
font_size 11,14 : top 11,230 : left 11,40
hide 11
start:
a$=inkey$
if a$="0" or a$="1" or a$="2" or a$="3" or a$="4" or a$="5" or a$="6" or a$="7" or a$="8" or a$="9"
chaine$=chaine$+a$
end_if
if key_down_code=8 then chaine$=""
if len(chaine$)>0 then nomb=val(chaine$)
if nomb>999999999 then chaine$ = ""
caption 5,chaine$
on_click 2,exit
on_click 4,calcul
on_click 10,sauv
goto start

calcul:
beep
for i=1 to 91
if nomb>=power(2,d)
nomb=nomb-power(2,d)
z=1
chaine2$=chaine2$+"1"
else
if z=1
chaine2$=chaine2$+"0"
end_if
end_if
d=d-1
long$ = "Longueur (Bits): " + str$(len(chaine2$))
caption 8, long$
caption 6,chaine2$
next i
show 10
hide 4
goto start

sauv:
file_open_write 1,"Bin"+chaine$
file_write 1, chaine$+"="+chaine2$+"  "+"Longueur (Bits): " + str$(len(chaine2$))
file_close 1
show 11
caption 11,"Resultats sauvegardés dans "+ "Bin"+chaine$
end

exit:
beep
terminate
end
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Jicehel

avatar

Nombre de messages : 5849
Age : 45
Localisation : 77500
Date d'inscription : 19/04/2011

MessageSujet: Re: Convertisseur binaire   Ven 8 Aoû 2014 - 13:23

Maintenant tu peux aussi faire des procédure SUB appelées lors des clics
Le gros avantage et que tu passe les valeurs en paramètres et ça facilite donc la réusibilité des procédures.

Après, si j'étais toi, je ferais plutôt un programme sans l'étiquette start et goto start à la fin ni pour finir les sous programmes
Pour le programme, tu mets un end et tu gères les évenements de changements sur l'objet 5 ou en cas de clic

Pour les sous programme au lieu de faire un goto start, tu fais juste un return.

Après, c'est juste une façon de faire, c'est juste que moi, j'aurais fais comme ça.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
gigi75

avatar

Nombre de messages : 91
Age : 44
Date d'inscription : 13/04/2013

MessageSujet: Re: Convertisseur binaire   Ven 8 Aoû 2014 - 14:56

Désolé, vielle habitude de l'amstrad. On va essayer. Mais pourquoi les goto servent encore. Vous vous en servez des goto?
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Jicehel

avatar

Nombre de messages : 5849
Age : 45
Localisation : 77500
Date d'inscription : 19/04/2011

MessageSujet: Re: Convertisseur binaire   Ven 8 Aoû 2014 - 15:13

Bien sûr les goto peuvent servir, mais cela correspond à une façon de programmer. J'ai moi même appris comme ça, puis sont apparu les procédures et fonctions puis la programmation événementielle.

Jack a mis les GOTO par soucis de compatibilité car c'est un élément standard du Basic des programmes peuvent tout à fait être écrit comme ça. Personnellement, par contre, je ne m'en sert qu'exceptionnellement et surtout par facilité. En règle générale, il y a toujours une autre façon de faire, mais si toi tu a plus de facilités à programmer en les utilisant, c'est ton droit.
(Sauf pour les sous programmes événementiels où là je te conseil de mettre un return car ça permet de libérer la pile, sinon, les données sont empilé à chaque appel et jamais dépilées).
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
gigi75

avatar

Nombre de messages : 91
Age : 44
Date d'inscription : 13/04/2013

MessageSujet: Re: Convertisseur binaire   Ven 8 Aoû 2014 - 16:44

jicehel,

Pourrais tu svp en copiant le code du convertisseur me montrer où mettre les SUB, normalement si j'ai bien compris, avec les SUB et END, on remplace les GOTO.

Merci
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
gigi75

avatar

Nombre de messages : 91
Age : 44
Date d'inscription : 13/04/2013

MessageSujet: Re: Convertisseur binaire   Ven 8 Aoû 2014 - 16:48

En plus j'ai pas du poser la question, existe il une fonction en panoramic pour convertir du décimal en binaire?
Bon le petit programme que j'ai fait est surtout pour débuter, mais il peut être les bases si la fonction n'existe pas.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Jicehel

avatar

Nombre de messages : 5849
Age : 45
Localisation : 77500
Date d'inscription : 19/04/2011

MessageSujet: Re: Convertisseur binaire   Ven 8 Aoû 2014 - 19:02

Et tu as bien raison de partager tes codes. C'est en partageant que l'on peut avoir des avis et progresser (si on le veut) en programmation. On peut toujours avoir une petite critique constructive et décider si on en tient compte ou pas.
Là, je suis au boulot, mais je prendrais 5 minutes pour te faire une version à ma sauce.
Tu prendras ce que tu veux comme habitudes dedans.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Jicehel

avatar

Nombre de messages : 5849
Age : 45
Localisation : 77500
Date d'inscription : 19/04/2011

MessageSujet: Re: Convertisseur binaire   Ven 8 Aoû 2014 - 22:12

Je n'ai pas fais les sub, on verra ça la prochaine fois mais je t'ai supprimé les goto et j'ai modifié un peu le principe de saisie pour correspondre plus (selon moi) à l'esprit Panoramic et Windows.
Ca donne ça:
Code:
' Declaration variables
dim nomb
dim a$, chaine2$

dim i : ' Compteur temporaire
dim z : z=0
dim d : d=90 : ' Nombre Maximum de décimales autorisées

' declaration labels
label Calculer, Quitter, Sauver, Saisir, Verifier

' paramétrage de fenetre
width 0,430 : height 0,300
caption 0, "Convertisseur V 1.1 - par Gigi75 et Jicehel"


alpha 1 : font_size 1,12 : top 1,10 : left 1,20 : caption 1,"Entrez le nombre décimal (1-9, maximum 9 digits)"
edit 7: font_size 7,12 : top 7,40 : left 7,20 : width 7, 350 : text 7,">>": on_click 7,Saisir : on_change 7,Verifier
alpha 3 : font_size 3,12 : top 3,70 : left 3,20 : caption 3,"(Touche retour pour effacer)"
button 2 : font_size 2,12 : top 2,170 : left 2,170 : caption 2,"Sortir" : on_click 2,Quitter
button 4 : font_size 4,12 : top 4,70 : left 4,280 : caption 4,"Valider" : on_click 4,Calculer
alpha 6 : font_size 6,12 : font_bold 6 : top 6,100 : left 6,20
alpha 8 : font_size 8,12 :  top 8,130 : left 8,20
alpha 9 : font_size 9,12 :  top 9,160 : left 9,20
button 10 : hide 10 : font_size 10,12 : top 10,170 : left 10,20 : caption 10,"Sauver" : on_click 10,Sauver
alpha 11 : hide 11 : font_size 11,12 : top 11,200 : left 11,20
end

Saisir:
 if text$(7)=">>" then text 7,"" : chaine2$=text$(7)
return

Verifier:
if len(text$(7)) > 0
  for i=1 to len(text$(7))
    if ( asc(mid$(text$(7),i,1))<48 or asc(mid$(text$(7),i,1)) > 57 or len(text$(7)) > 9) then text 7,chaine2$ : select_text 7,len(chaine2$)+1,1 : return
  next i
end_if
chaine2$ = text$(7)
return

Calculer:
beep : caption 6,""
nomb = val(text$(7))
if nomb > 0
  for i = 1 to d
    if nomb>=power(2,d-i)
      nomb=nomb-power(2,d-i)
      z=1
      caption 6, caption$(6)+"1"
    else
      if z=1
        caption 6, caption$(6)+"0"
      end_if
    end_if
  next i
else
  if nomb = 0
    caption 6,"0"
  else
    return
  end_if
end_if
caption 8, "Longueur (Bits): " + str$(len(caption$(6)))
show 10 : hide 4
return

Sauver:
file_open_write 1,"Bin"+text$(7)+".txt"
file_write 1, text$(7)+"="+caption$(6)+"  "+"Longueur (Bits): " + str$(len(caption$(6)))
file_close 1
caption 11,"Resultats sauvegardés dans "+ "Bin"+text$(7)+".txt" : show 11 : wait 500
gosub Quitter
return

Quitter:
beep
terminate

Bonne soirée, je vais jouer Wink
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
papydall

avatar

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

MessageSujet: Re: Convertisseur binaire   Ven 8 Aoû 2014 - 23:41

Salut tout le monde
gigi75 a écrit:
existe il une fonction en panoramic pour convertir du décimal en binaire?

A ma connaissance NON,  une telle fonction  n’existe pas en Panoramic.

Et comme Jicehel « va jouer »  (Hé veinard, à quoi tu joues ?  Laughing ), je vous propose une SUB de conversion d’un nombre décimal à une base quelconque (>= 2 et pouvant aller jusqu’à la base 36 et même au-delà jusqu’à la base 62 !)

Remarque : le programme peut convertir jusqu’à la base 36 et indique comment aller jusqu’à la base 62.
Mais qui a besoin d’utiliser des telles bases ?

Les bases courantes sont :
La base deux (système binaire)
La base trois (système trinaire ou ternaire))
La base huit (système octal)
La base neuf (système nonaire)
La base dix (système décimal)
La base douze (système duodécimal)
La base seize (système hexadécimal)
La base vingt (système vigésimal)
La base soixante (système sexagésimal)

Code:

rem ============================================================================
rem Conversion de nombres de la base décimale à une base B(comprise entre 2 et 36)
rem Appel : Decimal_To_BaseB(n,b)
rem n est le nombre décimal à convertir
rem b est la base de conversion
rem ============================================================================
' Pour une base allant jusqu'à 36, on utilise en plus des chiffres 0 à 9,
' les "chiffres" A à Z (en majuscules) : A pou 10, B pour 11 etc.
' Il est possible d'aller jusqu'à la base 62 en utilisant en plus des chiffres
' 0 à 9, les "chiffres" A à Z ( majuscules) et les "chifres" a à z (en minuscules
rem ============================================================================

dim n,b,s$,result$
height 0, 800
alpha 10 : top 10,10 : left 10, 150 : font_bold 10
font_size 10,20 : font_color 10, 0,0,255 : caption 10,"Conversion de bases"
list 100 : height 100, 700 : width 100, 200 : top 100, 50 : left 100, 50
list 200 : height 200, 700 : width 200, 200 : top 200, 50 : left 200, 350
' ******************************************************************************
b = 36 : ' conversion vers la base 36
for n = 1 to 100
     Decimal_To_BaseB(n,b) : if b < 2 or b > 36 or n < 1 then end
     if n < 10 then s$ = " " : else : s$ = ""
     if n < 51
        item_add 100, s$ + str$(n) + " décimal = " + result$ + " base " + str$(b)
     else
        item_add 200, s$ + str$(n) + " décimal = " + result$ + " base " + str$(b)
     end_if
next n
 
end
rem ============================================================================
SUB Decimal_To_BaseB(nombre_decimal,base)
    dim_local q,r,c$
    if (base < 2) or (base > 36) or (nombre_decimal < 1)
       message "!!! La base doit être comprise entre 2 et 36 bornes incluses !!!" + chr$(13) + "   Et le nombre décimal doit être positif !!!"
       exit_sub
    end_if
    q = nombre_decimal : result$ = ""
    while q > 0
          r = mod(q,base) : q = int(q/base) : c$ = str$(r)
          select r
               case 10 : c$ = "A"
               case 11 : c$ = "B"
               case 12 : c$ = "C"
               case 13 : c$ = "D"
               case 14 : c$ = "E"
               case 15 : c$ = "F"
               case 16 : c$ = "G"
               case 17 : c$ = "H"
               case 18 : c$ = "I"
               case 19 : c$ = "J"
               case 20 : c$ = "K"
               case 21 : c$ = "L"
               case 22 : c$ = "M"
               case 23 : c$ = "N"
               case 24 : c$ = "O"
               case 25 : c$ = "P"
               case 26 : c$ = "Q"
               case 27 : c$ = "R"
               case 28 : c$ = "S"
               case 29 : c$ = "T"
               case 30 : c$ = "U"
               case 31 : c$ = "V"
               case 32 : c$ = "W"
               case 33 : c$ = "X"
               case 34 : c$ = "Y"
               case 35 : c$ = "Z"
          end_select
          result$ =  c$ + result$
    end_while
end_sub
rem ============================================================================
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://papydall-panoramic.forumarabia.com/
gigi75

avatar

Nombre de messages : 91
Age : 44
Date d'inscription : 13/04/2013

MessageSujet: Re: Convertisseur binaire   Sam 9 Aoû 2014 - 0:24

Merci, je vais travailler dessus, vive les SUB lol! 
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Jicehel

avatar

Nombre de messages : 5849
Age : 45
Localisation : 77500
Date d'inscription : 19/04/2011

MessageSujet: Re: Convertisseur binaire   Sam 9 Aoû 2014 - 11:42

Bonjour, j'ai jetté un oeil sur le forum. La procédure de Papydall est une fonction bien pratique car elle est polyvalente et c'est le type de procédures que tu retrouvera sur le site du mag.

Après on a des conventions personnelles, par exemple Klaus gère souvent les erreur par une variable afin de permettre de pouvoir tester facilement si l’exécution de la procédure s'est bien déroulée. Sa facilite encore les possibilités de réutilisation. Certains ont des variables uniques pour toutes leurs procédures pour retourner le résultat. D'autres utilisent une variable spécifique pour chaque procédure avec un nom facile à identifier. Là, tu pourras choisir comment tu fais selon tes envies et tes besoins.

Je pense que tu n'en a plus besoin, mais j'ai remis à jour ton programme avec l'appel de la procédure de Papydall pour avoir la version "up to date" avec ces infos et j'ai ajouté la gestion de l'erreur par variable tant qu'à faire...

Code:
' Declaration variables
dim nomb,Decimal_To_BaseB_err
dim Decimal_To_BaseB_result$, chaine2$

dim i : ' Compteur temporaire
dim z : z=0
dim d : d=90 : ' Nombre Maximum de décimales autorisées

' declaration labels
label Calculer, Quitter, Sauver, Saisir, Verifier

' paramétrage de fenetre
width 0,430 : height 0,300
caption 0, "Convertisseur V 1.1 - par Gigi75 et Jicehel"


alpha 1 : font_size 1,12 : top 1,10 : left 1,20 : caption 1,"Entrez le nombre décimal (1-9, maximum 9 digits)"
edit 7: font_size 7,12 : top 7,40 : left 7,20 : width 7, 350 : text 7,">>": on_click 7,Saisir : on_change 7,Verifier
alpha 3 : font_size 3,12 : top 3,70 : left 3,20 : caption 3,"(Touche retour pour effacer)"
button 2 : font_size 2,12 : top 2,170 : left 2,170 : caption 2,"Sortir" : on_click 2,Quitter
button 4 : font_size 4,12 : top 4,70 : left 4,280 : caption 4,"Valider" : on_click 4,Calculer
alpha 6 : font_size 6,12 : font_bold 6 : top 6,100 : left 6,20
alpha 8 : font_size 8,12 :  top 8,130 : left 8,20
alpha 9 : font_size 9,12 :  top 9,160 : left 9,20
button 10 : hide 10 : font_size 10,12 : top 10,170 : left 10,20 : caption 10,"Sauver" : on_click 10,Sauver
alpha 11 : hide 11 : font_size 11,12 : top 11,200 : left 11,20
end

Saisir:
 if text$(7)=">>" then text 7,"" : chaine2$=text$(7)
return

Verifier:
if len(text$(7)) > 0
  for i=1 to len(text$(7))
    if ( asc(mid$(text$(7),i,1))<48 or asc(mid$(text$(7),i,1)) > 57 or len(text$(7)) > 9) then text 7,chaine2$ : select_text 7,len(chaine2$)+1,1 : return
  next i
end_if
chaine2$ = text$(7)
return

Calculer:
beep : caption 6,""
Decimal_To_BaseB(val(text$(7)),2)
If Decimal_To_BaseB_err=0
  caption 6,Decimal_To_BaseB_result$
  caption 8, "Longueur (Bits): " + str$(len(caption$(6)))
  show 10 : hide 4
end_if
return

Sauver:
file_open_write 1,"Bin"+text$(7)+".txt"
file_write 1, text$(7)+"="+caption$(6)+"  "+"Longueur (Bits): " + str$(len(caption$(6)))
file_close 1
caption 11,"Resultats sauvegardés dans "+ "Bin"+text$(7)+".txt" : show 11 : wait 500
gosub Quitter
return

Quitter:
beep
terminate

rem ============================================================================
rem Conversion de nombres de la base décimale à une base B(comprise entre 2 et 36)
rem Appel : Decimal_To_BaseB(n,b)
rem n est le nombre décimal à convertir
rem b est la base de conversion
rem ============================================================================
' Pour une base allant jusqu'à 36, on utilise en plus des chiffres 0 à 9,
' les "chiffres" A à Z (en majuscules) : A pou 10, B pour 11 etc.
' Il est possible d'aller jusqu'à la base 62 en utilisant en plus des chiffres
' 0 à 9, les "chiffres" A à Z ( majuscules) et les "chifres" a à z (en minuscules
rem ============================================================================

SUB Decimal_To_BaseB(nombre_decimal,base)
    dim_local q,r,c$
    Decimal_To_BaseB_err = 0
    if (base < 2) or (base > 36) or (nombre_decimal < 0)
      message "!!! La base doit être comprise entre 2 et 36 bornes incluses !!!" + chr$(13) + "  Et le nombre décimal doit être positif !!!"
      Decimal_To_BaseB_err = 1
      exit_sub
    end_if

    q = nombre_decimal : Decimal_To_BaseB_result$ = ""
    if nombre_decimal = 0 then Decimal_To_BaseB_result$="0" : exit_sub

    while q > 0
          r = mod(q,base) : q = int(q/base) : c$ = str$(r)
          select r
              case 10 : c$ = "A"
              case 11 : c$ = "B"
              case 12 : c$ = "C"
              case 13 : c$ = "D"
              case 14 : c$ = "E"
              case 15 : c$ = "F"
              case 16 : c$ = "G"
              case 17 : c$ = "H"
              case 18 : c$ = "I"
              case 19 : c$ = "J"
              case 20 : c$ = "K"
              case 21 : c$ = "L"
              case 22 : c$ = "M"
              case 23 : c$ = "N"
              case 24 : c$ = "O"
              case 25 : c$ = "P"
              case 26 : c$ = "Q"
              case 27 : c$ = "R"
              case 28 : c$ = "S"
              case 29 : c$ = "T"
              case 30 : c$ = "U"
              case 31 : c$ = "V"
              case 32 : c$ = "W"
              case 33 : c$ = "X"
              case 34 : c$ = "Y"
              case 35 : c$ = "Z"
          end_select
          Decimal_To_BaseB_result$ =  c$ + Decimal_To_BaseB_result$
    end_while
end_sub
rem ============================================================================

Après au niveau de l'éditeur, ce serait bien que l'on puisse "replier" les procédures pour gagner en lisibilité sur les gros programmes. Sinon, on peut faire des includes pour les procédures que l'on a déjà. On met cet include en fin de programme, ça permet quand on développe d'avoir les bons numéros de lignes dans son programme en cas d'erreur.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
gigi75

avatar

Nombre de messages : 91
Age : 44
Date d'inscription : 13/04/2013

MessageSujet: Re: Convertisseur binaire   Sam 9 Aoû 2014 - 13:12

C'est le matin, bonjour à tous.

Je relis ta correction, c'est pas mal, il faut s'habituer, un GOSUB apparait avec son RETURN. Merci JICEHEL pour ta correction. Je vais essayer en partant de ce nouveau schema de faire juste pour entrainnement un convertisseur de base 10 (0-9) en n'importe quel base (de base 2 en base 100) comme exercice. Je me rappelle sur la TI89 (Calculatrice) avoir réussi en rajoutant en plus de l'alphabet des symboles. Cela ne servira pas à grand chose sauf d'apprendre.

Gilles
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Jicehel

avatar

Nombre de messages : 5849
Age : 45
Localisation : 77500
Date d'inscription : 19/04/2011

MessageSujet: Re: Convertisseur binaire   Sam 9 Aoû 2014 - 16:02

Tu as raison, c'est très bien de s’entraîner et de faire des programmes simple avec la meilleur structure possible au départ. Ca aide beaucoup quand les choses se compliquent.

C'est le problème de beaucoup de gens qui se lancent dans la programmation et qui trouvent le programme "Hello World" ridicule. Ils veulent directement se faire un programme type World of Warcraft ou autre Elder scroll alors qu'ils n'en n'ont pas l'aptitude (Peu de gens ou plutôt d'équipes en ont l'aptitude, d'ailleurs Smile )
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
papydall

avatar

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

MessageSujet: Re: Convertisseur binaire   Sam 9 Aoû 2014 - 16:54

Salut tout le monde.

@gigi75
Tu peux (si tu veux) faire un convertisseur de base 10 en base 256.
C’est tout à fait possible en utilisant comme « chiffres de cette base » les caractères correspondant aux code ASCII (0 …255).
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://papydall-panoramic.forumarabia.com/
JL35



Nombre de messages : 5928
Localisation : 77
Date d'inscription : 29/11/2007

MessageSujet: Re: Convertisseur binaire   Sam 9 Aoû 2014 - 19:42

Je ne voudrais pas jouer les rabat-joie, mais à part
base 2 binaire <-> base 10 décimal <-> base 16 hexadécimal
(même plus base 8 octal, périmé) je ne vois pas bien à quoi les conversions en autres bases peuvent bien servir (à part comme exercices de style) ?

gigi75 c'est juste une remarque comme ça, ça n'enlève rien à tes expérimentations.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Jicehel

avatar

Nombre de messages : 5849
Age : 45
Localisation : 77500
Date d'inscription : 19/04/2011

MessageSujet: Re: Convertisseur binaire   Sam 9 Aoû 2014 - 20:00

Justement JL35, c'est un exercice de programmation  Wink
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
papydall

avatar

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

MessageSujet: Re: Convertisseur binaire   Sam 9 Aoû 2014 - 22:29

Pour faire plaisir à JL35, voici une SUB de conversion de la base 10 à la base … 256.
Oui, j’ai bien écrit la base 256 !
Les chiffres de cette base ?
He bien, il suffit de prendre les caractères ASCII comme « chiffres » de cette base.
A quoi ça sert ?
Absolument à rien !
Donc ça sert à beaucoup de choses. Laughing 


Code:

rem ============================================================================
rem        Conversion de la base 10 vers la base 256
rem    les "chiffres" de la base 256 sont les caractères du code ASCII
rem ============================================================================

dim n,s$,result$
full_space 0
alpha 10 : top 10,10 : left 10, 150 : font_bold 10
font_size 10,20 : font_color 10, 0,0,255 : caption 10,"Conversion base 10 vers base 256"
for n = 1 to 5
    list 100*n : height 100*n, 700 : width 100*n, 200 : top 100*n, 50 : left 100*n, 300*n-280
next n

for n = 1 to 256
     Decimal_To_Base256(n)
     if n < 100 then s$ = " "
     if n < 10  then s$ = "  "
     if n < 51
        item_add 100, s$ + str$(n) + " décimal = " + result$ + " base 256"
     else
        if n < 102
           item_add 200, s$ + str$(n) + " décimal = " + result$ + " base 256"
        else
           if n < 153
              item_add 300, s$ + str$(n) + " décimal = " + result$ + " base 256"
           else
              if n < 204
                 item_add 400, s$ + str$(n) + " décimal = " + result$ + " base 256"
              else
                 item_add 500, s$ + str$(n) + " décimal = " + result$ + " base 256"
              end_if
           end_if
        end_if
     end_if
next n

' ******************************************************************************
end
rem ============================================================================
SUB Decimal_To_Base256(nombre_decimal)
    dim_local q,r,c$
    q = nombre_decimal : result$ = ""
    while q > 0
          r = mod(q,256) : q = int(q/256)
          c$ = chr$(r) : result$ =  c$ + result$
    end_while
end_sub
rem ============================================================================
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://papydall-panoramic.forumarabia.com/
gigi75

avatar

Nombre de messages : 91
Age : 44
Date d'inscription : 13/04/2013

MessageSujet: Re: Convertisseur binaire   Sam 9 Aoû 2014 - 23:53

bonsoir,

J'ai enfin compris pourquoi je ne pouvais pas fermer une application, les goto, et oui.
C'etait la pensée du soir.

Merci pour votre aide.

Là j'essaye un convertisseur base 10 en base 26 (Alphabet), bien sur comme vous avez dit, avec des symboles on peut faire plus.

gilles
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Optimax



Nombre de messages : 5
Date d'inscription : 23/05/2013

MessageSujet: Re: Convertisseur binaire   Dim 10 Aoû 2014 - 12:52

Bonjour,

J'aime bien le convertisseur de base (36) de papydall.

Je me demande si, au lieu de "select r", on ne pourrait pas essayer quelque chose comme:

        c$ = chr$(r + 55)

ou bien:

        xyz = r  + 55
        c$   = chr$(xyz)

Pas vraiment différent, mais gagnerait en concision.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
papydall

avatar

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

MessageSujet: Re: Convertisseur binaire   Dim 10 Aoû 2014 - 13:29

Bonjour Optimax
Tu as visé juste.
En effet c’est concis, c’est optimax (Oh pardon c’est OPTIMUM) !

Pour le plaisir de tout le monde, je mets la SUB Decimal_To_Base36(nombre_decimal) optimaxée  Laughing  Laughing  Laughing 

Code:

rem ============================================================================
rem Conversion de nombres de la base décimale à la base 36
rem Appel : Decimal_To_Base36(n)
rem n est le nombre décimal à convertir

rem ============================================================================
' Pour une base allant jusqu'à 36, on utilise en plus des chiffres 0 à 9,
' les "chiffres" A à Z (en majuscules) : A pour 10, B pour 11 etc.
' Il est possible d'aller jusqu'à la base 62 en utilisant en plus des chiffres
' 0 à 9, les "chiffres" A à Z ( majuscules) et les "chifres" a à z (en minuscules
rem ============================================================================

dim n,b,s$,result$
height 0, 800
alpha 10 : top 10,10 : left 10, 50 : font_bold 10
font_size 10,20 : font_color 10, 0,0,255
caption 10,"Conversion de la base 10 à la base 36"
list 100 : height 100, 700 : width 100, 200 : top 100, 50 : left 100, 50
list 200 : height 200, 700 : width 200, 200 : top 200, 50 : left 200, 350
' ******************************************************************************

for n = 1 to 100
     Decimal_To_Base36(n)
     if n < 10 then s$ = " " : else : s$ = ""
     if n < 51
        item_add 100, s$ + str$(n) + " décimal = " + result$ + " base 36"
     else
        item_add 200, s$ + str$(n) + " décimal = " + result$ + " base 36"
     end_if
next n

end
rem ============================================================================
SUB Decimal_To_Base36(nombre_decimal)
    dim_local quotient,reste,chiffre$
    quotient = nombre_decimal : result$ = ""
    while quotient > 0
          reste = mod(quotient,36) : quotient = int(quotient/36)
          chiffre$ = str$(reste) : if reste > 9 then chiffre$ = chr$(reste + 55)
          result$ =  chiffre$ + result$
    end_while
end_sub
rem ============================================================================
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://papydall-panoramic.forumarabia.com/
papydall

avatar

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

MessageSujet: Re: Convertisseur binaire   Dim 10 Aoû 2014 - 14:42

Tant que nous y sommes, voici la SUB Decimal_To_Base62(nombre_decimal)

Code:

rem ============================================================================
rem Conversion de nombres de la base décimale à la base 62
rem Appel : Decimal_To_Base62(n)
rem n est le nombre décimal à convertir

rem ============================================================================
' Pour une base allant jusqu'à 62, on utilise en plus des chiffres 0 à 9,
' les "chiffres" A à Z (en majuscules) et les "chifres" a à z (en minuscules)
rem ============================================================================

dim n,s$,result$
height 0, 850
caption 0,"Conversion de la base 10 à la base 62"
list 100 : height 100, 810 : width 100, 200 : top 100, 2 : left 100, 50
list 200 : height 200, 810 : width 200, 200 : top 200, 2 : left 200, 350
' ******************************************************************************

for n = 1 to 124
     Decimal_To_Base62(n)
     if n < 63
        item_add 100, s$ + str$(n) + " décimal = " + result$ + " base 62"
     else
        item_add 200, s$ + str$(n) + " décimal = " + result$ + " base 62"
     end_if
next n

end
rem ============================================================================
SUB Decimal_To_Base62(nombre_decimal)
    dim_local quotient,reste,chiffre$
    quotient = nombre_decimal : result$ = ""
    while quotient > 0
          reste = mod(quotient,62) : quotient = int(quotient/62)
          chiffre$ = chr$(reste+48)
          if (reste > 9)  then chiffre$ = chr$(reste + 55)
          if (reste > 35) then chiffre$ = chr$(reste + 61)
          result$ =  chiffre$ + result$
    end_while
end_sub
rem ============================================================================
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://papydall-panoramic.forumarabia.com/
Yannick

avatar

Nombre de messages : 7975
Age : 46
Localisation : Bretagne
Date d'inscription : 15/02/2010

MessageSujet: re   Dim 10 Aoû 2014 - 14:46

@ Papydall,

Il me semble que tu nous avais déjà sorti des subs pour ce genre d' exercice et que je les avais publié sur le site, non ?... scratch 
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
papydall

avatar

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

MessageSujet: Re: Convertisseur binaire   Dim 10 Aoû 2014 - 18:07

Il me semble aussi.
Mais comme chaque jour je me fais plus vieux d’un jour, ma « ROM »  commence à me faire des tours ! bom
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://papydall-panoramic.forumarabia.com/
JL35



Nombre de messages : 5928
Localisation : 77
Date d'inscription : 29/11/2007

MessageSujet: Re: Convertisseur binaire   Dim 10 Aoû 2014 - 18:41

C'est vrai que comme beaucoup je me sers couramment de la base 62, pour faire les courses par exemple...
Comment as-tu pu oublier ?
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
papydall

avatar

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

MessageSujet: Re: Convertisseur binaire   Dim 10 Aoû 2014 - 19:59

JL35 a écrit:
C'est vrai que comme beaucoup je me sers couramment de la base 62, pour faire les courses par exemple...
Comment as-tu pu oublier ?

En plus des courses de JL35, la base 62 est plutôt très pratique dans certains domaines.


Sachez que certains systèmes de raccourcissement des URLs ont recours à la base 62.
Pour cela, ils utilisent le principe de base suivant :

On enregistre dans une base de données les différentes URLs  (qui peuvent être assez longues).
On encode leur identificateur unique dans la base 62 afin de diminuer la longueur de l’URL.
Quand on veut accéder à cette Url, on décode le paramètre ce qui permet de retrouver l’identificateur de l’URL et donc de faire la redirection adéquate.

L’utilisation de la base 62 (qui exploite 62 symboles comme ‘chiffres’ de la base) pour représenter une valeur, permet une grande réduction de la taille.

Mais ceci est une autre histoire! Shocked
Quelqu'un d'autre plus doué que moi, vous la racontera peut-être un jour!  Smile 
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://papydall-panoramic.forumarabia.com/
Contenu sponsorisé




MessageSujet: Re: Convertisseur binaire   

Revenir en haut Aller en bas
 
Convertisseur binaire
Voir le sujet précédent Voir le sujet suivant Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» Convertisseur Binaire
» GM 8.1 to GM 8.0 Converter (Convertisseur de gm81 à gmk)
» La structure binaire d'un .bmp
» Ouverture READ/WRITE d'un fichier binaire
» Convertisseur au format .mp3 [ Réglé ]

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