MATH_Conversion    [Utilitaires]

Par Teddy Linet (Math4D v2)
Nouvelle recherche
Si (Faux)
   ` MATH_Conversion [ Teddy LINET 02/03]
   `-------------------------------------------------
   ` ATTENTION : nécessite MATH_Unites
   `-------------------------------------------------
   ` RAPPELS MATHEMATIQUES :
   ` Conversion des unités
   `-------------------------------------------------
   ` MATH_Conversion ($vValeur_F;$vUniteDepart_T;$vUniteArrivée_T)-->Réel
   ` $vValeur_F (Reel) valeur à convertir
   ` $vUniteDepart_T (Reel)  Unité de la valeur à convertir
   ` $vUniteArrivée_T (Reel)  Unité souhaitée
   ` ---------------------------------------------
   ` MATHERROR
   ` 0 : Pas d'erreur
   ` -1 : Unités incompatibles
   ` -2 : Une unitée est inconnue
Fin de si 

C_REEL($1;$vValeur_F;$vValeurUnité_F;$vValeurZero_F)
C_TEXTE($2;$vUniteDepart_T;$3;$vUniteArrivée_T)
C_TEXTE($4;$vUniteReferenceDepart_T;$vUniteEtudiee_T;$vUniteReference_T)
C_ENTIER LONG(MATHERROR)
$vValeur_F:=$1
$vUniteDepart_T:=$2
$vUniteArrivée_T:=$3
$vValeurUnité_F:=0
$vValeurZero_F:=0
Si (($vUniteDepart_T#"UI") | ($vUniteArrivée_T#"UI"))  ` Si UI et UI => on ne fait rien
 
 Au cas ou 
  : ($vUniteDepart_T="UI")
  $vUniteDepart_T:=MATH_Unites (10;$vUniteArrivée_T)  ` constante Unite_NomUI
  : ($vUniteArrivée_T="UI")
  $vUniteArrivée_T:=MATH_Unites (10;$vUniteDepart_T)  ` constante Unite_NomUI
 Fin de cas 
 
 Si (Nombre de parametres>3)  ` Methode récursive
  $vUniteReferenceDepart_T:=$4
  $vUniteEtudiee_T:=$vUniteArrivée_T
 Sinon   ` Premier appel => MATHERROR à 0
  $vUniteReferenceDepart_T:=""
  $vUniteEtudiee_T:=$vUniteDepart_T
  MATHERROR:=0
 Fin de si 
 
 $vValeurUnité_F:=Num(MATH_Unites (4;$vUniteEtudiee_T))  ` Valeur conversion
 $vUniteReference_T:=MATH_Unites (3;$vUniteEtudiee_T)  ` Unité référence
 $vValeurZero_F:=Num(MATH_Unites (5;$vUniteEtudiee_T))  ` Valeur zéro
 
 Si (MATHERROR>=0)
  Si ($vUniteReferenceDepart_T="")  ` Premier appel
   $vValeur_F:=$vValeurZero_F+($vValeur_F*$vValeurUnité_F)  ` On transforme en valeur internatio
   $vValeur_F:=MATH_Conversion ($vValeur_F;$vUniteDepart_T;$vUniteArrivée_T;$vUniteReference_T)
  Sinon   ` Deuxième appel (recursif)
   Si ($vUniteReferenceDepart_T=$vUniteReference_T)  ` Caramba, pas les mêmes unités
    $vValeur_F:=($vValeur_F-$vValeurZero_F)/$vValeurUnité_F  ` On transforme dans l'unité
   Sinon   ` Pas la même unité de référence => MATHERROR
    MATHERROR:=-1
    $vValeur_F:=0
   Fin de si 
  Fin de si 
 Sinon 
  $vValeur_F:=0
 Fin de si 
Fin de si 
$0:=$vValeur_F