Strtofloat en pascal

Résolu
Debutant en webmastering Messages postés 444 Statut Membre -  
Debutant en webmastering Messages postés 444 Statut Membre -
Bonjour,

je débute avec le langage de programmation et je voudrais savoir si à partir du code qui suit, je peux convertir ma chaîne en Extended
program SaisieUser;

var i : integer;
var test : boolean;
var chaine : string;
var chainefloated : Extended;

//Commentée car msg erreur : "Paramater S not used"
//function StrToFloat(const S: string):Extended;

//Vérifie nombre compis entre 0.01 et 1milliard-0.01
procedure verifsaisie(var ch: string);
 begin
    repeat
     writeln('Veuillez renseigner un montant d''Euro valide');
     writeln('PS : le séparateur entre Euro et centimes est le . ');
     readln(ch);
      for i:=1 to length(ch) do
       begin
       if ((length(ch) > 0) and (length (ch) <= 12)) then
        if ((ch[i] in ['0'..'9']) or (ch[i] = '.')) then
            if (ch[i] = '.') then
                if (length(ch) <> i) and (((length(ch) - i) = 1) or ((length(ch) - i) = 2)) then
                    if (not(ch[i-1] = '0') and (ch[i+1] = '0') and (ch[i+2] = '0')) then test:=true
        else test:=false;
       end;
    until test=true;
 end;

begin
verifsaisie(chaine);
write(chaine);
readln();
//chainefloated := StrToFloat(chaine);
end.



Cordialement,  Debutant en webmastering
EDIT : Ajout des balises de code (la coloration syntaxique).
Explications disponibles ici : ICI

Merci d'y penser dans tes prochains messages.

1 réponse

  1. Profil bloqué
     
    program Project2;
    
    var S : String[12];
    L, I, DecimalWidth : Integer;
    X, Montant: Real;
    
    begin
    
    DecimalSeparator := '.';
    DecimalWidth := 2; // Nombre de chiffre aprés la virgule
    Write('Montant en Euro : ');
    ReadLn(S);
    L := Length(S);
    X := 0.00;
    for I := 1 to L do begin
    if S[I] in['0' .. '9', '.'] then
    if Pos('.', S) = L - DecimalWidth then
    X := StrToFloat(S); { La saisie est valide, sinon X garde
    sa valeur initiale }
    end;
    
    WriteLn(X);
    
    { Sinon la procédure prédéfinie Val(S, V, Code) s'en charge }
    
    repeat
    Write('Montant en Euro : ');
    ReadLn(S);
    Val(S, Montant, I);  { Si S forme un flottant valide, S est copiée dans Montant,
    sinon I indique l'emplacement de l'erreur dans les rangs de S }
    if I <> 0 then WriteLn('Erreur de saisie !. Recommencez');
    until I = 0;
    WriteLn(Montant);
    
    ReadLn;
      { TODO -oUser -cConsole Main : placez le code ici }
    end.
    1
    1. Debutant en webmastering Messages postés 444 Statut Membre
       
      Passer par des tableaux et la fonction pos rendent ton code propre et très fonctionnel, merci beaucoup pour cette solution.
      0