Comment restreindre une variable ? [Résolu]

Signaler
Messages postés
459
Date d'inscription
lundi 19 avril 2004
Statut
Membre
Dernière intervention
8 avril 2009
-
Messages postés
459
Date d'inscription
lundi 19 avril 2004
Statut
Membre
Dernière intervention
8 avril 2009
-
Une question saugrenue : est il possible de déclarer des variables en limitant leur domaine de valeur (un peu comme de l'ADA) , mettons "a: integer ne pouvant prendre que les valeurs de 0 à 3". (c'est qu'un exemple) sans avoir a tester à la main que a est bien dans [0,3] .

Si je suis pas clair imaginez ce qui se passe si on a

var x:byte;

et plus loin

x:=650; ca coince forcement puisque 650 > 255

C'est simuler ce genre de comportement qui m'interresse, j'essaie de faire une appli bien blindée

4 réponses

Messages postés
4200
Date d'inscription
samedi 16 octobre 2004
Statut
Modérateur
Dernière intervention
13 juin 2020
30
tu peu créer tes types :

btype = 0..500;
stype = string[10];
itype = -100..100000;

mais dans le cas que tu presente il faut ecrire une fonction bien utile de C++ non presente dans delphi, a savoir Clamp :

function Clamp(const Val,AMin,AMax : integer) : integer;
begin
if Val < AMin then result := AMin
else
if Val > AMax then result := AMax
else
result := Val;
end;

utilisation :

begin
x := clamp(valeur,0,255);
end;

sinon on peu s'accomoder des fonctions Min et Max de l'unité Math :

x := Max(Min(valeur, 255), 0);

ce qui empecheras les debordements de type et les rebouclages de valeurs.

<hr size="2" width="100%">La theorie c'est quand on sait tout, mais que rien ne fonctionne.
La pratique c'est quand tout fonctionne, mais que personne ne sait pourquoi.
<hr>
Messages postés
459
Date d'inscription
lundi 19 avril 2004
Statut
Membre
Dernière intervention
8 avril 2009
1
Merci pour ces infos.Donc Clamp s'assure que la valeur est dans l'intervalle, quitte a forcer cette valeur dans cet intervalle. Ca m'interresse moyen, dans le sens ou je préfère que ca plante plutot que d'avoir des valeurs qui changent en douce... Je vais regarder les type ;)
Messages postés
4200
Date d'inscription
samedi 16 octobre 2004
Statut
Modérateur
Dernière intervention
13 juin 2020
30
oui alors en effet, les astuces que je te donne sont la pour limiter les valeurs dans un interval precis, ce qui peu etre trés utile dans beaucoup de cas.

maintenant tu peu toujours utiliser la fonction InRange de l'unité Math qui renvois true si la valeur est dans un interval precis ou false si elle est en dehors de cet interval :

if inrange(valeur, 0, 255) then X := valeur else ShowMessage('valeur est hors de l''interval');

<hr size="2" width="100%">La theorie c'est quand on sait tout, mais que rien ne fonctionne.
La pratique c'est quand tout fonctionne, mais que personne ne sait pourquoi.
<hr>
Messages postés
459
Date d'inscription
lundi 19 avril 2004
Statut
Membre
Dernière intervention
8 avril 2009
1
Les type correspondent pil poilà mon besoin. Merci.