Exercice Conversion gloutonne
Pour convertir en base \(2\) un entier écrit en base \(10\), nous pouvons utiliser l'algorithme glouton de rendu de monnaie, en utilisant les puissances de \(2\) successives comme valeurs des pièces.
Par exemple, pour obtenir la représentation binaire de \(43\), on peut utiliser les valeurs \(32\), \(16\), \(8\), \(4\), \(2\) et \(1\). On se limite à \(32\) car la puissance suivante, \(64\), est strictement supérieure à \(43\).
On procède alors ainsi :
- Pour \(43\) on doit prendre \(32\) , il reste \(11\),
- Pour \(11\) on ne peut pas prendre \(16\) (en effet \(16>11\)),
- Pour \(11\) on doit prendre \(8\), il reste \(3\),
- Pour \(3\) on ne peut pas prendre \(4\),
- Pour \(3\) on doit prendre \(2\), il reste \(1\),
- Pour \(1\) on doit prendre \(1\), il reste \(0\).
On obtient la représentation binaire en observant les différentes étapes : s'il est possible de prendre une puissance, on note un 1
, si c'est impossible, on note un 0
.
Puissance de 2 |
Possible ? |
Bit correspondant |
\(32\) |
Oui |
1 |
\(16\) |
Non |
0 |
\(8\) |
Oui |
1 |
\(4\) |
Non |
0 |
\(2\) |
Oui |
1 |
\(1\) |
Oui |
1 |
Dans la pratique, pour convertir « à la main » \(43\) en binaire, cela revient réaliser le tableau suivant :
\(32\) |
\(16\) |
\(8\) |
\(4\) |
\(2\) |
\(1\) |
1 |
0 |
1 |
0 |
1 |
1 |
On en déduit que \(43\) en décimal s'écrit 101011
en binaire.
✏️ À vous de jouer ... sur papier
Utiliser la méthode précédente pour convertir 100 en binaire.
Solution
on peut utiliser les valeurs \(64\), \(32\), \(16\), \(8\), \(4\), \(2\) et \(1\). On se limite à \(64\) car la puissance suivante, \(128\), est strictement supérieure à \(100\).
On procède alors ainsi :
- Pour \(100\) on doit prendre \(64\) , il reste \(36\),
- Pour \(36\) on doit prendre \(32\), il reste \(4\)
- Pour \(4\) on doit prendre \(4\), il reste \(0\)
On obtient la représentation binaire en observant les différentes étapes : s'il est possible de prendre une puissance, on note un 1
, si c'est impossible, on note un 0
.
Puissance de 2 |
Possible ? |
Bit correspondant |
\(64\) |
Oui |
1 |
\(32\) |
Oui |
1 |
\(16\) |
Non |
0 |
\(8\) |
Non |
0 |
\(4\) |
Oui |
1 |
\(2\) |
Non |
0 |
\(1\) |
Non |
0 |
Dans la pratique, pour convertir « à la main » \(100\) en binaire, cela revient réaliser le tableau suivant :
\(64\) |
\(32\) |
\(16\) |
\(8\) |
\(4\) |
\(2\) |
\(1\) |
1 |
1 |
0 |
0 |
1 |
0 |
0 |
On en déduit que \(100\) en décimal s'écrit 1100100
en binaire.
Travail à faire
Vous devez écrire une fonction binaire
qui prend en paramètre un entier écrit en base \(10\), et renvoie la chaîne de caractères la plus courte possible (sans zéros inutiles) représentant sa conversion en binaire.
Exemples
Python Console Session>>> binaire(43)
'101011'
>>> binaire(32)
'100000'
>>> binaire(0)
'0'
>>> binaire(54321)
'1101010000110001'
Contraintes
Vous utiliserez obligatoirement un algorithme glouton qui met en oeuvre la méthode décrite dans cet exercice.
L'utilisation de la fonction bin
et du modulo (%
) est interdite.
Compléter le script ci-dessous
.128013.128073àog)zrh6av,ck4Ep9Rqb1+]_tP7V(D5w3 [;A8lS/em=èni:y-2éuxd*.Cfs0050(0R0A0k0W0O0-0J0n0O0k0-0-0T010A0W0r010406050-0$0S0S0k0h0Y040P0d0O0$120d0V0J020k0S0r0L0J0t0R1c0h0u0$0R0-050Q191b1d1f170r04051K1D1N0Q1K170(0W0l0`0|0~100|0V0e0$0k0e0R0Z0r0Y0A0i1m0J0i0W0e0i0O1?0i0A15050=0v0O0R1W0}0 011=1@1_1@0A1 211}0A0h1L1.0`1i0-0r0k0V100!01231Y010,0@0R0V1q0R1}2l2n2s252v212y0S2A040a0J0B0h0d0r0d0-0W1l1n0:2j0h0h0R0n2V1D2C0V1L0Q1.2+2f2h2g1~0(2E1Z0W0V2x2S1}1T1V0{242^2`0V0d2~1}0r2!1L2)2+3b182m1n302t340h1c0O1}0k1;2!0,10030z0z0n350R1_330d0Z0w3C150J0w1D0k3c3f163e2D3h253j3l3n3p0R3r013t3v3x3z2{3C0Z2q040J0!3I3K2n3M2)2@013R0k3m1L3o0i3q3s3u3w0:3#343%0I3F0I3-2(3L173;3P103@3_053{3}3X3 3!2_3$3D0p3F0p481E4a3N3g1X3Q0d3k3^3T3|3V3~3Z414n433D0G3F0G4t3b4b3f3=4f4D4j3Y403y4J3B3D0j3F0j4P4v4c4y4e4A3S3`3U3W4X4m3A3%0C3F0C4*3/4R3O4-3?4/4C4;4E4?4l4I4_3D0N3F0N4~2*504x31534B4g4i4F4k4H4Z5b0Z0s3F0s5g3:4S4d5l4:4h4=4G4Y424#3C0.150w0.5y5i4T545n5F5q5H4!3%0w0w5M3H0Q3J494 4w5R5m4V5p4@5a4o3C3)0w3,5%3.5h5+5B4U564W595s5=0w4504655P5}525 5E575G4^644q674s5`5)5|4,5k6c5o585r5I5Y4M674O6l4u5*6o3i5S5.6s5W5t0w4%674)6z4Q6a6p6E605/626u3D0w4{674}6N4+5A6b6R6d616t5X6W5d675f6#6B6%6Q5-6S6G6g4K3C5v675x6=6n6@6D6_6*6T6,5t0!5L047b5y1O391D2~2.0(2h2?5B4Y2}1U1L380R3a3L6m1L4Y7v2D0W0(103u2)5Y3T7C7E79642r2I0R7K6H7M2+5(6C250o150:0,7x0J6P3i0,150v2_0?2!7x7%2514040E7/7V4e15340S0v7.6A2*7:107=0f0X7x17807A1n7J017F3f3%3)5E8c6U6-3(7N2z7Q6|5J8h5`0J8u7$7_017X040W7!898w743Q7{0d7}7 3b8E515k0d150T0T7#82010S0W155O898U7=8689883d3;8j0z7G3D668i7D8d7L6}450J7O8p5;8^1}8t8v918U8z2!0A0$0h0V8T8x0-3)021z0d0A0L0.9e0$9g0L877^4S8,8.0Z6i8;8|636}4q8`8o8?7R9y8 3J8)7w8+8=8e2n3%6w9v9C8q9N8n2J9w6V0Z9O908u8U0V150r0$0W0~2n0n1B0z1k2w1C8D8U8P048S9?8x7=0K0y9o8!9J7K9s6K9P8k5t4%9A9U9Q8}5Ja59Z8M5j3i9%9a8F109^9`8L8U8W5Ma08*9q9K8-8f3D6Ya68@5J4{aa7Pac9xaE9F3*8v93150H1=21al8Naj040raTai259^020O9hap3Lah4T8H8J0RaY3=8$au9Iawa3az0Z6/aC9D5J5daG9V8la|ag928x9$aW9)9+0V9-0-9/12219=avaUa!150*9pbk7`040k0r0r2x0(boaZ83157@a1am3?akbCbp0184a?3/5+9ra`6 a}9R3D5vb1aI9WbPb5aNb7bFaq8xaoa:5Bas7db)529^0)b-6pb#4vbG8bax9s5N7Iaxa~5Y5LbUa7647c3-b6bDb89(9*0-9,0R0z1c0%b;2tb(9{c80v152Hbxa;bAcq5~9%baccbc9.9:bhct52bJclbH9^0Zci25b+5$6Ob^0JbN9M6W5!4;8,b cS9TaHc36}5ZaL9HbLa28?b{8h3ocVbR5?cYb26I8s3Jc7bHb82!19a%0k0AcJan8Qd2019c159k9md99h7#91dec(81c*9L0V5Y8:c.b~c:65c=bV8ldq7TaM9!8x8z0,4Ad5b80Wd50d0H152_dCcn040h2n1)cC5k7=bBbjbybEb9cbcdcf0kchcO5B7=0mdF15cId%52cLdQ2td)d+04d-dU3=d:d.dR1585bKdha^c+a`0w9udnc?6hdrc!5Je6aLdebZc8cvdYcyd@a)3/a+cudXbbbdbf9;d;7;150KewbqdEd}d=159 8(cqcQdk6W9Oe8ds6I4Mc2aD6vefegep528z8BdCa-7~a/cFdVa#0ea(e!ercx9-eAbI158%cNd`eJ5Ya5eNece{ebeS6Wafc_eVc`dVc|1B0$c d1e(3=ckb$eidMf9fbd@0xd5d704db0L0wfqe18acPb`e5aBe}f13CaF8{eO64aBbYeg9#e#8Ka*9@d4fdeq7|e$d@d_fNb!e.cdfubMfxcR3Ca|fAcWf(f0f+0wb4f4fJdy153y0-e%d`d(e?f!diayf%0wbPf*dpbTfEe~6WbXf;f5eWb=fic~0=fcfgcGfPgjf715c}faghflfn9d9f9h9jgv9neHcOe`3D7bb}e96}gEeRf+gEdvf63=940;9799fQ6bgofjgrgA3d0Q7z7g7u7i7r1D0A7lg*2;2,0k20g%0Q7j1Jfv5B2!0S0z0,0k0oce0i661v1x1z1B0Je@7w1Q3M1K0b0J0+0;0J3^0e4A2U0i2J0J0e0O0d1k1:0V0#bd2T0A222X3w1b2x9-0h0J2mhGbhhH1j0_0edN0V0:0_caesh72X0!0JcA1Bbn7~0J0Q160F2n0_0|0J0-1i9:1:382Q2S0#0R0m8`hs0_0k0l1m0_0n0h0#0#hY2`0J1_0-hz0JhRhHcwcd0_hW0J2f0Wh_hS1d0J4A0(2!0`2Pek0A0Jh6h|0$h~i00Vio0h3w971A0J0chH1d12hG2Xh-2v0Vbnhbg^he0M1kit2R0~0W7+1_0Ai62xhYbg9*2nix057z2RaXg!3x2+1R0/1U3=1!1$1(1*1,1.1:271^1`1|g_522G2x2z150B1-1/gS3d7t8a5{7yi`f#a_9M0!3EcUdoad3(3EgJ9Rju5!5U5:aJjzcT48f?047ZdC7)047+2y0WfMc)bDdSe;b8fSjUe2bH84h95*gBf$dkjuc-fwgG3Bj.f-jC8mjFe~j?gMehbHeY8Cgma,04j!f`fWbDaoen2*gd2tb+8Zf{cDf}gYa@7Bj,jzdmj:fF43ju8_g7eSks2r6e5Vj^8:fIkc7WgV9698gtd8gygx9ldckjjVkljsj-9tgFkqj=kTjBjyju9zkyjG6uk!c%eIkmjueMkpj{9Xj@kZk;j`kvk;j}dxfhhTe/czbg1Bemd59}eGe^kkb_kRjze|k/k_a9kub jua9k$k:f3dwkDbqi^k25Bffk7bHd|l7kPl9e4jt0ZfzldlhlCk=jHjuaFlkk_fHgbaO04aQ2we-lqlue)d8a%0Lka3*fKk48IfTgTd~04j)5|j+lajuf)lEj^b0lgl@kx6+lFf:lngNeqk~iheucBeDbl04iUkggebsbuhQe;jXm6lpmfd f~e3djjzg3l?k?g69Bk:bTlLlFgal j~gnaWl3l*kd8Xb,mEm7b:mImikOj$lzmnjDc5g4k?b|kYlI5Kl{78lFb|k{lodWm2cyd!d$lrb.gllV4TdLcpmhe=7?jYejhUbehZbil8cr040ffUd5lwb@e_k,3CjJmTmXc$mWk(nbmZ6{mUjJ5`dgfve`jDj/c/mU2qng5Xnrnj6fnueUk|c{gVggd0mDm.5kfofqftmNnpnadubQmUktmtk_dqk^m#kBlOjLlRaSmL3?m?2xmjm`m^c9igcym~l1n0lyn2n4n)e*kNnJmF8Yn-l-3Ml/lAkSeejwj;jI9zl_mUk#l|j^o8c6eVl$lUeofO9_lTn;etm e;9^m9n1m12Qn-0En{lxmOld7GjDk.ntneeQodoKnzkzmU9Ygbm0eXdIk1m;m1d@a$e,n)jZl(j#jbl+o3nojro6jIlcoJnh6JlHo?ljogmUlmgcmAk3gpfkn|m:onfXp1gXn m7fmn)nLgyfsgymlkQo/jDlDo=nxfCo^pn6XoOk%pqlNmzf=fhk5nIoXgUl%a.n5o$b?j*n9l:f,o9kVjIl^nVm#b0mwohl~f5lPf^k6n_f|l,phmPg0o7mppm4_jDmsabk:g2psp;myo~nDmBp7nHp3oppGgfgqp}p9d304pbq4d6gukM9inNoDnPpKgLnSmXgIoMnhgIpTk?qhnnk+qgncmqqjjEqlpn0!jEqoqwnCm(gPkGjkpBgep|gin8hag#1Q7hg?7riWhf1m2f7-1w2xixiL9-iyiJ34iBhiiD0_g~2Uidh+i900hjhl1.hohqhs0A1:2X2!hQ0$id220S1mjSh`cP0O8`001Bix2m0_hvhxqYr42jiE12960RhJ3oiaiciem*bdrlhXm 0J0#1z1U3^q!22iLh-rthAh70r0W0Urx0(r3r1rRrlr60Vr80*0J0q1n3V0,0;h{1:2fhs0l22h-rwrL3+h.9)0li:rHi-0@9*rqh{hIh.0W1r21id1U9*0W1:q!rOi!ip0!iUi|1KiY2f22h/1j2VhH2S2Tg;h{rDrB3w7|r~i93oi30#d0s92W000$i8rKh81O3M2~i dO1%1)1+jij61`291{2BbDjd7OjgsTqIbLjm4wjoi=jqf 7G0Ijvqi6us;qxpQ9Rs^p?eSs|dvlPjNo$jPjRqYoAm{pDl)maeEn3o,qso/s;nsjxjHthpp4_tlnYs{8mm%lPeZq0pzp~8Rn6mGkfoxkhp$nOo.mns;kop,3$tItmtL0Z8_qCs@tPqEoT5kqGgRkIfpkKqdqNn_e`s;e7qvtSocs`jyt*s}b t;tsp6gWq3qJcjp4kb8Updqbt$pIn1t)k`s?5Xs;oLt/tkk@tRu9u7qro5tH0Zo;tjtSlfucuot=tqo}o m1orpZt b%t~l#8xn7u4t(kms;plunugfDuquLust:lGt^bD8zn%uyuCk}uxoZlYl!m(o%pEn)a=tFs/8fs;l=tK43u/tNu=a{uPudpVokfXr;m,pAp5uYeke:u,mmp)tP5ukUe~s;p/cZs~vatpuQp^u}v3hUv1uzbDb+5_tbmJt8r;p%oFu.mYpMvcmYnwtnvDufvFm$3-o-u-9Ms^quu;3BvOu@vRniviudc$uSj aPaRuWu%m|k v0p~02e+gzq8keo2vxu65^vbvgv^vEtOv{vHv}c^pwqFoVe-twq8n}lZoqv4cecgv=v6piuknRndtSnXqyvItQo{vXn!w2tVaVqLvouXnEq1p2w715q7t|25u19mpfqbv?uH3Ct+vQv9eev|u^wQv wS9ukCwt8Gt9o)m(ltv2wyw6wEq5fVw(mBu wdwfp(s:3CoIuKvIubp:v`eQwUvU0woRw2pX0^uW8#kiqetGv8s^umoaxdvTwPo`m!tqo@m%pWt_nGqMw.feuBv(wzp8w+019^wDxs5BwGgwu3l.pJtgpovBv`uMw}t?povWwkpvxovmv*w;wBp q8n:wbv+xY0Q0Qtz15vst%oEv@u:w`v}pPxOxlpSwpwkl~vLv7w@p=xLxPp=wRx1mvx{ugy1ojp`gOkFtYq0wvtFi_0:i{qRg@1M040D9*1%iasDq r3382_0n13hAr3t5jT220X7$sAd/0(0Z0v1kq~9$5U1{0A0r0-0Xx)0HyX0*0n0-2v3y0(1$7C0R0*4A0e0*0V0g0Q2x0Q2_hzdN2$1U1B0Qt51e0Z0n1d0(0-0Q2r2!0O4.2Q2xrq2r0=0h1)0A7E202n8z0+iNh7yDc}4ti|g?0;0?0^04.
# Tests
(insensible à la casse)(Ctrl+I)
(Alt+: ; Ctrl pour inverser les colonnes)
(Esc)