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 :

calculer des combinaisons et les afficher


Sujet :

Langage Delphi

  1. #1
    Membre à l'essai
    Inscrit en
    Janvier 2010
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 22
    Points : 12
    Points
    12
    Par défaut calculer des combinaisons et les afficher
    Bonjour a vous tous je suis confronter a un problème que j arrives pas a le résoudre tout d abord je suis entrain de réaliser une application qui doit calculer est affiche les combinaisons dans une string grid alors tout d abord mon application ce compose de
    2 boutons radio un qui a le nom de 5 est l autre de 7 est il serve a nous afficher soit 5 combo box soit 7 est après avoirs choisi soit 5 soit 7 on auras a remplir les combo box qui contiens des numéro de 1 a 21 après on clique sur le boutons combiner est on auras a remplir les résultat de combine dans une string gride de 5 colonne
    Alors le problème ce situ ces dans la fonction de combinaison ne veut pas marcher proposer moi un algorithme ou des idées
    Remarque : si on choisi 7 on doit chercher tout les combinaisons possible de 5 que on peut crée avec les 7 chiffre entré
    Si on choissi 5 on doit aussi cherche tout les combinaisons possible de 5 que on peut crée avec les 5 chiffre entrée

  2. #2
    Membre éprouvé
    Avatar de Dr.Who
    Inscrit en
    Septembre 2009
    Messages
    980
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Septembre 2009
    Messages : 980
    Points : 1 294
    Points
    1 294
    Par défaut
    j'ai pas trop compris.

    en gros tu cherche un algorithme de génération des permutations entre plusieurs nombres ?
    [ Sources et programmes de Dr.Who | FAQ Delphi | FAQ Pascal | Règlement | Contactez l'équipe ]
    Ma messagerie n'est pas la succursale du forum... merci!

  3. #3
    Membre à l'essai
    Inscrit en
    Janvier 2010
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 22
    Points : 12
    Points
    12
    Par défaut
    Citation Envoyé par Dr.Who Voir le message
    j'ai pas trop compris.

    en gros tu cherche un algorithme de génération des permutations entre plusieurs nombres ?
    oui exacte avec en choix soi on choissi 5 ou 7 chifre a combiner sur 5 possision

  4. #4
    Membre éprouvé
    Avatar de Dr.Who
    Inscrit en
    Septembre 2009
    Messages
    980
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Septembre 2009
    Messages : 980
    Points : 1 294
    Points
    1 294
    Par défaut
    as tu déjà compté en binaire ?
    je dis ça car on remarque tout de suite les permutations des bits et les enchainements :

    2 permutations
    0
    1

    4 permutations
    00
    01
    10
    11

    8 permutations
    000
    001
    010
    011
    100
    101
    110
    111

    16 permutations
    0000
    0001
    0010
    0011
    0100
    0101
    0110
    0111
    1000
    1001
    1010
    1011
    1100
    1101
    1110
    1111

    32 permutations
    00000
    00001
    00010
    00011
    00100
    00101
    00110
    00111
    01000
    01001
    01010
    01011
    01100
    01101
    01110
    01111
    10000
    10001
    10010
    10011
    10100
    10101
    10110
    10111
    11000
    11001
    11010
    11011
    11100
    11101
    11110
    11111


    et ça, seulement en base 2.

    donc si l'on doit faire des permutations sur 5 positions avec 5 à 7 chiffres on obtient 5^5 à 7^5 permutations (3125 à 16807).

    [ame]http://fr.wikipedia.org/wiki/Permutation[/ame]
    [ Sources et programmes de Dr.Who | FAQ Delphi | FAQ Pascal | Règlement | Contactez l'équipe ]
    Ma messagerie n'est pas la succursale du forum... merci!

  5. #5
    Membre à l'essai
    Inscrit en
    Janvier 2010
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 22
    Points : 12
    Points
    12
    Par défaut
    Citation Envoyé par Dr.Who Voir le message
    as tu déjà compté en binaire ?
    je dis ça car on remarque tout de suite les permutations des bits et les enchainements :

    2 permutations
    0
    1

    4 permutations
    00
    01
    10
    11

    8 permutations
    000
    001
    010
    011
    100
    101
    110
    111

    16 permutations
    0000
    0001
    0010
    0011
    0100
    0101
    0110
    0111
    1000
    1001
    1010
    1011
    1100
    1101
    1110
    1111

    32 permutations
    00000
    00001
    00010
    00011
    00100
    00101
    00110
    00111
    01000
    01001
    01010
    01011
    01100
    01101
    01110
    01111
    10000
    10001
    10010
    10011
    10100
    10101
    10110
    10111
    11000
    11001
    11010
    11011
    11100
    11101
    11110
    11111


    et ça, seulement en base 2.

    donc si l'on doit faire des permutations sur 5 positions avec 5 à 7 chiffres on obtient 5^5 à 7^5 permutations (3125 à 16807).

    http://fr.wikipedia.org/wiki/Permutation
    ok tout a fait d acord avec vous mes moi dans ma fonction jaurait pas bession des combinaisson de 5 chifre distainct cadire jais pas bessoin des combinaison 5*le meme chifre vous wouyet un peut

  6. #6
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 518
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 518
    Points : 25 036
    Points
    25 036
    Par défaut
    Voir ce Sujet !

    On a eu une longue conversation sur la Combinatoire et les limites de mémoire vive pour enumérer toutes les combinaisons !
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  7. #7
    Membre à l'essai
    Inscrit en
    Janvier 2010
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 22
    Points : 12
    Points
    12
    Par défaut
    Bonjour a vous tous
    bon voici un algorithme que jais développer pour qui me calcule tout les combinaison possible a partir d un tableau d entier de 5 élément alors quand je l exécute il m affiche pas tout les combinaison possible est ya des combinaison en double est parfois en triple qui sont affiche alors je vous sollicite pour avoir une idée est même un algorithme si vous en avez merci d avance
    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
    procedure TForm1.Button1Click(Sender: TObject);
     
    VAR
      a, b, c, d, e, f: integer;
    CONST
      NUM: ARRAY[0..7] OF integer = (0, 5, 7, 6, 3, 4, 1, 9);
     
    BEGIN
      Memo1.Clear;
      FOR a := 0 TO (length(NUM) - 5) DO
        FOR b := a + 1 TO (length(NUM) - 4) DO
          FOR c := b + 1 TO (length(NUM) - 3) DO
            FOR d := c + 1 TO (length(NUM) - 2) DO
              FOR e := d + 1 TO (length(NUM) - 1) DO
                FOR f := e + 1 TO (length(NUM)- 1) DO begin
                  sg1.Cells[0,sg1.RowCount]:=intToStr(NUM[a]);
                   sg1.Cells[1,sg1.RowCount]:=intToStr(NUM[b]);
                    sg1.Cells[2,sg1.RowCount]:=intToStr(NUM[c]);
                     sg1.Cells[3,sg1.RowCount]:=intToStr(NUM[d]);
                      sg1.Cells[4,sg1.RowCount]:=intToStr(NUM[e]);
                      sg1.RowCount:=sg1.RowCount+1;
                    end;
    end;

  8. #8
    Membre éprouvé
    Avatar de Montor
    Homme Profil pro
    Autre
    Inscrit en
    Avril 2008
    Messages
    879
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Autre

    Informations forums :
    Inscription : Avril 2008
    Messages : 879
    Points : 963
    Points
    963
    Par défaut
    Cette exemple pour afficher 2 000 000 000 de combinaisons ...c'est le max
    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
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    implementation
    {$R *.dfm}
    uses Math;
    const
     //Décimal NUM_CHARS: array[0..9]  of Char =  '0123456789';
     //Octal   NUM_CHARS: array[0..7]  of Char =  '01234567';
     //Binaire NUM_CHARS: array[0..1]  of Char =  '01';
     //HexaDec NUM_CHARS: array[0..15] of Char =  '0123456789ABCDEF';
     //ALPHA   NUM_CHARS: array[0..25] of Char =  'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
     
     NUM_CHARS : array[0..7] of Char =  '05763419';
     NUM_BASE = Length(NUM_CHARS);
     
     NBDIGIT   = 6 ; //Nombre de chiffres
     
    function GetXYdigit(Adigit,ANumber : integer):Char;
    var V:int64;
    begin
      V:=Trunc(Power(NUM_BASE,Adigit));
      result:=NUM_CHARS[(ANumber div V) mod NUM_BASE];
    end;
     
    procedure TForm1.Button1Click(Sender: TObject);
    var
      T: integer;
      D:Double;
    begin
      D:=Power(NUM_BASE,NBDIGIT);
      if D >= MaxInt then
        T := MaxInt-1
      else
        T := Trunc(D);
     
      ShowmessageFmt('Nombre d''éléments à afficher : %.0n ',[T+0.0]);
      StringGrid1.RowCount := T + 1;
      StringGrid1.ColCount := NBDIGIT+1;
      StringGrid1.Options:= StringGrid1.Options +[goThumbTracking];
      StringGrid1.Invalidate;
    end;
     
    procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
      Rect: TRect; State: TGridDrawState);
    begin
       if (gdFixed in State)or
           (ACol = 0) or (ARow = 0) then  Exit;
     
       dec(ARow);
       dec(ACol);
       with TStringGrid(Sender),Canvas do
       begin
          {base: 8 (ARow shr (3 * ACol))and 7 }
          TextOut(Rect.Left+2,Rect.Top+2,GetXYdigit(ACol,ARow));
       end;
    end;
     
    end.

  9. #9
    Membre à l'essai
    Inscrit en
    Janvier 2010
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 22
    Points : 12
    Points
    12
    Par défaut
    Citation Envoyé par Montor Voir le message
    Cette exemple pour afficher 2 000 000 000 de combinaisons ...c'est le max
    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
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    implementation
    {$R *.dfm}
    uses Math;
    const
     //Décimal NUM_CHARS: array[0..9]  of Char =  '0123456789';
     //Octal   NUM_CHARS: array[0..7]  of Char =  '01234567';
     //Binaire NUM_CHARS: array[0..1]  of Char =  '01';
     //HexaDec NUM_CHARS: array[0..15] of Char =  '0123456789ABCDEF';
     //ALPHA   NUM_CHARS: array[0..25] of Char =  'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
     
     NUM_CHARS : array[0..7] of Char =  '05763419';
     NUM_BASE = Length(NUM_CHARS);
     
     NBDIGIT   = 6 ; //Nombre de chiffres
     
    function GetXYdigit(Adigit,ANumber : integer):Char;
    var V:int64;
    begin
      V:=Trunc(Power(NUM_BASE,Adigit));
      result:=NUM_CHARS[(ANumber div V) mod NUM_BASE];
    end;
     
    procedure TForm1.Button1Click(Sender: TObject);
    var
      T: integer;
      D:Double;
    begin
      D:=Power(NUM_BASE,NBDIGIT);
      if D >= MaxInt then
        T := MaxInt-1
      else
        T := Trunc(D);
     
      ShowmessageFmt('Nombre d''éléments à afficher : %.0n ',[T+0.0]);
      StringGrid1.RowCount := T + 1;
      StringGrid1.ColCount := NBDIGIT+1;
      StringGrid1.Options:= StringGrid1.Options +[goThumbTracking];
      StringGrid1.Invalidate;
    end;
     
    procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
      Rect: TRect; State: TGridDrawState);
    begin
       if (gdFixed in State)or
           (ACol = 0) or (ARow = 0) then  Exit;
     
       dec(ARow);
       dec(ACol);
       with TStringGrid(Sender),Canvas do
       begin
          {base: 8 (ARow shr (3 * ACol))and 7 }
          TextOut(Rect.Left+2,Rect.Top+2,GetXYdigit(ACol,ARow));
       end;
    end;
     
    end.
    bon jour ya tjr un problem au niveau de t grid drew merci est jais merde moi meme mes aucun soulution merci a vous tous est bonne journee

Discussions similaires

  1. Calculer des moyennes dans les requêtes
    Par said2n dans le forum Requêtes et SQL.
    Réponses: 7
    Dernier message: 02/07/2008, 13h12
  2. Réponses: 8
    Dernier message: 23/07/2007, 08h51
  3. vb6 + charger des infos ds des pages sans les afficher
    Par mqsi dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 14/11/2006, 09h06
  4. Le calcul des stats dégrade les performances
    Par jo007 dans le forum Oracle
    Réponses: 18
    Dernier message: 15/02/2005, 09h42

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