Menu

Strtofloat en pascal [Résolu/Fermé]

Debutant en webmastering 347 Messages postés lundi 6 juin 2011Date d'inscription 26 décembre 2017 Dernière intervention - 24 nov. 2016 à 22:26 - Dernière réponse : Debutant en webmastering 347 Messages postés lundi 6 juin 2011Date d'inscription 26 décembre 2017 Dernière intervention
- 26 nov. 2016 à 10:31
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.
Afficher la suite 

2 réponses

metarefsalem 91 Messages postés vendredi 20 mai 2005Date d'inscription 13 avril 2018 Dernière intervention - Modifié par Judge_DT le 26/11/2016 à 05:00
+1
Utile
1
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.
Cette réponse vous a-t-elle aidé ?  
Debutant en webmastering 347 Messages postés lundi 6 juin 2011Date d'inscription 26 décembre 2017 Dernière intervention - 26 nov. 2016 à 10:31
Passer par des tableaux et la fonction pos rendent ton code propre et très fonctionnel, merci beaucoup pour cette solution.