Novembre 2024 | Lun | Mar | Mer | Jeu | Ven | Sam | Dim |
---|
| | | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | | Calendrier |
|
|
| Convertisseur binaire | |
| | Auteur | Message |
---|
gigi75
Nombre de messages : 101 Age : 52 Date d'inscription : 13/04/2013
| Sujet: Convertisseur binaire Ven 8 Aoû 2014 - 10:28 | |
| 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 | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Convertisseur binaire Ven 8 Aoû 2014 - 12: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. | |
| | | gigi75
Nombre de messages : 101 Age : 52 Date d'inscription : 13/04/2013
| Sujet: Re: Convertisseur binaire Ven 8 Aoû 2014 - 13:56 | |
| Désolé, vielle habitude de l'amstrad. On va essayer. Mais pourquoi les goto servent encore. Vous vous en servez des goto? | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Convertisseur binaire Ven 8 Aoû 2014 - 14: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).
| |
| | | gigi75
Nombre de messages : 101 Age : 52 Date d'inscription : 13/04/2013
| Sujet: Re: Convertisseur binaire Ven 8 Aoû 2014 - 15: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 | |
| | | gigi75
Nombre de messages : 101 Age : 52 Date d'inscription : 13/04/2013
| Sujet: Re: Convertisseur binaire Ven 8 Aoû 2014 - 15: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. | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Convertisseur binaire Ven 8 Aoû 2014 - 18: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. | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Convertisseur binaire Ven 8 Aoû 2014 - 21: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 | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Convertisseur binaire Ven 8 Aoû 2014 - 22: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 ? ), 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 ============================================================================
| |
| | | gigi75
Nombre de messages : 101 Age : 52 Date d'inscription : 13/04/2013
| Sujet: Re: Convertisseur binaire Ven 8 Aoû 2014 - 23:24 | |
| Merci, je vais travailler dessus, vive les SUB | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Convertisseur binaire Sam 9 Aoû 2014 - 10: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. | |
| | | gigi75
Nombre de messages : 101 Age : 52 Date d'inscription : 13/04/2013
| Sujet: Re: Convertisseur binaire Sam 9 Aoû 2014 - 12: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 | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Convertisseur binaire Sam 9 Aoû 2014 - 15: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 ) | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Convertisseur binaire Sam 9 Aoû 2014 - 15: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). | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Convertisseur binaire Sam 9 Aoû 2014 - 18: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. | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Convertisseur binaire Sam 9 Aoû 2014 - 19:00 | |
| Justement JL35, c'est un exercice de programmation | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Convertisseur binaire Sam 9 Aoû 2014 - 21: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. - 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 ============================================================================
| |
| | | gigi75
Nombre de messages : 101 Age : 52 Date d'inscription : 13/04/2013
| Sujet: Re: Convertisseur binaire Sam 9 Aoû 2014 - 22: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 | |
| | | Optimax
Nombre de messages : 6 Date d'inscription : 23/05/2013
| Sujet: Re: Convertisseur binaire Dim 10 Aoû 2014 - 11: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. | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Convertisseur binaire Dim 10 Aoû 2014 - 12: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 - 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 ============================================================================
| |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Convertisseur binaire Dim 10 Aoû 2014 - 13: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 ============================================================================
| |
| | | Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Dim 10 Aoû 2014 - 13: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 ?... | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Convertisseur binaire Dim 10 Aoû 2014 - 17:07 | |
| Il me semble aussi. Mais comme chaque jour je me fais plus vieux d’un jour, ma « ROM » commence à me faire des tours ! | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Convertisseur binaire Dim 10 Aoû 2014 - 17: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 ? | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Convertisseur binaire Dim 10 Aoû 2014 - 18: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! Quelqu'un d'autre plus doué que moi, vous la racontera peut-être un jour! | |
| | | Contenu sponsorisé
| Sujet: Re: Convertisseur binaire | |
| |
| | | | Convertisseur binaire | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |