Comment restreindre une variable ?

Résolu
DeltaFX Messages postés 449 Date d'inscription lundi 19 avril 2004 Statut Membre Dernière intervention 8 avril 2009 - 6 mars 2006 à 23:56
DeltaFX Messages postés 449 Date d'inscription lundi 19 avril 2004 Statut Membre Dernière intervention 8 avril 2009 - 7 mars 2006 à 18:51
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

f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 35
7 mars 2006 à 00:04
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>
3
DeltaFX Messages postés 449 Date d'inscription lundi 19 avril 2004 Statut Membre Dernière intervention 8 avril 2009 2
7 mars 2006 à 11:26
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 ;)
0
f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 35
7 mars 2006 à 16:31
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>
0
DeltaFX Messages postés 449 Date d'inscription lundi 19 avril 2004 Statut Membre Dernière intervention 8 avril 2009 2
7 mars 2006 à 18:51
Les type correspondent pil poilà mon besoin. Merci.
0
Rejoignez-nous