Alors voilà, je me suis lancé le petit défis en C# (mais il peut être fait avec n'importe quel langage) :
Réaliser une classe qui permet de recréer l'ensemble des opérateurs, mais en utilisant le moins d'opérateur possibles !
Exemple pour bien me faire comprendre :
publicstaticclassOperateur{publicstaticintsoutraction(int a,int b){return a - b;}publicstaticintaddition(int a,int b){return a -(-b);}}
On a recréer l'opérateur + et -, mais en utilisant uniquement un seul opérateur ! (ici l'opérateur -).
La classe devra ainsi permettre de recréer tous les opérateurs suivant:
+, -, *, /, %, >, <, ~, |, &, ^, >>, <<, ==, !=, &&, ||, !
Tous les opérateur "redondant" ne sont pas nécessaire, comme :
>=, <=, +=, -=, *=, ++, --, etc...
Le seul opérateur ne comptant pas est celui d'affectation =.
Petites règles complémentaires :
Les opérateurs ne sont à recréer que pour les bool et les int, et doivent gérer les cas où ceux-ci sont négatifs.
Les opérateurs recréés doivent avoir EXACTEMENT le même comportement que s'ils étaient simplement utilisés.
L'utilisation d'une méthode externe à la classe est interdit, même avec les classe de base comme string ou int.
(Exemple, pas le droit de faire string.Concat(...))
En revanche, tous les types de bases sont autorisées (int, string, double, char, bool, etc...), ainsi que toutes les instructions (if/else, switch, for, do/while, try/catch, etc...)
Alors voilà, après un peu de temps, j'ai réussi à recréer tous les opérateurs en en utilisant qu'un seul !
(Je met une balise spoiler au cas-où vous voudriez faire l’exercice par vous même)
Ma question est donc la suivante, pensez vous qu'il est possible de réussir ce défi en utilisant un autre opérateur ?
Car j'ai essayez, mais à chaque fois, j'ai l'impression de tomber dans un cul de sac :/
Merci d'avance à tous ceux qui essayeront de répondre à la question !
Et bonne chance à ceux qui essayeront le défi ! :)
A voir également:
Défi : recréer les opérateurs de base (+, -, *, %, ...)
yg_be
Messages postés23482Date d'inscriptionlundi 9 juin 2008StatutContributeurDernière intervention 6 mars 2025Ambassadeur1 568 28 juil. 2021 à 14:32
bonjour,
tu te simplifies fortement la vie en considérant que la division ne retourne que la partie entière du résultat.
je pense qu'il est utile de le préciser dans l'énoncé.
yg_be
Messages postés23482Date d'inscriptionlundi 9 juin 2008StatutContributeurDernière intervention 6 mars 20251 568 28 juil. 2021 à 14:40
par ailleurs, je pense que ta solution ne tient pas compte des différentes représentations utilisées pour les nombres signés.
Bonjour, merci pour ta réponse !
Désolé je n'ai peut être pas assez mis l'accent dessus, mais il s'agit de ne gérer que les int, donc pour le C#, que des entiers de 32 bits, avec le 32e bit représentant le signe ! :)
28 juil. 2021 à 14:40