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 :

Récupérer 10 nb différents avec un calcul aléatoire


Sujet :

Langage Delphi

  1. #1
    Membre régulier Avatar de BXDSPORT
    Homme Profil pro
    Consultant informatique
    Inscrit en
    mars 2002
    Messages
    347
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : mars 2002
    Messages : 347
    Points : 96
    Points
    96
    Par défaut Récupérer 10 nb différents avec un calcul aléatoire
    Bonjour

    Est-ce que quelqu'un sait comment faire pour obtenir une liste de 10 numéros différents grâce à un random de 100 numéros par exemple ?

    Comment tester que le nombre sorti dans random n'est pas déjà diffusé dans une stringList ? (Sous Delphi 5.0 Pro).
    Cordialement à tous

    Votre savoir devient mon savoir qui deviendra votre savoir, telle est la connaissance qui appartient à tous

  2. #2
    Membre chevronné
    Avatar de Pierre Castelain
    Inscrit en
    avril 2002
    Messages
    523
    Détails du profil
    Informations forums :
    Inscription : avril 2002
    Messages : 523
    Points : 1 909
    Points
    1 909
    Par défaut
    Je pense qu'il doit exister un algorithme pour générer plusieurs nombres aléatoires différents dirrectement, mais comme il ne t'en faut que 10, pourquoi ne pas remplir un tableau de 10 éléments en testant à chaque fois que le nombre tiré n'est pas déja présent?
    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
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    type
      TAleas = array [0..9] of integer;
     
    const
      AleaMin = 1;
      AleaMax = 11;
     
    function DejaTire(const Aleas: TAleas; const Value: Integer;
      const MaxNdx: Integer): boolean;
    var
      i: Integer;
    begin
      for i:=Low(Aleas) to MaxNdx do
        if Value = Aleas[i] then
        begin
          result:= true;
          exit;
        end;
      result:= false;
    end;
     
    function Tirer: TAleas;
    var
      i: Integer;
      value: Integer;
    begin
      Randomize;
      for i:= Low(result) to High(result) do
      begin
        value:= Random(AleaMax - AleaMin) + AleaMin;
        while DejaTire(result, Value, i-1) do
          value:= Random(AleaMax - AleaMin) + AleaMin;
        result[i]:= Value;
      end;
    end;
     
    procedure TForm1.Button2Click(Sender: TObject);
    var
      aleas: TAleas;
      i: Integer;
    begin
      aleas:= Tirer;
      ListBox1.Items.Clear;
      for i:= Low(Aleas) to High(Aleas) do
        ListBox1.Items.Add(IntToStr(Aleas[i]));
    end;

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    juillet 2002
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : juillet 2002
    Messages : 6
    Points : 7
    Points
    7
    Par défaut
    voilà un bout de code qui devrait te convenir

    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
     
    procedure TForm1.Button1Click(Sender: TObject);
    var
      Tableau : array[1..10] of integer;
      i, j: integer;
      DejaTire: boolean;
    begin
     
    Randomize;
    for i := 1 to 10 do begin
      repeat
        Tableau[i]:=Trunc(Random(100) + 1);
        DejaTire:=false;
        for j:=1 to i-1 do
          if Tableau[j] = Tableau[i] then begin
            DejaTire:=True;
            Break;
          end;
      until not DejaTire; 
    end;
     
    Memo1.Clear;
    for i := 1 to 10 do
      Memo1.Lines.Add(Format('%d', [Tableau[i]]));
     
    end;
    Pour trouver 10 chiffres parmi 100 cet algo est suffisant.

  4. #4
    Membre régulier

    Inscrit en
    juillet 2002
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : juillet 2002
    Messages : 15
    Points : 90
    Points
    90
    Par défaut
    Euh, vous connaissez les ensembles ? et leur mot clef 'IN' ?

    Parceque là, vos deux boucles imbriquées, c'st hyper lourd !

    Citation Envoyé par R@ph
    qq un pourrait me donner un algo qui permettrait de remplir un tableau de 10 chiffres sur un intervalle de [0..20] (par exemple) et que celui ci ne ressortent pas deux fois le meme chiffre, lors du remplissage du tableau
    merci
    Je lui ai répondu :

    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
    Var 
      val, i : integer; 
      S : set of Integer; 
      T := Array[0..10] Of Integer; 
    Const 
      min = 0; 
      max = 20; 
    begin 
      S := []; 
      Randomize; 
      For i := 0 to 10 
        do 
          begin 
            Repeat 
              val := Random(max+1)+min; 
            Until not (val IN S); 
            S := S + [val]; 
            T[i] := val; 
          end; 
    end;
    Et je pense que ce code est plus optimisé que si on recherche dans le tableau ...

    Moi
    Salut

Discussions similaires

  1. [FTP] Récupérer un ficher distant avec ftp_get
    Par boteha dans le forum Langage
    Réponses: 6
    Dernier message: 25/03/2010, 09h41
  2. Réponses: 4
    Dernier message: 21/02/2010, 12h39
  3. Réponses: 4
    Dernier message: 30/06/2008, 16h18
  4. [W3C] Résultats différents avec IE ou FF
    Par Linoa dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 17/11/2005, 13h45
  5. Récupérer tous les champs avec un DISTINCT
    Par Le Mérovingien dans le forum Requêtes
    Réponses: 3
    Dernier message: 04/11/2005, 23h58

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