Troppo carini gli eserzi scolastici.... Mi divertono un casino!
Provato e testato!!!
Codice PHP:
<?php
/*
Traccia
inserire in un array, con random, 150 lettere che possono essere G o F. Inserire in un secondo array
le misure,comprese tra 160 e 215 per le G ,tra 150 e 175 per le F.
inserire in un terzo array dei commenti[...].. un valore si intende nella norma
se è compreso tra la media e un -/+ 6%. Prevedere medie distinte tra G e F.
Analisina
Dalla traccia possiamo individuare i passi che costituiscono la soluzione al problema:
1)Produrre un array di n elementi (150) contenente una lettera per ogni elemento (G o F)
2)Produrre un array di cardinalità uaguale al precedente in cui caricare dei valori appartenenti ad un range
definito per ogni lettera
3)Calcolare le medie per ogni lettera a seconda dei valori caricati nel secondo array
4)Produrre un array di commenti in cui nella norma è legato all'appartenenza ad un intervallo difinito come
distanza dalla media in base ad una tolleranza percentuale
*/
//Parametrizzazione delle caratteristiche
$lettere=array('G','F'); //Elenco delle lettere che possono comporre il primo array
$range=array( //Range di valori assumibili da ogni lettera
$lettere[0]=>array('min'=>160,'max'=>215),
$lettere[1]=>array('min'=>150,'max'=>175)
);
$tolleranza=0.06; //Tolleranza di distacco dalla media per rientrare nella norma
$estrazioni=150; //Numero di lettere da estrarre (cardinalità del primo array)
//Funzione per la generazione di un array di $dimensione elementi costituiti da lettere
//appartenenti all'array $lettere estratte in modo causale
function GeneraArrayLettere($dimensione,$lettere){
$res=array(); $num_lett=count($lettere)-1;
for($i=0; $i<$dimensione; $i++)
$res[$i]=$lettere[rand(0,$num_lett)];
return $res;
}
//Funzione per la generazione di un array di valori (uno per ogni elemento di $arrayLettere)
//appartenenti all'intervallo specificato dall'array $range a seconda della lettera
//contenuta in $arryLettere
function GeneraArrayValori($arrayLettere,$range){
$res=array(); $num_val=count($arrayLettere);
for($i=0; $i<$num_val;$i++){
$laLettera=$arrayLettere[$i];
$min=$range[$laLettera]['min'];
$max=$range[$laLettera]['max'];
$res[$i]=rand($min,$max);
}
return $res;
}
//Funzione di generazione di un array delle medie per ogni elemento di $lettere
//a seconda delle coppie $arrayLettere,$arrayValore
function CalcolaArrayMedie($lettere,$arrayLettere,$arrayValori){
$somme=array();
$qta =array();
$dim=count($lettere);
for($i=0;$i<$dim;$i++){
$somme[$lettere[$i]]=0;
$qta[$lettere[$i]]=0;
}
$dim=count($arrayLettere);
for($i=0; $i<$dim;$i++){
$somme[$arrayLettere[$i]]+=$arrayValori[$i];
$qta[$arrayLettere[$i]]+=1;
}
$medie=array();
foreach($somme as $key=>$value)
$medie[$key]=$value/$qta[$key];
return $medie;
}
//Funzioene di generazione dei commenti per ogni elemento di $arrayValore in base
//alla appartenenza all'intervallo definito come scostamento dalla media di +/-$tolleranza
function GeneraArrayCommenti($arrayMedie,$arrayLettere,$arrayValori,$tolleranza){
$commenti=array();
foreach($arrayMedie as $key=>$value){
$intervalli[$key]['min']=$value-$value*$tolleranza;
$intervalli[$key]['max']=$value+$value*$tolleranza;
}
$dim=count($arrayLettere);
for($i=0;$i<$dim;$i++){
$lettera=$arrayLettere[$i];
if($arrayValori[$i]<$intervalli[$lettera]['min'])
$commenti[$i]="Fuori norma per difetto -> inferiore a {$intervalli[$lettera]['min']}";
elseif($arrayValori[$i]>$intervalli[$lettera]['max'])
$commenti[$i]="Fuori norma per eccesso -> superiore a {$intervalli[$lettera]['max']}";
else
$commenti[$i]="Nella norma -> Contenuto tra {$intervalli[$lettera]['min']} e {$intervalli[$lettera]['max']}";
}
return $commenti;
}
//Passi che risolvono il problema
$arrayLettere =GeneraArrayLettere($estrazioni,$lettere);
$arrayValori =GeneraArrayValori($arrayLettere,$range);
$arrayMedie =CalcolaArrayMedie($lettere,$arrayLettere,$arrayValori);
$arrayCommenti=GeneraArrayCommenti($arrayMedie,$arrayLettere,$arrayValori,$tolleranza);
?>
<html>
<head>
<title>Esercizio</title>
</head>
<body>
<table border="1">
<tr>
<th>Lettera</th>
<th>Valore</th>
<th>Valore Medio</th>
<th>Commento</th>
</tr>
<?php
for($i=0;$i< count($arrayLettere);$i++){
echo "<tr><td>{$arrayLettere[$i]}</td>";
echo "<td>{$arrayValori[$i]}</td>";
echo "<td>{$arrayMedie[$arrayLettere[$i]]}</td>";
echo "<td>{$arrayCommenti[$i]}</td></tr>";
}
?>
</table>
</body>
</html>