généré et placé

Eléphant du PHP | 166 Messages

02 oct. 2017, 12:24

Bonjour
Pour un exercice, je dois attribuer des élèves dans un sport. Il y a 5 sports : boxe,tennis,piscine,vélo,foot. il y a au total 60 élèves.
un élève peu faire 1 ou 2 ou 3 ou 0 sports. comment généré cela ?
Moi j'ai commence par un code :

Code : Tout sélectionner

<?php /* je génère le Nb délève total pour 1 école */ $nbeleve = rand(90,100);/* 90 pour pas etre en dessous de 90 élèves dans l'école*/ echo 'Il y a : '.$nbeleve.' élèves dans cette école'.'<br />'; /* je génère ceux qui font au moins 1 sport et plus, et ceux qui font 0 sport */ $nbsportif = rand(80,$nbeleve);/* 80 pour pas etre en dessous de 80 élèves non sportif*/ $nonsportif = $nbeleve - $nbsportif; echo 'Il ya : '.$nbsportif.' pratiquant au moins <strong>1 sport</strong>, et '.$nonsportif.' pratiquant <strong>aucun sport.</strong>'.'<br />'.'<br />'; echo 'Ils sont répartis de la façon suivante : '.'<br/>'; /* je génère ceux qui font 1,2 ou 3 sport */ $unsport = rand(60,$nbsportif);/* 1 sport */ echo $unsport. ' élèves font 1 sport'.'<br />'; $resteun = $nbsportif - $unsport; $deuxsport = rand(1,$resteun);/* 2 sports */ echo $deuxsport. ' élèves font 2 sports'.'<br />'; $restedeux = $resteun - $deuxsport;/* 3 sports */ echo $restedeux. ' élèves font 3 sports'.'<br />'; ?>

Mammouth du PHP | 1353 Messages

11 oct. 2017, 18:19

Bonjour,

J'ai l'impression que vous prenez le problème par le mauvais bout.

Le but semble être d'associer 0 à 3 sports aléatoires à chaque élève. Vous pouvez avoir une approche par classe ou par tableau mais peu importe, à mon avis le fonctionnement est le suivant:

- Avoir un tableau multidimensionnel de 60 élèves, et associer à chaque élément de ce tableau de 0 à 3 sports.

Ensuite, pour compter les statistiques, il suffira de parcourir ce tableau.

Cela semble plus logique de faire d'abord la structure et ensuite les statistiques, sinon les nombres aléatoires ne seront pas cohérents.

Pas à pas :

Créer un tableau simple avec les 5 sports

Code : Tout sélectionner

$sports = array("boxe", "tennis", "velo", "piscine", "foot");
Ensuite, initialiser un tableau "eleves". Puis, dans une boucle qui va de 0 à 59 :
  • Déterminer le nombre de sports (par un random entre 0 et 3) N
    Associer N sports (via un random dans le tableau sports, attention à ne pas prendre deux fois le même) à l'élève
    Au passage, stocker le nombre de sports pour les statistiques (ou le faire après dans une nouvelle boucle) (par exemple dans un tableau count_sport qui a comme entrée "1 sport", "2 sports"...., et, en fonction du random, on incrémente)
Bon courage,
Tell me and I forget. Teach me and I remember. Involve me and I learn.

Mammouth du PHP | 1353 Messages

11 oct. 2017, 18:19

Bonjour,

J'ai l'impression que vous prenez le problème par le mauvais bout.

Le but semble être d'associer 0 à 3 sports aléatoires à chaque élève. Vous pouvez avoir une approche par classe ou par tableau mais peu importe, à mon avis le fonctionnement est le suivant:

- Avoir un tableau multidimensionnel de 60 élèves, et associer à chaque élément de ce tableau de 0 à 3 sports.

Ensuite, pour compter les statistiques, il suffira de parcourir ce tableau.

Cela semble plus logique de faire d'abord la structure et ensuite les statistiques, sinon les nombres aléatoires ne seront pas cohérents.

Pas à pas :

Créer un tableau simple avec les 5 sports

Code : Tout sélectionner

$sports = array("boxe", "tennis", "velo", "piscine", "foot");

Ensuite, initialiser un tableau "eleves". Puis, dans une boucle qui va de 0 à 59 :
  • Déterminer le nombre de sports (par un random entre 0 et 3) N
    Associer N sports (via un random dans le tableau sports, attention à ne pas prendre deux fois le même) à l'élève
    Au passage, stocker le nombre de sports pour les statistiques (ou le faire après dans une nouvelle boucle) (par exemple dans un tableau count_sport qui a comme entrée "1 sport", "2 sports"...., et, en fonction du random, on incrémente)
Bon courage,
Tell me and I forget. Teach me and I remember. Involve me and I learn.