-- Cette fonction affiche a l'ecran le MeSsaGe de l'utilisateur, -- puis lit au clavier un nombre entier >= 0. -- Le nombre lu est le cas echeant confronte a l'intervalle -- [LUMIN, LUMAX], et la lecture iteree en cas d'erreur de saisie. -- LUMIN >=0 ==> le nombre lu doit etre >= LUMIN. -- LUMAX >=0 ==> le nombre lu doit etre <= LUMAX. -- Les 2 parametres < 0 ==> aucune autre contrainte que: nb. >= 0. -- Si les 2 param. sont >=0 mais LUMIN > LUMAX, ils sont IGNORES. FUNCTION READ_INT (MSG: STRING; LUMIN, LUMAX: INTEGER := -1) RETURN Natural; WITH Text_io; USE Text_io; FUNCTION READ_INT (MSG: STRING; LUMIN, LUMAX: INTEGER := -1) RETURN Natural IS PACKAGE Int_Io IS NEW INTEGER_IO (INTEGER); USE Int_Io; Resultat, LUMINat: INTEGER; PMIN, PMAX, OK: Boolean; BEGIN -- corps de la  fonction: PMIN:= LUMIN >= 0; PMAX:= LUMAX >= 0; IF (PMIN AND PMAX) THEN PMIN := LUMIN <= LUMAX; PMAX := PMIN; END IF; IF PMIN THEN -- LUMINAT = valeur minimale du nombre lu. LUMINAT:= LUMIN; ELSE LUMINAT:= 0; END IF; PUT ("*** L'entier demande doit etre >= "); PUT (LUMINAT,1); IF (PMAX) THEN PUT (" et <= "); PUT (LUMAX,1); END IF; NEW_LINE; PUT (MSG & " ? "); LOOP GET (Resultat); OK := Resultat >= LUMINAT; IF PMAX THEN OK := OK AND Resultat <= LUMAX; END IF; EXIT WHEN OK; PUT ("Contrainte(s) non satisfaite(s): recommencez. ? "); END LOOP; RETURN Resultat; END READ_INT;