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 :

Exclusion d'un nombre lors de la génération


Sujet :

Langage Delphi

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 13
    Points : 11
    Points
    11
    Par défaut Exclusion d'un nombre lors de la génération
    Bonjour,

    je voudrais généré un nombre dans un tableau et il doit apparaitre une seule fois dans le tableau.

    mon problème présentement est qu'il se retrouve plusieurs fois dans chaque ligne.

    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
     
    program Hasard;
     
     type
          tab1=array [1..10] of integer ;
          tab2=array [1..10] of integer;
     const
          j=10;
     var
         c,d,i:integer;
         a:tab1;
         b:tab2;
     
    begin
            writeln('Appuyer sur <enter> pour afficher ');
            write('les resultats du tirage au sort.');
            readln;
    randomize;
     
    for c:=1 to 10 do
     
        begin
              a[c]:=random(j);
                if a[c]=a[c] then a[c]:=random(j)-a[c];  //élimination du nombre (mais je crois qu'il le soustrait)
                 write(a[c],' ');
        end;
            writeln('mon equipe');;
      for d:=1 to 10 do
          begin
          b[c]:=random(j);
                if b[d]=b[d] then b[d]:=random(j)-b[d];   //élimination du nombre (mais je crois qu'il le soustrait)
                 write(b[d],' ');
          end;
            writeln('Adversaire');
            write('Merci !');
     readln;
     
    end.
    Merci

  2. #2
    Membre averti Avatar de archonte
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    341
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 341
    Points : 392
    Points
    392
    Par défaut
    Salut !

    Plusieurs petits commentaires :

    - a[c] = a[c] me semble être une expression toujours vraie (du moins avec des integer).

    - a[c]:=random(j); suivi de a[c]:=random(j)-a[c]; : dans ces conditions 1/ tu génères un nombre pseudo-aléatoire que tu affectes à a[c] puis 2/ tu génères un nouveau nombre pseudo-aléatoire auquel tu soustrais l'ancien, et finalement tu affecte cette différence à nouveau dans a[c] !!!

    - tu ne te sers jamais de i, pourquoi le déclarer ? Par ailleurs, tes 2 boucles for..to ne sont pas imbriquées, donc tu pourrais te servir du même integer (c ou d ou i) comme variable de boucle, et donc ne déclarer que c ou d ou i.

    - même raisonement avec a[] et b[] utilisés l'un après l'autre. Si tu n'as pas à utiliser ces tableaux pour des traitements ultérieurs, la déclaration d'un seul tableau est suffisante.


    En pratique, tu souhaites écrire quelque chose comme ça, je suppose ?

    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
    var
      a : array[0..9] of integer; // un tableau de 10 integer
      i, j : integer; // variable pour les 2 boucles for..to imbriquées
     
    label
      labelDebut;  // pas franchement classique, mais simple ici me semble-t-il, en même temps : jamais testé !!
     
    begin
      randomize;
      for i=0 to 9 do
        begin
          labelDebut:    
          a[i] := random(10);
          if i > 0 then     // on ne compare pas le 1er nombre pseudo-aléatoire !
            for j = 0 to i-1 do   // par contre on compare le nombre nouvellement généré au(x) précédent(s)
              if a[j] = a[i] then goto labelDebut; // permet de regenerer un nombre s'il est déja présent dans le tableau !
          write(a[i],' ');
        end;
    end;
    "Je n'ai jamais rencontré d'homme si ignorant qu'il n'eut quelque chose à m'apprendre."
    Galilée

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 13
    Points : 11
    Points
    11
    Par défaut
    Merci beaucoup pour tes commentaires, je suis un débutant et un vrai !!
    donc grâce à toi j'améliore mes connaissances.


  4. #4
    Membre averti Avatar de archonte
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    341
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 341
    Points : 392
    Points
    392
    Par défaut



    N'oublie pas le bouton si le débat peut être clos !!!


    "Je n'ai jamais rencontré d'homme si ignorant qu'il n'eut quelque chose à m'apprendre."
    Galilée

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

Discussions similaires

  1. Réponses: 7
    Dernier message: 02/08/2006, 08h54
  2. Réponses: 22
    Dernier message: 28/03/2006, 14h59
  3. [Images] Génération de l'image : obtention de caractères bizares
    Par Metallic-84s dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 27/02/2006, 09h07
  4. [JAXB][XSD] Problème lors de la génération des classes
    Par charlot44 dans le forum Persistance des données
    Réponses: 4
    Dernier message: 22/06/2005, 16h10

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