Random di alunni

Stato
Discussione chiusa ad ulteriori risposte.

Lukk--

Utente Silver
17 Novembre 2008
0
0
0
57
Premetto che io non lo sò fare, però mi piacerebbe imparare e vedere come si fà (soppratutto in PHP)...Sembra un problema di mate che danno i prof, scusate. :asd:
Allora: una classe ha 28 alunni, tutti in banchi da due...Fare un random che faccia casualmente 14 coppie (28 alunni) di ragazzi.
Se lo volete ancora più difficile: Fare il random ma non ci devono essere due ragazzi di sesso M o ragazze di sesso F vicine...

Se ho sbagliato, datemi del noob...lo sono!:emba:
 
Versione difficile (un maschio e una femmina):
[Python]
Codice:
#!/usr/bin/python
from random import randint
global femmine
femmine=["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14"]
global maschi
maschi=["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14"]
for i in xrange(1, 15):
    num1=randint(0, len(femmine)-1)
    num2=randint(0, len(maschi)-1)
    print "Banco", i, ":", femmine[num1],"e", maschi[num2], "\n"
    femmine.pop(num1)
    maschi.pop(num2)
 
Te la fai facile con gli studenti che hanno come nome un numero XD
Io in PHP non li ho messi in nome random, come capita capita XD
PHP:
<?php
$alunni = explode(' ','Simona Simone Maria Mario Roberto Roberta Francesca'); // 7 alunni / alunne
// Genero le coppie
$coppie = array(); // Array iniziale
$num = 0;
for($i=0;$i<28;$i++){
	$coppie[] = $alunni[$num];
	if ($num >= 0 and $num < 6) {
		$num++;
	} elseif ($num == 6) {
		$num = 0;
	}
}


$fila = 1;
for ($i = 1; $i <= count($coppie); $i++) {
	$studente1 = $coppie[$i-1];
	$studente2 = $coppie[$i];
	$sesso1 = ($studente1[strlen($studente1)-1] == 'a' and $studente1 != 'Andrea' and $studente1 != 'Luca') ? 'alunna' : 'alunno';
	$sesso2 = ($studente2[strlen($studente2)-1] == 'a' and $studente2 != 'Andrea' and $studente2 != 'Luca') ? 'alunna' : 'alunno';
	echo "Fila #{$fila}: {$sesso1} {$studente1} | {$sesso2} {$studente2}<br />";
	if ($i % 2 == 1) {
		$i++;
	}
	$fila++;
}
?>
 
[ot]:ads: lukk mi sa che questo c'entra cn la prof di info... beh cmq adesso sono con il portatile, appena torno al fisso ci provo anch'io a farlo...[/ot]
 
[ot]
lo avevo gia fatto.......
ma, mi sembra che in C sia un pò più complicato.......[/ot]
 
A roberto:
Mi dispiace ma come già detto, non riesco a farlo...
Però poichè mi piacerebbe imparare questo e in generale il PHP (tu lo conosci anche molto bene, mi sembra) mi piacerebbe vederlo e capire come è...
 
Sì, il PHP è il mio linguaggio preferito.
Comunque va bene lo stesso se non l'ho fatto random?
Perché facendolo in modo random capitano tutti alla rinfusa.
 
eh no Roberto dev'essere random...se no non vale
questo è il mio...
PHP come piace a te ,
non importa quanti alunni mettiate da una e dall'altra parte li abbina a random lasciando solo l'ultimo in un posto vuoto, quindi non capiteranno neanche per es 2 bimbi da soli
e tanto meno non ci saranno ripetizioni di alunni
esempio:http://cyberfox.netsons.org/lab/test/alunni.php

PHP:
<?php

$am=array('m0','m1','m2','m3','m4','m5','m6','m7','m8','m9','m10','m11','m12','m13','m14','m15');
$af=array('f0','f1','f2','f3','f4','f5','f6','f7','f8','f9','f10','f11','f12');
sort($am);
sort($af);

$ct=array($am,$af);


$np=(count($am)>count($af)) ? count($am) : count($af) ;
$npa=0;

$r='Posti:<br>';

while($npa<$np){
$a0=rand(0,1);
$a2=($a0==1) ? 0:1;
$a0=(count($ct[$a0])==0) ? $a2:$a0 ;
$a2=($a0==1) ? 0:1;

$a1=rand(0,count($ct[$a0])-1);
$p0=(count($ct[$a0])==0) ? 'Posto Vuoto' : $ct[$a0][$a1] ;//get_person($ct,rand(0,1));

if($p0!='Posto Vuoto'){
unset($ct[$a0][$a1]);
sort($ct[$a0]);}

$a0=rand(0,1);
$a2=($a0==1) ? 0:1;
$a0=(count($ct[$a0])==0) ? $a2:$a0 ;
$a2=($a0==1) ? 0:1;

$a1=rand(0,count($ct[$a0])-1);
$p1=(count($ct[$a0])==0) ? 'Posto Vuoto' : $ct[$a0][$a1] ;//get_person($ct,rand(0,1));

if($p1!='Posto Vuoto'){
unset($ct[$a0][$a1]);
sort($ct[$a0]);}

$r.=$p0.' vicino a '.$p1.'<br>';
$npa++;

}

print_r($r);

?>
 
Dai che non è difficile, provate il mio, funziona...
PHP:
<?php
//funzione per constatare l'esistenza del numero random generato nel vettore
function notexist($value,$vet)
{
	$flag=true;
	for($j=0;$j<14;$j++)
	{
		if($value==$vet[$j])
		{
			$flag=false;
		}
	}
	return $flag;
}
$maschi = explode(' ', 'Fabrizio Gianmarco Alfredo Giacomo Antonio Luigi Cosimo Marco Davide Domenico Angelo Francesco Michele Mino Andrea');
$femmine = explode(' ', 'Barbara Alessandra Marika Simona Gabriella Debora Carla Genoveffa Sara Silvia Matilde Roberta Francesca Ilenia');
$lung=count($maschi);
if($lung<count($femmine))
	$lung=count($femmine);
//per ogni indice di ogni vettore creo un numero random diverso dagli altri
for($i=0;$i<$lung;$i++)
{
 	do{
		$tmp = mt_rand(1,$lung);
		$mas[$i] = -1;
		if(notexist($tmp,$mas))
		{
			$mas[$i] = $tmp;
		}
	}while($mas[$i] == -1);
	do{
		$tmp = mt_rand(1,$lung);
		$fem[$i] = -1;
		if(notexist($tmp,$fem))
		{
			$fem[$i] = $tmp;
		}
	}while($fem[$i] == -1);
}
//Se il vettore non contiene l'elemento sostituisco con NESSUNO
if($lung>count($maschi))
{
	for($i=count($maschi);$i<$lung;$i++)
	{
		$maschi[$i] = "NESSUNO";
	}
}
elseif($lung>count($femmine))
{
	for($i=count($femmine);$i<$lung;$i++)
	{
		$femmine[$i] = "NESSUNO";
	}
}
//Stampo a video il prodotto
echo 'Le coppie random sono:<br>';
for($i=0;$i<$lung;$i++)
{
	$m = $mas[$i]-1;
	$f = $fem[$i]-1;
	echo $maschi[$m].' e '.$femmine[$f].'<br>';
}
?>
 
Stato
Discussione chiusa ad ulteriori risposte.