papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: CONVERSION DE BASES Dim 2 Sep 2012 - 22:56 | |
| Salut tout le monde. Je vous propose un petit utilitaire BASE1_TO_BASE2.BAS qui a pour but de traduire un nombre exprimé dans une base quelconque en une autre base. Les bases de départ et d’arrivée doivent être supérieures ou égales à 2 sinon mathématiquement elles n’ont pas de sens ! Une base b quelconque nécessite b symboles pour être représentée. Toutefois, les notations dans les bases supérieures à 10 utilisent les premières lettres de l’alphabet : A représente la valeur suivant 9 (donc le « 10 » décimal), B celle qui suit A (soit le « 11 » décimal), et ainsi de suite. Il sera donc difficile (seulement en pratique et non mathématiquement parlé !) de dépasser la base 36. Cette dernière nécessite en effet les 10 chiffres de 0 à 9 et les 26 lettres de A à Z. Vous pouvez taper les lettres indifféremment en minuscules ou en majuscules. Je pense avoir testé suffisamment le programme : il fonctionne dans tous les cas de figures et il détecte toutes sortes d’erreurs. Mais il se peut que je n’aie pas tout prévu et c’est à vous de le coincer ! - Code:
-
' Base1_to_Base2.bas
dim base1 : ' base de départ dim base2 : ' base d'arrivée dim Nb_convert$ : ' nombre à convertir dim Nb10 : ' nombre traduit en base 10 dim puiss1,puiss2 : ' puissances successives de base1 et de base2 dim l : ' nombre de chiffres de Nb_convert$ dim flag : ' drapeau indiquant la validité des chiffres dim r$ : ' chiffre à traduire en base 10 dim nt$ : ' traduction en base d'arrivée dim d : ' indice des diviseurs dim i : ' indice de boucle de calcul dim r : ' valeur en base 10 du chiffre r$ dim bidon$ label go,demarrer,quitter,asc2chr, chr2asc
gosub go
end ' ****************************************************************************** go: application_title "CONVERSION DES BASES" caption 0,"CONVERSION DE BASES PAR PAPYDALL" width 0, 800 : color 0,0,0,0 : font_color 0,255,255,0 : font_size 0,12 : font_bold 0 scene3d 1 : color 1, 0,0,0 : 3d_text 1,"PAPYDALL " : full_space 1 : 3d_color 1,0,0,255 3d_position 1,-2,-.5,1 for i = 0 to 360 : 3d_x_rotate 1,i : wait 1 : next i for i = 1 to .01 step -.001 : 3d_scale 1,i,i,i : display : next i 3d_text 2,"VOUS PROPOSE " : 3d_color 2,255,0,0 3d_position 2,-3.5,-.5,1 for i = 0 to 360 : 3d_x_rotate 2,i : wait 1 : next i for i = 1 to .01 step -.001 : 3d_scale 2,i,i,i : display : next i 3d_text 3,"BASE1_TO_BASE2" : 3d_color 3,0,255,0 3d_position 3,-1.5,-.5,1 for i = 0 to 500 : 3d_y_rotate 3,i : 3d_z_rotate 3,i : wait 1 : next i for i = 1 to .01 step -.001 : 3d_scale 3,i,i,i : display : next i hide 1 print_target_is 0 : font_color 0,255,255,0 : font_size 0, 12 : print_locate 50,50 print "CET UTILITAIRE VOUS PERMET DE TRADUIRE UN NOMBRE >= 0" : print_locate 50,80 print "EXPRIME DANS UNE BASE QUELCONQUE COMPRISE ENTRE 2 ET 36" : print_locate 50,110 print "EN UNE AUTRE BASE EGALEMENT COMPRISE ENTRE 2 ET 36" button 10 : top 10,200 : left 10,200 : width 10,150 : caption 10,"DEMARRER" button 20 : top 20,200 : left 20,400 : width 20,150 : caption 20,"QUITTER" on_click 10,demarrer : on_click 20, quitter return demarrer: ' ****************************************************************************** repeat if message_input("CONVERSION DE BASES","BASE DE DEPART (2...36) ","10") = 1 bidon$ = message_text$ if numeric(bidon$) = 1 then base1 = val(message_text$) end_if until base1 > 1 and base1 < 37
repeat if message_input("CONVERSION DE BASES","BASE D'ARRIVEE (2...36)","2") = 1 bidon$ = message_text$ if numeric(bidon$) = 1 then base2 = val(message_text$) end_if until base2 > 1 and base2 < 37
repeat if message_input("CONVERSION DE BASE","NOMBRE A CONVERTIR","1") = 1 bidon$ = message_text$ Nb_convert$ = upper$(message_text$) end_if Nb10 = 0 : puiss1 = 1 : l = len(Nb_convert$) : flag = 0 for puiss2 = l to 1 step -1 r$ = mid$(Nb_convert$,puiss2,1) gosub chr2asc if r >= base1 or r < 0 then flag = 1 Nb10 = Nb10 + puiss1 * r : puiss1 = puiss1 * base1 next puiss2 until flag = 0 if base1 <> 10 message "TRADUCTION EN BASE 10 DE " + Nb_convert$ + " (BASE "+str$(base1) +") : "+ str$(Nb10) end_if puiss2 = 1 : d = 1 repeat puiss2 = puiss2 * base2 : d = d + 1 until puiss2 * base2 > Nb10
dim v(d) puiss2 = 1 : nt$ = "" for i = 1 to d : v(i) = puiss2 : puiss2 = puiss2 * base2 : next i for i = d to 1 step -1 r = int(Nb10 / v(i)) gosub asc2chr nt$ = nt$ + r$ : Nb10 = Nb10 - r * v(i) next i
message "TRADUCTION EN BASE " + str$(base2) +" DE " + Nb_convert$ + " (BASE " + str$(base1)+") : " + nt$ free v(d) return ' ***************************************************************************** ' Transforme un CHR en ASCII chr2asc: r = asc(r$) - 48 : if r > 9 then r = asc(r$) - 55 return ' ****************************************************************************** ' Transforme un ASCII en CHR asc2chr: r$ = chr$(r + 48) : if r > 9 then r$ = chr$(r + 55) return ' *****************************************************************************
quitter: if message_confirmation_yes_no("VOUS VOULEZ VRAIMENT QUITTER ?") = 1 then terminate return
Remarque : Le programme donne la valeur du nombre dans la base de départ, dans la base décimale et dans la base d’arrivée. Pour vous amuser : Essayez de traduire un nombre de la base 36 à la bas 2. Donnez comme nombre à convertir TOUTES LES LETTRES et TOUS LES CHIFFRES.
Dernière édition par papydall le Lun 3 Sep 2012 - 0:21, édité 2 fois (Raison : POUR UN GROS BUG PLUS GROS QUE MA TETE) | |
|
Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: CONVERSION DE BASES Dim 2 Sep 2012 - 23:26 | |
| Très bien | |
|
papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| |
Invité Invité
| Sujet: Re: CONVERSION DE BASES Lun 3 Sep 2012 - 0:09 | |
| Oh: puta...! ca me rappel une vieille histoire quand dans les années 65 au CET, j'essayais de comprendre à titre personnel ce genre de réflexion. Comme cela ne plaisait pas au prof de math, pour quoi le cours qu'il faisait ne m'apportait rien, j'ai eu droit à une punition, et collé le week-end (je rentrais tous les 15 jours. J'essayais de mettre une formule pour passer d'une base dix, à une base douze. |
|
papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: CONVERSION DE BASES Lun 3 Sep 2012 - 0:27 | |
| Maintenant tu peux multiplier ta base par trois et passer de la base 12 à la base 36 ! Et tu ne seras pas collé le week-end. | |
|
Invité Invité
| Sujet: Re: CONVERSION DE BASES Ven 8 Mar 2013 - 18:58 | |
| Bonsoir, Papydall, en parlant de conversion de base, comme ton lien indique. J'ai fait un programme que l'on trouve ici:,il était dit que c'était un addition en base 11. Ors je ne suis pas sur que ce soit la base 11. La méthode est bizarre pour cela. Si tu fais l'essai, j'ai vu un problème sur mon ordi. Il faut mettre en ligne 8 ou 9, font_size 10 ou 11, sinon on ne voit que les ascenseur. Je ne sais pas pourquoi, ce n'était pas le cas à l'époque. Ensuite avec Panoramic de l'époque, il y avait un bug qui a été corrigé, et mon résultat était différent de celui de Panoramic, d'où le message final. EDIT: je me suis trompé de sujet, je voulais mettre à la suite de 'binaire et inverse'. Je pensais que le sujet était bloqué. C'est peut-être mieux ici. |
|
Contenu sponsorisé
| Sujet: Re: CONVERSION DE BASES | |
| |
|