Visualizzazione dei risultati da 1 a 6 su 6

Discussione: media valori

  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2011
    Messaggi
    19

    media valori

    ciao!scusate vi sembrerà una domanda stupida ma davvero non riesco a darne fuori!! devo tro vare un valore compreso tra una media(dei numeri che vanno da 160 a 215 e da 150 a 175) e un +/- 6%...cioè come calcolare questo valore..grazie mille!ho provato di tutto!!graziee

  2. #2
    Non ho ben capito perché la domanda è un pò incasinata...
    Devi trovare una media di numeri? Il calcolo non è difficile no?

    NUMERO 1 + NUMERO N / N

    dove N è il totale dei numeri...

    meglio ancora se ho capito bene nel tuo caso perché con un for faresti in un attimo... prova a riformulare...
    CrystalSoft | Software House & Web Agency di WinRefine, Mercante in Fiera e altro...
    Annunci Zoo | Annunci gratuiti per il mondo degli Animali
    ElettroMercatino | Annunci a tema Informatico ed Elettronico

  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2011
    Messaggi
    19
    si devo usare il for ed è come dici tu..solo che parlo di array quindi non so come fare!provo a scriverti il testo del problema xk hai ragione...la domanda è incasinata!MA non sapevo come altro spiegarlo..
    --->inserire in un array,con random,150letter 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.
    ecco..non capisco come calcolare questa media!grazie mille

  4. #4
    Utente di HTML.it L'avatar di Grino
    Registrato dal
    Oct 2004
    Messaggi
    739
    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;$icount($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>
    Siamo sempre troppo gelosi delle nostre grandi piccole opere! - Grino inedito.
    Lavori e Lavoretti

  5. #5
    Utente di HTML.it L'avatar di Grino
    Registrato dal
    Oct 2004
    Messaggi
    739
    Mi sono accorto che c'è un piccolo bug!... Potrebbe succedere che una lettera non sia mai estratta. In tal caso $qta[$key] rimarrebbe a 0 nella funzione CalcolaArrayMedie producendo un errore di division by zero. Segue la funzione con patch:
    Codice PHP:
    //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)
            if(
    $qta[$key])                          //patch al bug!
               
    $medie[$key]=$value/$qta[$key];
            
        return 
    $medie;

    Non occorre settare un valore per $medie[$key] se $qta[$key]==0, perchè se il $key è una lettera mai estratta, i suoi valori medi non saranno mai richiesti.

    Che bel giochino!
    Siamo sempre troppo gelosi delle nostre grandi piccole opere! - Grino inedito.
    Lavori e Lavoretti

  6. #6
    Utente di HTML.it
    Registrato dal
    Feb 2011
    Messaggi
    19
    grazie milleeeeeeeeeee!!!non so davvero come ringraziarti!!! ^^ grazie,grazie e ancora grazie!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.