Hello!

Inspiré(e) de prendre part à la discussion ? Ou de poser une question ou demander de l’aide ?

Alors bienvenues dans les grands sujets des forums de La Bulle : m’inscrire.

Cette partie du forum n’est pas compatible avec les bloqueurs publicitaires

Félicitations à vous, de préférer les accès payants plutôt que la gratuité par la publicité, c’est honnorable et cohérent de votre part. Malheureusement, l’accès payant par micropaiement (qui serait d’environ 1 cent pour 20 pages consultées) n’est pour l’instant pas encore mis en place, et l’accès gratuit sans publicité, est réservé aux membres actif(ve)s du forum. En attendant, si vous souhaitez poursuivre votre visite chez nous, vous pouvez ajouter le site à votre liste blanche, ou encore mieux, désactiver le bloqueur partout. Pour ajouter le site à votre liste blanche, pour Firefox (similaire pour les autres navigateurs), rendez‑vous en bas à gauche de la fenêtre de votre navigateur, et cliquez sur le menu comme dans l’exemple de l’image ci‑dessous, puis rechargez la page, en appuyant sur F5.

Type modulo et opérateur d’exponentiation : petit piège
Auteur Message
Administrateur
Avatar de l’utilisateur
  • Genre : Télétubbie
  • Messages : 22205
Mer 8 Fév 2012 10:49
Message Type modulo et opérateur d’exponentiation : petit piège
Où nous allons découvrir comment une spécificité de l’opérateur d’exponentiation, “**”, peut réserver une mauvaise surprise lorsqu’un type modulo s’invite sournoisement dans l’expression. Les règles de l’algèbre ne semblent plus avoir cours, découvrons comment et pourquoi…

Soit l’application Ada suivante :

Source Ada : 

with Ada.Text_IO;
use Ada.Text_IO;

procedure Trap is

type Modular_Type is mod 256;
subtype Index_Type is Natural range 1 .. 3;

M : Modular_Type := 255;
I : Index_Type := 3;

begin
-- 10 ^ 3 = 1000.
-- What will prints the below statement?

if M < 10 ** I then
Put_Line ("`M` is less than `10 ** I`.");
else
Put_Line ("`M` is greater‑than or equal‑to `10 ** I`.");
end if;

end Trap;


Pouvez‑vous, et avant même de vous jetez sur votre compilateur et d’exécuter l’application, prédire son résultat ?

Jouez le jeux, devinez, puis compilez l’application avant de la tester.

La réponse dans le spoiler ci‑dessous (cliquez le pour l’afficher)

Spoiler : cliquez sur le cadre pour l'afficher


Reprenez le programme précédent, en remplaçant “10 ** I” par “256 ** I”. Que constatez‑vous ?

Spoiler : cliquez sur le cadre pour l'afficher


Reprenez le programme initial, en remplaçant “10 ** I” par “Natural'Pos (10 ** I)”. Que constatez‑vous ?

Spoiler : cliquez sur le cadre pour l'afficher

Image
Hibou57

« La perversion de la cité commence par la fraude des mots » [Platon]
Profil Site Internet
cron