Visualizzazione risultati 1 fino 9 di 9

Discussione: Funzione Random - Priorità -

  1. #1
    L'avatar di Celtenn
    Celtenn non è connesso Utente giovane
    Data registrazione
    10-11-2005
    Residenza
    Laboratorio Mdd
    Messaggi
    57

    Post Funzione Random - Priorità -

    Inanzitutto mi scuso per aver aperto due thread nel giro di 2 giorni.

    Vorrei solamente sapere se è possibile dare una certa priorità alla seguente funzione:

    Codice PHP:
    $X=rand(0,2);
    ovvero, mi spiego. Vorrei che ad esempio l'array 1 (non 0 ne 2) comparisse leggermente più volte rispetto agli altri due array...si può fare? (vorrei evitare di scrivere più array uguale all'1, per farlo comparire più volte.)


    Grazie!
    L'Oscuro Celtenn.

    Colui che è, che è stato, e che sempre e comunque ed evidentemente sarà. !=.




  2. #2
    L'avatar di silverseraph
    silverseraph non è connesso AlterGuru
    Data registrazione
    27-04-2005
    Residenza
    Localhost
    Messaggi
    1,104

    Predefinito

    Non credo sia possibile, sfogliando il manuale di PHP.net sembra che non si possa assegnare una priorità a rand().

  3. #3
    L'avatar di dementialsite
    dementialsite non è connesso Super Moderatore
    Data registrazione
    19-10-2004
    Residenza
    fuori Padova
    Messaggi
    5,046

    Predefinito

    Tipicamente le funzioni di generazione casuale (non solo quella di PHP) hanno una distribuzione uniforme dei dati, che non è modificabile.

    Puoi però sfruttare un po' di teoria delle probabilità e sommare più volte questa variabile, in modo da ottenere una nuova variabile che "privilegi" i valori più vicini alla media (come nel tuo caso). In definitiva, potresti fare così:
    Codice PHP:
    // attenzione! Non è la stessa cosa scrivere (3 * rand(0,2)) / 3 :-D
    $X = (rand(0,2) + rand(0,2) + rand(0,2)) / 3;
    Stammi bene...
    Le questioni tecniche hanno risposte migliori nel forum pubblico, non trovi?

    When you don't know your next step... improvise

    ALTERVISTA WANTS YOU!
    Vuoi diventare moderatore su AlterVista? Scopri come...

  4. #4
    Guest

    Predefinito

    :D io pensavo :
    puoi mettere Random da 0 a 100 , e poi con un if privilegi i numeri maggiori di 70 (che son meno) oppure i numeri minori di 99 (che son tanti ^_^)

    Edit:
    ç_ç preceduto ç_ç
    Ultima modifica di comunitavirtuali : 17-02-2007 alle ore 17.30.46

  5. #5
    L'avatar di heracleum
    heracleum non è connesso Utente storico
    Data registrazione
    21-01-2004
    Messaggi
    3,333

    Predefinito

    Sì la soluzione di demential è ottima, soprattutto nel caso (fortuito?) in cui a te interessa esattamente che il valore nel mezzo (tra 0 e 2, l'1) venga pescato con maggior frequenza.
    Ma quello che mi chiedo è:
    - hai detto per puro esempio che vuoi che l'1 esca con maggior priorità rispetto a 0 e 2 oppure è esattamente la tua concreta necessità?

    Perché è ovvio che se -facciamo un esempio- in realtà ti servisse che il numero 2 (tra 0 e 2) avesse una priorità la soluzione (media) di dementual non farebbe affatto al caso tuo.

    Ti dico come io faccio in questi casi:
    diciamo appunto che voglio che tra 0 e 2 il numero 2 esca con una probabilità TRIPLA rispetto a 0 e 1, farei così:
    Codice PHP:
    $x = rand(0,5);
    if (
    $x>2)
    $x = 2;
    OK? si è capito?
    rand(0,5) in realtà tira fuori numeri da 0 a 4, quindi 2 numeri in più rispetto al range 0-2, quindi considero le uscite di 3 e 4 come sempre valide per la probabilità del 2. Per questo se il numero supera il 2 assegno a $x il valore 2 comunque.
    Diciamo che con questo metodo hai un maggiore controllo su l'effettiva probabilità nella priorità del numero privilegiato.

    Traducendo lo stesso metodo per la tua richiesta del tuo post, il codice sarebbe:
    Codice PHP:
    $x = rand(0,5);
    if (
    $x>2)
    $x = 1;
    1 ha la probabilità tripla di uscire rispetto a 0 e 2.

    E insomma, seppur php preveda innumerevoli funxioni di utilità.. non è che gli possiamo chiedere proprio tutto
    quindi si opta per il "bricolage", il fai-da-te.
    Ultima modifica di heracleum : 17-02-2007 alle ore 18.31.12
    Avvertimento: richiedere in privato questioni tecniche produrrà inevitabilmente una supercazzola prematurata come risposta. (5 served)

  6. #6
    L'avatar di Celtenn
    Celtenn non è connesso Utente giovane
    Data registrazione
    10-11-2005
    Residenza
    Laboratorio Mdd
    Messaggi
    57

    Predefinito

    ringrazio Heraclerum per il post qui sopra:

    - hai detto per puro esempio che vuoi che l'1 esca con maggior priorità rispetto a 0 e 2 oppure è esattamente la tua concreta necessità?
    Diciamo che piuttosto è una necessità...=P

    cmq grazie, ora testo lo script....vediamo se funziona! =D




    p.s. credo la tua sintassi sia sbagliata:
    Codice PHP:
    $x = rand(0,5);
    if (
    $x>2) {
    $x = 2;
    }
    mancavano le graffe...
    Ultima modifica di Celtenn : 18-02-2007 alle ore 11.11.53 Motivo: errore
    L'Oscuro Celtenn.

    Colui che è, che è stato, e che sempre e comunque ed evidentemente sarà. !=.




  7. #7
    L'avatar di silverseraph
    silverseraph non è connesso AlterGuru
    Data registrazione
    27-04-2005
    Residenza
    Localhost
    Messaggi
    1,104

    Predefinito

    Quando nell'if c'è una sola operazione, le graffe possono essere omesse.

  8. #8
    L'avatar di heracleum
    heracleum non è connesso Utente storico
    Data registrazione
    21-01-2004
    Messaggi
    3,333

    Predefinito

    Celtenn:
    confermo riguardo le graffe :)

    Per il resto invece... non so se ho posto bene la domanda allora e soprattutto se ho capito la tua risposta riguardo la tua concreta esigenza riguardo al numero che deve uscire con probabilità maggiore.
    Diamo per scontato che a te serva che il numero 1 esca con probabilità tripla rispetto a 0 e 2. OK?

    Solo che nel codice che hai riportato (accennando alle graffe mancanti) hai citato il codice per un'altra esigenza (che il n. 2 esca con prob. tripla).

    Ripeto per la tua esigenza (il n. 1 esca con prob. tripla) il codice è il seguente:
    Codice PHP:
    $x = rand(0,5);
    if (
    $x>2)
    $x = 1;
    Ma vogliamo e-sa-ge-ra-re 'siori :
    se lo vuoi su UNA riga sola di codice (ovvero meno leggibile ma molto più figo )
    avrai lo stesso risultato con:
    Codice PHP:
    $x = (($x= rand(0,5)) > 2)? 1 : $x;
    te gusta?

    L'avrei proposta subito .. ma sicuramente sarebbe stat meno chiara...
    Avvertimento: richiedere in privato questioni tecniche produrrà inevitabilmente una supercazzola prematurata come risposta. (5 served)

  9. #9
    L'avatar di silverseraph
    silverseraph non è connesso AlterGuru
    Data registrazione
    27-04-2005
    Residenza
    Localhost
    Messaggi
    1,104

    Predefinito

    Buona la soluzione di Heracleum, per Celtenn se non dovesse comrpendere quella riga, è molto semplice: l'operatore ? si verifica quando la condizione è vera (nel nostro caso (($x= rand(0,5)) > 2)) mentre l'operatore : corrisponde all'else.

    ciao ciao

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •