Aller au contenu

Écrire les entiers sans les chiffres⚓︎

Supposons que le clavier devant nous soit abîmé : aucune des touches permettant de saisir des chiffres ne fonctionne ! Comment faire pour représenter les entiers ? Pour les additionner et les multiplier ? Les soustraire ?

On choisit tout d'abord de représenter zéro par un tuple vide ZERO = tuple().

On fournit de plus la fonction successeur qui prend la représentation d'un entier \(n\) en argument et renvoie celle de son successeur \(n+1\) :

🐍 Script Python
def successeur(n):
    return (n,)

Remarque

L'appel successeur(ZERO) renvoie ((),) qui représente donc le nombre UN.

On ne demande pas de travailler avec ces notations sous forme de tuples.

Avec ces deux éléments, valeur de départ ZERO et fonction successeur, il est possible de représenter tous les entiers.

🐍 Console Python
>>> ZERO = tuple()
>>> UN     = successeur(ZERO)
>>> DEUX   = successeur(UN)
>>> TROIS  = successeur(DEUX)
>>> QUATRE = successeur(TROIS)
>>> CINQ   = successeur(QUATRE)
>>> SIX    = successeur(CINQ)
>>> SEPT   = successeur(SIX)
>>> HUIT   = successeur(SEPT)
Remarque

La fonction successeur et les « entiers » définis ci-dessus sont directement accessibles dans le corps du programme. Il est inutile de les retaper.

Vous devez compléter trois fonctions addition, multiplication et soustraction ci-dessous prenant chacune en arguments les représentations a et b de deux entiers et renvoyant respectivement leur somme (a plus b), leur produit (a fois b) et leur différence (a moins b).

Les valeurs de a et b ne devront pas être modifiées lors du traitement.

Les calculs sur les entiers ne seront effectués qu'à l'aide de la fonction successeur et des fonctions codées précédemment.

Attention

Si b est plus grand que a, la différence « a moins b » n'est pas possible dans l'ensemble des entiers positifs.

Dans ce cas, la fonction soustraction lèvera une erreur liée à une valeur incorrecte. Pour ce faire, on utilisera l'instruction raise ValueError.

