DeltaFX
Messages postés449Date d'inscriptionlundi 19 avril 2004StatutMembreDernière intervention 8 avril 2009
-
6 mars 2006 à 23:56
DeltaFX
Messages postés449Date d'inscriptionlundi 19 avril 2004StatutMembreDerniè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
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>
DeltaFX
Messages postés449Date d'inscriptionlundi 19 avril 2004StatutMembreDernière intervention 8 avril 20092 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 ;)
f0xi
Messages postés4205Date d'inscriptionsamedi 16 octobre 2004StatutModérateurDernière intervention12 mars 202235 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>