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
defsuccesseur(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.
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 bne 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 raiseValueError.
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.
# Tests(insensible à la casse)(Ctrl+I)
(Alt+: ; Ctrl pour inverser les colonnes)
(Esc)