[Delphi 5] Problème de compilation et de boucle if [Résolu]

Nyio 8 Messages postés mercredi 21 avril 2010Date d'inscription 13 juillet 2010 Dernière intervention - 30 juin 2010 à 09:55 - Dernière réponse : Nyio 8 Messages postés mercredi 21 avril 2010Date d'inscription 13 juillet 2010 Dernière intervention
- 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.

Merci d'avance

Nyio
Afficher la suite 

Votre réponse

3 réponses

Meilleure réponse
cs_47 197 Messages postés mardi 20 janvier 2004Date d'inscription 20 février 2013 Dernière intervention - 30 juin 2010 à 11:34
3
Merci
Bonjour,

pour le probléme 2, jette un oeil sur ce lien.

bonne journée

Merci cs_47 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 92 internautes ce mois-ci

Commenter la réponse de cs_47
cs_yanb 260 Messages postés lundi 27 octobre 2003Date d'inscription 4 mars 2016 Dernière intervention - 30 juin 2010 à 11:51
Commenter la réponse de cs_yanb
Nyio 8 Messages postés mercredi 21 avril 2010Date d'inscription 13 juillet 2010 Dernière intervention - 30 juin 2010 à 13:43
0
Merci
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;
Commenter la réponse de Nyio

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.