Strtofloat en pascal

Résolu
Debutant en webmastering Messages postés 401 Date d'inscription   Statut Membre Dernière intervention   -  
Debutant en webmastering Messages postés 401 Date d'inscription   Statut Membre Dernière intervention   -
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.
A voir également:

1 réponse

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
Debutant en webmastering Messages postés 401 Date d'inscription   Statut Membre Dernière intervention  
 
Passer par des tableaux et la fonction pos rendent ton code propre et très fonctionnel, merci beaucoup pour cette solution.
0