IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Delphi Discussion :

Comment générer des chiffres décimaux ?


Sujet :

Langage Delphi

  1. #1
    Membre régulier
    Inscrit en
    Novembre 2006
    Messages
    317
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 317
    Points : 88
    Points
    88
    Par défaut Comment générer des chiffres décimaux ?
    Bonjour à tous,

    Je n'arrive pas à trouver comment à pouvoir faire générer des chiffres décimaux, meilleurement....
    example de 0,0009 à 0,2
    les chiffres que je cherche à générer doivent être par example
    0,0301;
    0,0056;
    0,0234;
    0,1095

    voici comment je fais.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
        randomize;
        for i := 1 to 20 do
      begin
     
         r :=  1 / Random(1000);
         Richedit1.Lines.Add(FloatToStr(r));
    mes résultats donne quelques chose comme ceci:
    0,00282485875706215
    0,00218340611353712
    0,00107181136120043
    0,00125156445556946
    0,0025974025974026
    0,00106269925611052
    0,00139082058414465
    0,003003003003003
    0,00125786163522013
    0,00326797385620915
    0,00350877192982456
    0,0018348623853211
    0,00377358490566038
    0,00588235294117647
    0,00221238938053097

    puis si je prends les 4 décimaux le plus souvent j'ai alors ceci.
    mon problem est que la differance entre chiffre n'est pas assez grande...
    0,0028
    0,0021
    0,0010


    Merci beaucoup pour un example et bonne journée
    Cordialement.

  2. #2
    Modérateur

    Homme Profil pro
    Ingénieur retraité
    Inscrit en
    Octobre 2005
    Messages
    2 396
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur retraité

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 396
    Points : 3 263
    Points
    3 263
    Par défaut
    Salut,

    Si tes bornes sont [0,0009 à 0,2] soit 9.10^(-4) à 2^(-1) il faut dans un premier temps multiplier par 10^4 ce qui donne comme nouvelles bornes 9 à 2000. Donc il faut faire dans un premier temps un r:=Random(2000);
    ensuite on redivise derrière un if r >= 9 then r:=r/10000;

    A+
    N'oubliez pas de consulter les FAQ Delphi et les cours et tutoriels Delphi

  3. #3
    Membre régulier
    Inscrit en
    Novembre 2006
    Messages
    317
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 317
    Points : 88
    Points
    88
    Par défaut
    Je viens de tester ta proposition mathématique, je pense qui me convient très bien.
    Je vois un peu dans quelle direction que je dois résoudre.
    Merci beaucoup et trés bonne journée.

  4. #4
    Membre expert
    Avatar de LadyWasky
    Femme Profil pro
    Inscrit en
    Juin 2004
    Messages
    2 932
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 53
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 932
    Points : 3 565
    Points
    3 565
    Par défaut
    Et hop, distribution aléatoire parfaite !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    var valeur:double;
        borne_inf,borne_sup:double;
    begin
      borne_inf:=0.0009;
      borne_sup:=0.2;
      valeur:=random*(borne_sup-borne_inf)+borne_inf;
    end;
    Bidouilleuse Delphi

  5. #5
    Membre régulier
    Inscrit en
    Novembre 2006
    Messages
    317
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 317
    Points : 88
    Points
    88
    Par défaut
    Peux-tu m'expliquer ce que l'étoile * veut définir après Random.
    J'ai regardé un peu dans l'aide et sur le Net mais je n'ai rien trouvé!
    J'ai essayé avec RandomRange*() avec une erreur type incompatible, la doc dit que j'ai besoin un integer, pourquoi ça fonctionne alors avec Random*() la doc dit aussi que la fonction a besoin un integer, ou...j'ai pas bien compris...?

    Merci et bon weekend.
    Salutations

  6. #6
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Salut

    * est simplement l'opérateur de multiplication.

    Random renvoie une valeur aléatoire qui est multipliée par (borne_sup-borne_inf) et enfin tu y ajoute borne_inf.

    Voilou.

    @+ Claudius

  7. #7
    Modérateur

    Homme Profil pro
    Ingénieur retraité
    Inscrit en
    Octobre 2005
    Messages
    2 396
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur retraité

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 396
    Points : 3 263
    Points
    3 263
    Par défaut
    Salut,

    Peux-tu m'expliquer ce que l'étoile * veut définir après Random.
    ... l'étoile c'est le symbole de la multiplication.
    ... et losqu'on appelle la function Random [ ( Range: Integer) ] en omettant l'option Range alors Random renvoie un nombre aléatoire réel X compris dans l'étendue 0 <= X < 1

    ... donc valeur:=random*(borne_sup-borne_inf)+borne_inf; renverra une valeur égale à la somme de borne_inf majorée du produit de ce X compris entre 0 et 1 par le contenu de la parenthèse.

    A+

    EDIT : posts croisés
    N'oubliez pas de consulter les FAQ Delphi et les cours et tutoriels Delphi

  8. #8
    Membre régulier
    Inscrit en
    Novembre 2006
    Messages
    317
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 317
    Points : 88
    Points
    88
    Par défaut
    Je n'aurai jamais eu l'idée de le faire de cette manière,
    contant d'avoir tout de même posé la question et d'avoir appris grâce à
    vos explications. Merci.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 6
    Dernier message: 24/12/2014, 20h45
  2. Comment générer des interfaces garphiques à partir de XML
    Par @yoyo dans le forum Interfaces Graphiques en Java
    Réponses: 4
    Dernier message: 31/03/2006, 10h40
  3. Réponses: 9
    Dernier message: 14/12/2005, 18h44
  4. Réponses: 2
    Dernier message: 22/07/2005, 22h19
  5. Comment générer des pages HTML dynamiques ?
    Par Devil666 dans le forum Java EE
    Réponses: 2
    Dernier message: 15/04/2005, 10h56

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo