next up previous contents index
suivant: Visualistion des combinaisons modulo monter: Un exercice de combinatoire précédent: L'énoncé   Table des matières   Index

Les programmes

  1. On peut avoir comb(n,p) jurys différents.
    On tape : comb(17,10)
    On obtient : 19448
    Supposons que n cases C numérotées de 0 à n - 1 représentent les membres du jury.
    Dans ces cases on met 1 si la personne fait partie du jury et 0 sinon. Un jury est donc une liste de 0 et de 1 et cela fait penser à l'écriture en base 2 d'un entier.
    Avec Xcas, la commande convert(k,base,2) renvoie la liste K de longueur l vérifiant k = $ \sum_{{j=0}}^{{l-1}}$K[j]*2j On va donc considérer un jury comme un entier dont l'écriture en base 2 a au plus n chiffres et comporte exactement p 1. Pour faire le programme on va repésenter chaque jury par un nombre dont l'écriture en base 2 comporte au plus n chiffres dont p 1 et pas plus de n - p zéros.
    Le plus petit nombre correspondant à un jury est :
    m=sum(2^j,j,0,p-1)=2^p-1
    et le plus grand nombre correspondant à un jury est :
    M=sum(2^j,j,n-p,n-1)=2^n-2^(n-p)
    car les n cases sont numerotés de 0 à n - 1.
    On peut initialiser la liste L soit avec L:=makelist(0,1,1); soit avec L:=makelist(0,1,comb(n,p)); puisque l'on connait sa longueur. On écrit le programme jurys(n,p) :
    jurys(n,p):={
    local j,k,L,m,M;
    //L:=makelist(0,1,comb(n,p));
    L:=makelist(0,1,1);
    k:=0;
    m:=2^p-1;
    M:=2^n-2^(n-p);
    for (j:=m;j<=M;j++){
    if (sum(convert(j,base,2))==p){
    L[k]=<j;
    k:=k+1;
    };
    }
    return L;
    }
    :;
    
    On tape : J:=jurys(17,10):;
    On obtient, au bout d'environ 11s, une liste J de taille 19448 et contenant des entiers qui lorsqu'on les décompose en base 2 donne la composition du jury.
    On tape : jurytire0:=J[rand(19448)]
    On obtient par exemple : 127255
    On tape : convert(127255,base,2)
    On obtient par exemple : [1,1,1,0,1,0,0,0,1,0,0,0,1,1,1,1,1]
    Donc, les personnes de numéros : 0,1,2,4,8,12,13,14,15,16 ont été tirées au sort pour faire partie du jury.
    On peut bien sûr taper directement :
    jurytire0:=convert(J[rand(19448)],base,2)
    On obtient par exemple : [1,0,0,0,1,1,1,0,1,1,1,0,0,1,0,1,1]
    Donc, les personnes de numéros : 0,4,5,6,8,9,10,13,15,16 ont été tirées au sort pour faire partie du jury.

  2. On peut supposer que la case 0 représente Monsieur Y et que la case n - 1 représente Madame X. Donc le jury repésenté par le nombre j est valable si :
    irem(j,2)==0 ou si j<2^(n-1).
    On peut réecrire un programme jurysXY(n,p) qui utilise jurys ou un programme juryXY(n,p) qui n'utilise pas jurys ou utiliser la liste précédente J et rejeter les mauvais tirages.
  3. On peut supposer que les cases de 0 à h - 1 représentent les hommes et que les cases de h à n - 1 représentent les femmes. On écrit un nouveau programme jury55(h,f,p) qui utilise le programme jurys(n,p écrit précédemment ou on se sert de la liste J trouvée précedemment.
  4. On peut supposer que la case 0 représente Monsieur Y et que la case n - 1 représente Madame X. Donc le jury repésenté par le nombre j est valable si :
    irem(j,2)==0 ou si j<2^(n-1).
    On peut réecrire un programme jury55XY(h,f,p) qui utilise jury55, ou un programme jurys55XY(n,p) qui n'utilise pas jury55 mais jurys, ou utiliser la liste précédente J55 et rejeter les mauvais tirages, ou encore utiliser la liste J du début et rejeter les mauvais tirages.

next up previous contents index
suivant: Visualistion des combinaisons modulo monter: Un exercice de combinatoire précédent: L'énoncé   Table des matières   Index
Documentation de giac écrite par Renée De Graeve