Exemples
>>> addition(UN, UN) == DEUX
True
>>> addition(TROIS, DEUX) == CINQ
True
>>> multiplication(ZERO, CINQ) == ZERO
True
>>> multiplication(DEUX, TROIS) == SIX
True
>>> soustraction(CINQ, TROIS) == DEUX
True
###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
Entrer ou sortir du mode "deux colonnes"
(Alt+: ; Ctrl pour inverser les colonnes)
Entrer ou sortir du mode "plein écran"
(Esc)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier
Évaluations restantes : 10/10
.128013s3_8ufvIy n7ZaS1me(P24V:CtwiDhE*)6Oo;bcdUg/TX0lqAp!Q.r-,=+Nzk95Rxé050O0s0A0o0C0V0b0k0N0V0o0b0b0)010A0C0Y010406050b0f0r0r0o0$0j040p0K0V0f160K0l0k020o0r0Y0L0k0:0s1g0$0W0f0s0b050R1d1f1h1j1b0Y041H1O051R0R1R1T1O1b0O0C0h0~1012140E0C0Q0E0V1+0E0A19050_0M0V0s1$1113011*1,1.1,0A1@1_1=0A0M0K0O1j1?0$1P0A0E0~1m0b0Y0o0l140v011{1(010g0{0s0l1u0s1=2j2l2q1}2t1_2w0r2y040a0k0u0$0K0Y0K0b0C1p1r0@2h0$0$0s0N2T1H2A0l1P0R2f2)0A2d2c2e0O2C141.0l2v2Q1=1Z1#0 1|2?0C2^0l291!1=0Y2Y1P2%2)3a1c2k1r2~2r330$1g0V190k0q2$3e1a3d2B3g1}3i3k3m0v3p2l3r2%2=013w0o3l040k0c3A2(1b3D3u143G3I0k0w3M3C3e3E3S3m0/3W3O3Y3Q3F0K3j3H3m0I3%3s3f1%3v3,3x3J0m3;3P3@3R3_3.3J0e3}3)3 3+3-3T0.453t473!040q0U4c3?2 483`0q3o1I3q3(4d4l4f0q3z4q3B4s4k3h413I0q3L4y3N3=3Z4D190q3V4H3X4t4C494M3$4P4A4K4T4g3:4W4J3*4v3|4$3~4u4L4g444+464-4Z0q4b4;4R3^4Z0v4i4`4B4|3`0v4p3a4X4(4.0v4x564%4e594G5c4,4S534O5h4=5j420v4V5m4{404}4#5s515u534*5x4Y534:5C584}4_5G5e4Z0c4 5K4?3`0c554r5d5Q420c5b5U5i525X5g5!5n5$3I0c5l5)5t4m5X5r5/5y5;5,5w5@5D5X5B5|5H5R5F605L5R5J645W3I0w5O685o6a5T4z5V6e190w5Z6h5#5z420w5(6n5*6p6a5.3B1Q381H2|2,0O2:3E0N292I0?1!1P370s393q3W056H0@6P5:0-190@0g6R6o010B3m6#6u3F0g190o0O1Z2#4P6i1}18040t6*5:0l6.6|5^6_0(3W0k6@3R190M703E6_0H0y3%0k7g756$6~040^0o0Y1F7476010K190)7q7j190n0F0:0J7f7h7r7k0b0K1f0s7w6+7t047v4P7i6+7k0o7D7g7r6X040B1*1_7L6}197m7o1G7Q7r7N0Z7P3a7R7(04796?6$6_7e4W7h7 7?5^7k7*7p7-6$7N7;3q813Z191d0N0N1F0b0s0f0$7a3*6_6{7`7S7)0_7+8m477c7V807F8d7I2H7%5^888E8c048e8g128j8l8q5:8o8v4u8B7J8S2r8x7~7E6$7Y2Y0A8k0l8H4(8U8D4W0657477Y6Z8W1}6(3J8^3R6-040r0f0V160Y1.0N0o6=3c7{198p998r047U8P711973869e7_9d8Q197d8y8A7l8t857=7.7u8+4e7y7A7C8Z7W7x0437290f2S9A4l8G9l7@7z7B9s8#197!2u9N3h8s7n9w8a9y047:9Z3v788|017|8y7 9t847,9x879z9Q828d0f8f8h8N9/8R9h8I9^a49q9=8!9e9J0O9L0A9,149P9`9e6/6;0C1qa96`9/7kaeagar9kal7@9g9o9i040H9U6+8$0^8)ai3F19av9M8/8;4l8?0s6!a63*8`75aW4e8~7H0f0b2-0o2!ap8*a!4la5aC8IaB6Q9a04ay9(9H9na^6+7c7}569?9H1Z0g0g0s2Y0l8gaLaka|9e9S9Eb3ac6W9W7#7K9}8Ia~3B8b3*7/89bs9ta@6ya_b24r80bk5^7Y0CaVaz9~04b6b8babcbpbu7ubw2(bt9B9farbC4zbEbE7X190$0`8iaL2^190x3H1E0F2X3,ab9G9ebNb92vbQbK3Ebebx9H8Ka28kar9ca 7@b|bPboa=8naa9F8za}bd9|c08,8Ja08L8ic7a/8X9bat9.cu6^chbjb`bl048%aKbRbXccb~ce4r8:7r0N0q19030k0S1F0A9_6d1}cQcS0k0f1r0*c%1r0)0)0k0@0f0;4j3E7Y1|b9ahcI8T9f6:2Sa-c8cx040P0+axb-19d5araFc|2r88bU8{9H0D0F0P0Tc?3*c#04cT2-0K0C0}c*0N310W0kc-0k0Eaw50c@6.8M0$c{cnbXand0aqcz14a;cabL0S7B0i0pd7dd9-04djdldbcl7OdgbWc}0z0i0+0!dn47dpcT0,0=2N0k0G0~dydAc.d`2Nd?aSdH8idJd88 91939597d1dQ9:cweh7kbhdZdLd.d:d=eh8YeodebTeaemdFdocRdqc/8j0;d}0kdsdue10k2Rc=ez8=e7c`ea909217ee98dT7bejcfbXd%dmes9jeadV0JdXd)d!ajewe:aM1k0ie(5P2rd^d 0ldz0%eH2NeJeKc:eNe{1}c^dIdKbf7@a%a)b*a,dPe#a:e!eYcod/d;enfddUdWdYe)aEd*c-eae%e5e|eBdrf30}f1dxe 0k0%020Q0A1x0J0Yd{ef1q0k0C1v2Q2R1^cM6tcE2-0jbZaGfe0Ka(a*fia.fkcvasek19fBfwa{c39efperf?cAfxeOe67l0;8g0Yfcf~6}2Ib:1n0sb?2N8Og2dR19b!3Nb4aHaN1|3;0R6T6O6zgx0R6C1H0A6EgC2.2*282a2,0of#2)6C1N6V5^2Y0r0d0g0o0-0s0d0E0c191z1B1D1F0kgo2)1X1S040J1r6/7n0A1`0O2l0}8g0A0k0s0;b9dx8gc+1`2kdJ0Cg_g*050odC2Y0g1)230Y0b0y0R0R0g0$0#0B0C0-170s1Z0o0#3,0Q0Rhrht0R0X0;ap2H0b0d0@0d0u0s2l7N051A9fhG7Ig*2VhNhP1HhS1H0o3J7o3j0^0_0lg~2V6H0lfg9L2Y0k1_0}2v16b90}2w8(2Y0|0k0U0(3ni50vi50#ia0k0#1Q3r1Og;0khd9J2P0b0=c/g{h^1`6H2X1+in0@0}7H1n2T0}2SfT160h1F0#0k0i0Vg a)iia(2R0kilf!1_c/001o0{dub9eD0}0g1qf;0}2l2^h10}0$0=0N8k2RiF0}7}g.2|3E1 1-1/1;gQ3E2E2v2x192K0p0N0$17g~0u0j2ffj6Q6NgQ3b6Qgwj03*aTbJfn47aYat8~dNeXbAb0fmjxaAfrgcbLbr2(7rb1f,bG6YaU9/jsekjuc 2T0d2Y0Nd2f_8J8Cf$jGa_f}bV9@9vcYjAaD9rcigqcEbIeaa8e?dfeajFjm8wgnb_cjgrcFaJ0$f=fs8I7H8Vj/bFdG7l0|j!j|fl04g,06b$k0cEcGk4eajva-jT2ZjWcCklkmbLc58Mctgleif^kD7GjZdbj%1akxb$9tkAcsgkjqkhc9j,a7j*e/kwkMcDj-3%kkkbjnb)k3k5jDa?jRksjUkvkS9!bYf|ex9DkYcNaR2rjojN6)jP19eTed0C96jwj#jykFk@d#bzlb9pa`j`dbkjj:jKbMjMehjOkG8~l6eVl8fU0lktjVfwkUlhbLaOgblEeZlje?83kXfwj.kZk)eP04j=lL9#8uj^e=eud#j{jHj~kab%9Vk2i0k-j(9HlGj b(kdb,fwlmk!l?kol.dh9elv94lxjSk=lCj klbyk:jfkVcgldmcbXl;k`lVk_kD7ckKk(k!lRc}kPa3m6jXj@mlcBbDmpmqf@dc56mod-l0k+l-eSeclwl9k;kumukG9C9Tmil!7704eymxg4mEk f9jLjpmf4llsle8}8Bf/fhlakgf@lDm?lfjCl/9mlljJkc8@lrl3ltm/fga+m4mPmZm^9tl$j$eacKbbkfl%aEl`l*k1lUmVe@ngb k6bSd+kqf+l)kykcb*iYb-geb;ghb@kRb#kNl+0s1.m)m|7@j{mG1}j_mjlgm_gmkim7mBm%l,cHnp7knrkfmFlnkcnMl^mZnlkxl|k,eafff:n8lBnan!nmfecqc6nIlImdnbcklOmnmAn#mWmskCm-kEo8b{bIbOcLk}nJkMnjmDmzk#nAn_mjn{m;mOn~ohdSm*k^ndlckKnSmWmYoCmy6hgv6Ig-6AgA6L1bgA7m0{0b04.
Aide pour addition

Additionner a et b c'est déterminer le b-ième successeur de a. On pourra utiliser une variable temporaire initialisée à ZERO (et pas au nombre 0 !) afin de « compter » le nombre de successeurs calculés.

Aide pour multiplication

Multiplier a et b c'est additionner b fois a à lui-même.

Aide pour soustraction

Soustraire b à a c'est déterminer l'« entier » qu'il faut ajouter à b pour obtenir a. On pourra donc calculer les différents successeurs de b jusqu'à obtenir a. Il faudra prendre soin de garder trace du « nombre » de successeurs calculés.

Un test astucieux sur la valeur de ce « nombre » permet de repérer les soustractions impossibles.