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

Ada Discussion :

Tirage au sort


Sujet :

Ada

  1. #1
    Membre averti
    Inscrit en
    Février 2007
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 32
    Par défaut Tirage au sort
    Bonjour,

    je suis en train de réaliser un projet en ada qui concerne une présentation d'une simulation de bus.

    Pour ce faire j'ai besoin d'un algo qui effectue un trirage au sort (distribution normale avec une moyenne et une variance parametrables !)

    Autre indice que j'ai c'est Box-Muller transform.

    Si vous avez une idée n'ésitez surtout pas de faire quelques lignes.

    Merci.

  2. #2
    HRS
    HRS est déconnecté
    Membre chevronné
    Avatar de HRS
    Inscrit en
    Mars 2002
    Messages
    678
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 678
    Par défaut
    pour sortir un nombre aléatoire entre m et n (ici 0 et 36)

    est-ce suffisant ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    with Ada.Numerics.Discrete_Random;
    with Ada.Text_Io;
    procedure Roulette is 
       type Numero is range 0 .. 36; 
       package La_Roulette is new Ada.Numerics.Discrete_Random (Numero);
       use La_Roulette;
       A : Numero;  
       G : Generator;  
    begin
       Reset (G);
       A := Random (G);
       Ada.Text_Io.Put_Line ("Le numero est : " & Numero'Image(A));
    end Roulette;

  3. #3
    Membre émérite
    Avatar de Celelibi
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    1 087
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 1 087
    Par défaut
    Titeuf82, je pense que ce que tu cherche est plus de un algo que de l'Ada. Cette question serait donc à mon avis plus à sa place dans le forum algorithme.

  4. #4
    Membre averti
    Inscrit en
    Février 2007
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 32
    Par défaut
    merci pour votre répose et votre suggestion!!!

    Cela m'a donné une bien clear sur le sujet de tirage au sort.

    J'ai trouvé un codde qui me permet de faire une distribution uniforme mais le probléme qu'ils ont utilisé un package que je n'ai pas RANDOM!!!

    Auriez-vous une idée?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    -- boxmuller.ada     V1.0	Implements the polar form of the Box-Muller
    --			        transformation.
     
    -- presumes that RANDOM.UNIFORM(a,b) returns a uniformly distributed random
    -- number in the range a..b
     
    --	(c) Copyright 1994, Everett F. Carter Jr.
    --	    permission is granted by the author to use this software
    --	    for any application provided that this copyright notice
    --          is preserved.
     
    with RANDOM, Generic_Elementary_Functions;
     
    function Box_Muller(m : in float; s : in float) return float is
        x1, x2, w, y1 : float;
     
        package float_funcs is new Generic_Elementary_Functions( float );
        use float_funcs;
     
        begin
    	     loop
                   x1 := Random.Uniform(-1.0, 1.0);
                   x2 := Random.Uniform(-1.0, 1.0);
     
                   w  := x1 * x1 + x2 * x2;
     
                   exit when w < 1.0;
    	     end loop;
     
                 w := sqrt( ( -2.0 * log( w ) ) / w );
     
                 y1 := x1 * w;
     
          return m + y1 * s;
     
        end Box_Muller;

  5. #5
    Membre émérite
    Avatar de Celelibi
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    1 087
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 1 087
    Par défaut
    Tu peux recréer facilement cette fonction grâce au package Ada.Numerics.Float_Random qui contient une fonction capable de te retourner un nombre flotant entre 0 et 1 et dont la répartition est uniforme.

  6. #6
    Membre averti
    Inscrit en
    Février 2007
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 32
    Par défaut
    Enfin, je crois avoire trouvé.

    J'ai utilisé un algo qui s'appelle Mersenne Twister qui me génère des valeurs uniformément distribuées et un plus, il parait que cette methode est très rapide.

    Le package est dispo sur le Net donc, pour ceux qui peuvent être intéresses, voire l'implantation ici:
    http://adrianhoe.com/adrianhoe/projects/adamt19937/

    Merci pour toutes réponses.

    A bientôt

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

Discussions similaires

  1. Tirage au sort pour un tournoi de belote
    Par aldom dans le forum VB.NET
    Réponses: 1
    Dernier message: 24/06/2007, 20h43
  2. Quelle fonction pour faire un tirage au sort de noms
    Par Sofie109 dans le forum VBA Access
    Réponses: 6
    Dernier message: 01/06/2007, 14h52
  3. Tirage au sort d'un mot
    Par Dav-D dans le forum C
    Réponses: 39
    Dernier message: 04/01/2007, 17h04
  4. [VBA-E] Tirage au sort avec probabilité
    Par clarisse dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 12/05/2006, 11h01
  5. Tirage au sort
    Par clampin dans le forum Langage
    Réponses: 2
    Dernier message: 19/12/2005, 16h38

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