Comment restreindre une variable ? [Résolu]

Messages postés
459
Date d'inscription
lundi 19 avril 2004
Statut
Membre
Dernière intervention
8 avril 2009
- - Dernière réponse : DeltaFX
Messages postés
459
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
Afficher la suite 

4 réponses

Meilleure réponse
Messages postés
4200
Date d'inscription
samedi 16 octobre 2004
Statut
Modérateur
Dernière intervention
2 janvier 2019
26
3
Merci
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>

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 129 internautes nous ont dit merci ce mois-ci

Commenter la réponse de f0xi
Messages postés
459
Date d'inscription
lundi 19 avril 2004
Statut
Membre
Dernière intervention
8 avril 2009
1
0
Merci
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 ;)
Commenter la réponse de DeltaFX
Messages postés
4200
Date d'inscription
samedi 16 octobre 2004
Statut
Modérateur
Dernière intervention
2 janvier 2019
26
0
Merci
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>
Commenter la réponse de f0xi
Messages postés
459
Date d'inscription
lundi 19 avril 2004
Statut
Membre
Dernière intervention
8 avril 2009
1
0
Merci
Les type correspondent pil poilà mon besoin. Merci.
Commenter la réponse de DeltaFX