Signaler

Strtofloat en pascal [Résolu]

Posez votre question Debutant en webmastering 311Messages postés lundi 6 juin 2011Date d'inscription 26 novembre 2016 Dernière intervention - Dernière réponse le 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.


EDIT : Ajout des balises de code (la coloration syntaxique).
Explications disponibles ici : ICI

Merci d'y penser dans tes prochains messages.
Afficher la suite 
Utile
+1
moins plus
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.
Debutant en webmastering 311Messages postés lundi 6 juin 2011Date d'inscription 26 novembre 2016 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.
Répondre
Ajouter un commentaire

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.

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

Vous n'êtes pas encore membre ?

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