Random in pagina web

« Older   Newer »
 
  Share  
.
  1. Imagination
        +1   -1
     
    .

    User deleted


    Come si fa in un documento web (PHP, HTML o quale serve) a creare una lista di possibilità con le relative percentuali e poi fare in modo che il browser ne scelga uno random seguendo quelle percentuali?

     
    Top
    .
  2.     +1   -1
     
    .
    Avatar


    Bronzo alla 3a Olimpiade Internazionale di Scienze della Terra, 2009; Argento alla 23a Olimpiade Internazionale di Biologia, 2012

    Group
    Admin
    Posts
    21,185
    Location
    Lecce

    Status
    Offline
    In javascript puoi fare così:
    HTML
    <script>var num=Math.random();</script>

    E ottieni un numero casuale compreso tra 0 e 1.
    Poi, diciamo che hai tre possibilità: a, b, c.
    a ha una probabilità dell'50%, b del 20% e c del 30%
    Si può ragionare in questo modo: di 100 casi, 50 devono favorire a, 20 b e 30 c.
    Innanzitutto, trasformiamo il numero in modo che vada da 1 a 100:
    HTML
    <script>var num=Math.floor(Math.random()*101);</script>

    Poi, diciamo che per i valori del numero da 1 a 50 (incluso), ti dia a, per num tra 50 e 70, b, per num maggiore di 70, c.
    HTML
    <script>var num=Math.floor(Math.random()*101);
    var a = false;
    var b = false;
    var c = false;
    if (num < 51)
    {
    a = true;
    b = false;
    c = false;
    }
    else
    {
    if (num < 71)
    {
    b = true;
    a = false;
    c = false;
    }
    else
    {
    c = true;
    a = false;
    b = false;
    }
    }</script>

    Ora ti ritrovi tre variabili booleane che ti dicono se la possibilità corrispondente è valida, e puoi farci quello che vuoi xD
    Ovviamente questo metodo garantisce risultati che si discostano un bel po' da quelli teorici, almeno temo xD, ma è troppo complicato fare in modo che coincidano xD
    Un metodo per migliorare sarebbe associare ad ogni possibilità anzichè i primi 50 numeri, 50 numeri a caso e così via, ma ora non ho tempo per scriverlo, poi in caso dopo xD
     
    Top
    .
  3.     +1   -1
     
    .
    Avatar


    Bronzo alla 3a Olimpiade Internazionale di Scienze della Terra, 2009; Argento alla 23a Olimpiade Internazionale di Biologia, 2012

    Group
    Admin
    Posts
    21,185
    Location
    Lecce

    Status
    Offline
    Ok, parte due xD
    Innanzi tutto, creiamo un array di numeri per ognuna delle possibilità. Poi, inseriamo in ogni array dei numeri che rappresentano quelli favorevoli ad ogni possibilità. Ovviamente, non è semplice come sembra xD: per evitare che un numero sia inserito più di una volta, creiamo prima un array con tutti i numeri da 1 a 100, poi gli diciamo di prendere un numero a caso da 0 a 99 e inserire il valore dell'elemento dell'array con quell'indice, quindi di eliminare quell'elemento; poi di prendere un numero da 0 a 98 e così via.
    Infine, dopo aver stabilito quali sono gli eventi favorevoli ad ogni possibilità, scegliamo un numero a caso da 1 a 100 e vediamo in quale array è contenuto.
    HTML
    <script>var arrA = new Array();
    var arrB = new Array();
    var arrC = new Array();
    var arrNum = new Array();
    for (int i = 0; i < 100; i++)
    {
    arrNum(i) = i + 1;
    }
    var nVFA = 50; //numero dei valori favorevoli ad a
    for (int i = 0; i < nVFA; i++)
    {
    var intervallo = 101 - i;
    var rand = Math.floor(Math.random()*intervallo) - 1;
    arrA[i] = arrNum[rand];
    arrNum.splice(rand, 1);
    }
    var nVFB = 20; //numero dei valori favorevoli a b
    for (int i = 0; i < nVFB; i++)
    {
    var intervallo = 101 - i - nVFA;
    var rand = Math.floor(Math.random()*intervallo) - 1;
    arrB[i] = arrNum[rand];
    arrNum.splice(rand, 1);
    }
    var nVFC = 30; //numero valori favorevoli a c
    for (int i = 0; i < nVFC; i++)
    {
    arrC[i] = arrNum[i]; //qui non c'è bisogno di fare tutto il casino perchè è l'ultimo e i numeri rimasti sono quelli xD
    }
    var numCas = Math.floor(Math.random() * 101); //numero casuale da 1 a 100
    var a = false; //preparo le variabili
    var b = false;
    var c = false;
    for (int i = 0; i < nVFA; i++) //controllo se è favorevole ad a
    {
    if (arrA[i] == numCas)
    {
    a = true;
    b= false;
    c = false;
    }
    }
    if (!a) //controllo se è favorevole a b, ma solo se non è favorevole ad a
    {
    for (int i = 0; i < nVFB; i++)
    {
    if (arrB[i] == numCas)
    {
    a = false;
    b = true;
    c = false;
    }
    }
    }
    if (!a) //se non è favorevole nè ad a nè a b, è per forza favorevole a c xD
    {
    if (!b)
    {
    a = false;
    b = false;
    c = true;
    }
    }</script>

    Anche qui, ti ritrovi con tre booleane che ti dicono se il rispettivo evento si è verificato xD
     
    Top
    .
  4. Imagination
        +1   -1
     
    .

    User deleted


    Ho bisogno del tuo genio xD fatti sentire su MSN xD
     
    Top
    .
  5. BOH
        +1   -1
     
    .

    User deleted


    non leggo tutto il topic che è lungo...la risposta invece deve essere molto semplice

    generi un numero random da 1 a 100 con il codice php che ho postato in questa sezione tempo fa

    poi dichiari x variabili limite

    x=20; y=50;

    a questo punto

    if(rand<x) -> codice x la percentuale <20%
    elseif(rand>=x && rand<y) -> codice x la percentuale tra 20% e 50%
    elseif -> codice per la percentuale tra 50% e 100%
     
    Top
    .
4 replies since 9/4/2010, 14:51   80 views
  Share  
.