Nyio
Messages postés8Date d'inscriptionmercredi 21 avril 2010StatutMembreDernière intervention13 juillet 2010
-
30 juin 2010 à 09:55
Nyio
Messages postés8Date d'inscriptionmercredi 21 avril 2010StatutMembreDernière intervention13 juillet 2010
-
30 juin 2010 à 13:43
Bonjour à tous,
Je travail actuellement sous Delphi 5 et deux problèmes me bloquent dans l'avancement de mon projet :
Problème 1 :
Je veux initialiser les variables d'une procédure mais le compilateur ne compile pas ces lignes et plus tard il ne compile pas une autre ligne de mon code :
procedure TCadreResult.Calcul(Sender: TObject);
var min, Div1, Div2, A : double;
i,j : integer;
begin
Div2 := 0; // non compilé
Div1 := 0; // non compilé
// code sans problèmes de compilation
Div1 := Div1 * 1000; // ligne compilée
Div2 := Div2 * 1000; // ligne non compilée
end;
Si quelqu'un a une solution je suis preneur.
Problème 2 :
J'utilise une fonction qui prend un double en paramètre et qui me renvois un double. Pour choisir le double renvoyé j'utilise une structure utilisant des if else if.
function TCadreResult.Subdivision( SubDiv : double) : double;
begin
if (SubDiv = 0.010) then result := 0.006
else if (SubDiv = 0.016) then result := 0.010
else if (SubDiv = 0.025) then result := 0.016
else if (SubDiv = 0.040) then result := 0.025
else if (SubDiv = 0.063) then result := 0.040
else if (SubDiv = 0.10) then result := 0.063
else if (SubDiv = 0.16) then result := 0.10
else if (SubDiv = 0.25) then result := 0.16
else if (SubDiv = 0.40) then result := 0.25
else if (SubDiv = 0.63) then result := 0.40
else if (SubDiv = 1.0) then result := 0.63
else if (SubDiv = 1.6) then result := 1.0
else if (SubDiv = 2.5) then result := 1.6
else if (SubDiv = 4.0) then result := 2.5;
end;
Pas de problème de fonctionnement si SubDiv = 1 ou 4 (donc tout les nombres entiers à mon avis) mais pas dans les autres cas.
Si quelqu'un peu m'expliquer le problème que j'évite de multiplier SubDiv par 1000 pour en faire un entier et pouvoir utiliser mes if.
Nyio
Messages postés8Date d'inscriptionmercredi 21 avril 2010StatutMembreDernière intervention13 juillet 2010 30 juin 2010 à 13:43
J'ai résolu mes deux problèmes.
Pour le 1, je n'utilisait pas encore ma variable Div2 donc le compilateur l'ignorait, tout simplement.
Pour le 2, j'ai regardé vos liens qui sont très utiles mais j'utilise des valeurs qui seront toujours les mêmes donc j'ai trouvé une méthode plus claire que voici :
function Subdivision(const SubDiv: Double): Double;
var
Value: Integer;
begin
Value := Trunc(SubDiv * 1000);
case Value of
10: Result := 0.006;
16: Result := 0.010;
25: Result := 0.016;
40: Result := 0.025;
63: Result := 0.040;
100: Result := 0.063;
160: Result := 0.10;
250: Result := 0.16;
400: Result := 0.25;
630: Result := 0.40;
1000: Result := 0.63;
1600: Result := 1.0;
2500: Result := 1.6;
4000: Result := 2.5;
else
raise Exception.CreateFmt('Valeur %f inattendue.', [SubDiv]);
end;
end;