with Ada.Text_Io, Ada.Integer_Text_Io; use Ada.Text_Io, Ada.Integer_Text_Io; -- Affichage d'un nombre en puissance de 2 procedure Ex03a is -- Recherche de la puissance de 2 maximale contenue dans N -- retourne la puissance max -- fonction donnée en exemple n'est pas demandé dans l'exercice ! function Max_Puissance_2(N : Natural) return Natural is Res : Natural := 0; begin while (N >= 2 ** Res) loop Res := Res + 1; end loop; return Res - 1; end; Nb : Natural; Max_P2 : Integer; First : Boolean := True; begin -- saisie Put("Veuillez rentrer un nombre > 0 : "); Get(Nb); -- Algo + Affichage Max_P2 := Max_Puissance_2(Nb); Put(Nb, 0); Put(" = "); while Max_P2 >= 0 loop if (Nb >= 2 ** Max_P2) then -- Le si sert à savoir si nous devons afficher le symbole + if (not First) then Put(" + "); else First := False; end if; Put("2 ^ "); Put(Max_P2, 0); -- Nous retranchons la puissance de 2 Nb := Nb - 2 ** Max_P2; end if; Max_P2 := Max_P2 - 1; end loop; end;