Visualizzazione risultati 1 fino 19 di 19

Discussione: Forse serve la funzione Rand?

  1. #1
    Guest

    Predefinito Forse serve la funzione Rand?

    Ciao a Tutti, ho tre monete dove la "testa" vale 10 e la "croce" vale 5.
    Devo "lanciare" lanciare le monete per 10 volte e sommare la combinazione (testa e croce) ad ogni lancio delle tre monete .

    Quale suggerimento mi offrite per realizzare uno script in php?

    Ringrazio e saluto
    Xoops

  2. #2
    Guest

    Predefinito

    sì, utilizza random per 2 valori (1 e 2), poi un ciclo che lo esegue quante volte vuoi tu e dentro ad esso un if che controlla il valore "testa =1, croce =2" e in base a questo aggiunge 5 o 10 ;)

    E' un'esercizio per la scuola?
    Vuoi un esempio?

  3. #3
    Guest

    Predefinito

    Grazie Comunitavirtuali, si un esempio mi aiuterebbe moltissimo... è un grado di difficoltà che non credo di superare da solo.
    Ciao

  4. #4
    Guest

    Predefinito

    è un grado di difficoltà che non credo di superare da solo.
    @.@ wow...

    Codice PHP:
    <?php
    $lanci
    = 30;
    $tot =0;
    for (
    $mul = 1; $mul <= $lanci; ++$mul) {
    $moneta= mt_rand(0,1); // 0= testa e 1= croce
    if($moneta==0) $tot= $tot+5;
    if(
    $moneta==1) $tot= $tot+5;
    }
    echo
    $tot;
    ?>
    Non l'ho provata ma dovrebbe andare ^^

  5. #5
    Guest

    Predefinito

    Ringrazio tantissimo ... ma c'e' un errore (credo di esser io a sbagliare)

    Parse error: syntax error, unexpected ';' in /home/virtualc/public_html/prova.php on line 4

    Saluti

  6. #6
    Guest

    Predefinito

    Posta il codice che hai usato, quello non ha errori di sintassi...
    l'unico errore (distraction), mac, che hai fatto è che hai messo sia nello 0 che nell'uno il 5 ^^
    quindi, xoops, sostituisci il secondo 5 con un 10 :)

    EDIT

    O meglio ancora io farei così per risparmiare if; faccio un numero casuale da 1 a 2, e moltiplico il risultato per 5

    Codice PHP:
    <?php
    $lanci
    = 30;
    $tot = 0;
    for(
    $mul=1;$mul<=$lanci;++$mul){
    $moneta = mt_rand(1,2); // 1 = croce e 2 = testa
    $tot += $moneta*5;
    }
    echo
    $tot;
    ?>
    Ultima modifica di Zorinik : 11-10-2008 alle ore 20.10.10

  7. #7
    Guest

    Predefinito

    Grazie Ragazzi siete dei Maghi del php,

    ora dopo una bella nottata di lavoro per comprendere il vostro codice sono arrivato a questo risultato

    <?php
    $lanci = 3;
    $tot =0;
    for ($mul = 1; $mul <= $lanci; ++$mul) {
    $moneta= mt_rand(0,1); // 0= testa e 1= croce
    if($moneta==0) $tot= $tot+2;
    if($moneta==1) $tot= $tot+3;
    }
    echo "$tot";
    ?>

    Il problema che devo affrontare ora è che il risultato del ciclo for qui sopra lo devo calcolare per 5 volte

    Suggerimenti? Magari prima di postare il codice "bellochefatto" ditemi l'assunto teorico che lo sottende ... provo io a smanettare con il php :-))

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

    Predefinito

    Citazione Originalmente inviato da Xoops Visualizza messaggio
    ... Suggerimenti? Magari prima di postare il codice "bellochefatto" ditemi l'assunto teorico che lo sottende ... provo io a smanettare con il php :-))
    Provato ad inserire il ciclo del lancio di dadi... dentro un altro ciclo che venga eseguito esattamente 5 volte?

    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...

  9. #9
    Guest

    Predefinito

    Codice PHP:
    <?php
    $lanci
    = 3;
    $tot =0;
    for (
    $mul = 1; $mul <= $lanci; ++$mul) {
    $moneta= mt_rand(0,1); // 0= testa e 1= croce
    if($moneta==0) $tot= $tot+2;
    if(
    $moneta==1) $tot= $tot+3;
    }
    echo
    "$tot";
    ?>
    e puoi metterlo così;
    Codice PHP:
    <?php
    $lanci
    = 3;
    $tot =0;
    $a=0;
    while (
    $a <= 5) {
    for (
    $mul = 1; $mul <= $lanci; ++$mul) {
    $moneta= mt_rand(0,1); // 0= testa e 1= croce
    if($moneta==0) $tot= $tot+2;
    if(
    $moneta==1) $tot= $tot+3;
    }
    $a++;
    echo
    'lancio n°: ' . $a . '<br>risultato: ';
    echo
    "$tot <br><br>";
    }
    ?>
    dovrebbe andare, ciao

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

    Predefinito

    Citazione Originalmente inviato da lol21 Visualizza messaggio
    ... dovrebbe andare, ciao
    No, quel ciclo viene eseguito 6 volte, non 5... la correzione non la posto visto che non è (ancora) richiesta la pappa pronta...
    Inoltre, forse è richiesto anche che il totale non sia cumulato tra le varie prove...

    Statemi bene...
    Ultima modifica di dementialsite : 12-10-2008 alle ore 12.31.59
    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...

  11. #11
    Guest

    Predefinito

    Grazie a Tutti e complimenti per il vostro PHP...

    Lol21 il codice postato
    <?php
    $lanci = 3;
    $tot =0;
    $a=0;
    while ($a <= 5) {
    for ($mul = 1; $mul <= $lanci; ++$mul) {
    $moneta= mt_rand(0,1); // 0= testa e 1= croce
    if($moneta==0) $tot= $tot+2;
    if($moneta==1) $tot= $tot+3;
    }
    $a++;
    echo 'lancio n°: ' . $a . '<br>risultato: ';
    echo "$tot <br><br>";
    }
    ?>

    Restituisce nella pagina web :
    lancio n°: 1
    risultato: 8

    lancio n°: 2
    risultato: 16

    lancio n°: 3
    risultato: 23

    lancio n°: 4
    risultato: 31

    lancio n°: 5
    risultato: 38

    lancio n°: 6
    risultato: 47

    /////

    Il codice
    <?php
    $lanci = 3;
    $tot =0;
    for ($mul = 1; $mul <= $lanci; ++$mul) {
    $moneta= mt_rand(0,1); // 0= testa e 1= croce
    if($moneta==0) $tot= $tot+2;
    if($moneta==1) $tot= $tot+3;
    }
    echo "$tot";
    ?>


    restuisce nella pagina web :

    7

    (o comunque un numero tra 6 e 9) ed è quello che cerco.
    ////////////////////////////////////////////////////////////////////////////////////////

    Forse sbaglio io a descrivere l'operazione che voglio compiere:

    ecco il problema: posseggo tre monete ogni moneta ha una testa che vale 2 e una croce che vale 3.

    Lancio queste monete la prima volta e quale risulatato mi offrono?

    Lancio le monete una seconda volta e quale risultato mi offrono?

    Lancio le monete una terza volta e quale risultato mi offrono?

    questo lancio lo termino alla sesta volta.

    Ora il risultato dei sei lanci lo voglio valorizzare in una variabile ma non in una somma bensì in un valore che deve essere ordinato a mo' di colonna d'organo ossia un valore sopra l'altro .
    Forse chiedo troppo e/o esprimo male il problema teorico...

    Continuo a smanettare.
    Ciao e Grazie ancora
    Xoops.

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

    Predefinito

    Il problema l'hai espresso bene, e ti confermo che basta chiudere in un altro ciclo tutto quanto compreso tra le righe $tot = 0; (compresa) e echo "$tot<br/>"; (compresa, il br l'ho aggiunto io in modo che il testo ti vada a capo). Tutto qui.

    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...

  13. #13
    L'avatar di foreach
    foreach non è connesso Altervistiano Junior
    Data registrazione
    11-06-2008
    Residenza
    3 metri sotto terra
    Messaggi
    501

    Predefinito

    Prova questo:

    Codice PHP:
    <?php
    $lanci
    = 6;
    // --------------
    $tot = 0;
    $latt = 1;
    $nomi = array("Testa", "Croce");
    $valori = array(2, 3);
    echo
    "Gioco a testa o croce per ".$lanci." lanci<br />\n<br />\n";
    while(
    $latt <= $lanci) {
    $tc = rand(0, 1);
    echo
    "Lancio n ".$latt."<br />\nRisultato: ".$nomi[$tc]."<br />\nPunteggio: ".$valori[$tc]."<br />\n<br />\n";
    $tot += $valori[$tc];
    $latt++;
    }
    echo
    "Punteggio totale: ".$tot;
    ?>

    Facci sapere...
    Ultima modifica di foreach : 12-10-2008 alle ore 22.17.20
    Codice PHP:
    foreach($vettore as $chiave => $valore) {
    echo 
    "Ciao";


  14. #14
    Guest

    Predefinito

    Grazie a Tutti, grazie Foreach, si un gran bel pezzo di codice così come lo sono gli altri esempi ma con il tuo script simulo il lancio di una sola moneta per volta, non di tre monete per lancio .
    Ecco l'output

    Gioco a testa o croce per 6 lanci

    Lancio n 1
    Risultato: Croce
    Punteggio: 3

    Lancio n 2
    Risultato: Croce
    Punteggio: 3

    Lancio n 3
    Risultato: Croce
    Punteggio: 3

    Lancio n 4
    Risultato: Testa
    Punteggio: 2

    Lancio n 5
    Risultato: Testa
    Punteggio: 2

    Lancio n 6
    Risultato: Testa
    Punteggio: 2

    Punteggio totale: 15

    Sto smanettando ma sono ancora in alto mare...

    Ringrazio e saluto.

  15. #15
    L'avatar di foreach
    foreach non è connesso Altervistiano Junior
    Data registrazione
    11-06-2008
    Residenza
    3 metri sotto terra
    Messaggi
    501

    Predefinito

    Prego

    L'array $nomi contiene i nomi dei lanci, l'array $valori i punti dei lanci nello stesso ordine di $nomi.

    Citazione Originalmente inviato da Xoops Visualizza messaggio
    Sto smanettando ma sono ancora in alto mare...
    E che altro ti serve che stai smanettando?





    foreach
    Codice PHP:
    foreach($vettore as $chiave => $valore) {
    echo 
    "Ciao";


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

    Predefinito

    Insomma... bisogna proprio fornirvi la pappa pronta...
    Codice PHP:
    <?php
    $lanci
    = 6;
    $monete = 3;
    $facce = array ('testa', 'croce');
    $punti = array (2, 3);
    $totale = 0;
    for (
    $i = 0; $i < $lanci; $i++)
    {
    echo (
    'Test #' . ($i + 1));
    $score = 0;
    for (
    $j = 0; $j < $monete; $j++)
    {
    $val = rand (0, 1);
    echo (
    'Lancio #' . ($j + 1) . ' - risultato: ' . $facce[$val]);
    $score += $punti[$val];
    }
    echo (
    'Punteggio totale del test = ' . $score);
    $totale += $score;
    }
    echo (
    'Punteggio totale dell\'esperimento = ' . $totale);
    ?>
    A te il compito di dare all'output del codice un formato più decente...

    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...

  17. #17
    Guest

    Predefinito

    Ragazzi, ma è impressionante la confidenza che avete con il PHP ...
    Insomma... bisogna proprio fornirvi la pappa pronta...
    mi credete se vi dico che è particolarmente frustrante per me ricevere il codice già "bellochefatto"??

    Ultima richiesta: non è che potete commentare lo script così che io possa comprendere al 100% i vari passaggi e correlare il codice con le operazioni che volge?
    Sarebbe molto didattico per tutti.

    1000 Grazie :-))
    Posto il codice con le interruzioni di linea per una lettura più gradevole (qualcosa ho fatto anch'io)
    Codice PHP:
    <?php
    $lanci
    = 6;
    $monete = 3;
    $facce = array ('testa', 'croce');
    $punti = array (2, 3);
    $totale = 0;
    for (
    $i = 0; $i < $lanci; $i++)
    {
    echo (
    '<br/>'.'Test #'. ($i + 1).'<br/>');
    $score = 0;
    for (
    $j = 0; $j < $monete; $j++)
    {
    $val = rand (0, 1);
    echo (
    'Lancio #'. ($j + 1) .' - risultato:'.$facce[$val].'<br/>');
    $score += $punti[$val];
    }
    echo (
    'Punteggio totale del test =' . $score.'<br/>');
    $totale += $score;
    }
    echo (
    '<br/>'.'Punteggio totale dell\'esperimento ='.$totale);
    ?>
    Ecco l'output sul web
    Codice:
    Test #1
    Lancio #1 - risultato:testa
    Lancio #2 - risultato:croce
    Lancio #3 - risultato:croce
    Punteggio totale del test =8
    
    Test #2
    Lancio #1 - risultato:croce
    Lancio #2 - risultato:testa
    Lancio #3 - risultato:testa
    Punteggio totale del test =7
    
    Test #3
    Lancio #1 - risultato:croce
    Lancio #2 - risultato:testa
    Lancio #3 - risultato:testa
    Punteggio totale del test =7
    
    Test #4
    Lancio #1 - risultato:croce
    Lancio #2 - risultato:croce
    Lancio #3 - risultato:croce
    Punteggio totale del test =9
    
    Test #5
    Lancio #1 - risultato:croce
    Lancio #2 - risultato:testa
    Lancio #3 - risultato:croce
    Punteggio totale del test =8
    
    Test #6
    Lancio #1 - risultato:testa
    Lancio #2 - risultato:testa
    Lancio #3 - risultato:croce
    Punteggio totale del test =7
    
    Punteggio totale dell'esperimento =46
    Bello mi piace il vostro codice ma...
    ora vorrei far in modo che il "Punteggio totale del test =8" di ogni lancio corrispondesse a una lettera dell'alfabeto o meglio a un numero tipo e credo serva un bel ciclo if else.
    La correlazione tra il punteggio totale e la lettera/immagine deve avvenire dall'ultimo lancio (il VI) al primo lancio e qui credo che un array reverse mi possa aiutare cosa ne pensate???
    No codice già pronto per cortesia .Grazie

    [DS] Ho messo un po' di tag di codice al tuo post... così si legge meglio, non trovi?
    Ultima modifica di dementialsite : 13-10-2008 alle ore 15.36.14

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

    Predefinito

    Intanto ti riscrivo l'ultimo tuo codice con un po' di commenti:
    Codice PHP:
    <?php
    // (1) numero totale di prove
    $lanci = 6;

    // (2) numero di lanci per ogni prova
    $monete = 3;

    // (3) definisce l'array con i possibili risultati...
    $facce = array ('testa', 'croce');

    // (4) ... e i corrispondenti punteggi
    $punti = array (2, 3);

    // (5) inizializza il punteggio (totale)
    $totale = 0;

    // (6) esegui $lanci prove in questo modo:
    for ($i = 0; $i < $lanci; $i++)
    {
    echo (
    '<br/>'.'Test #'. ($i + 1).'<br/>');

    // (7) inizializza il punteggio (parziale)
    $score = 0;

    // (8) esegui $monete lanci per ogni prova in questo modo:
    for ($j = 0; $j < $monete; $j++)
    {
    // (9) scegli un valore casuale tra 0 (testa) e 1 (croce)
    $val = rand (0, 1);

    // (10) stampa il risultato...
    echo ('Lancio #'. ($j + 1) .' - risultato:'.$facce[$val].'<br/>');

    // (11) ... e incrementa il punteggio della prova con il valore corrispondente
    $score += $punti[$val];
    }

    // (12) finiti i lanci, stampa il risultato della prova e aggiorna il totale complessivo
    echo ('Punteggio totale del test =' . $score.'<br/>');
    $totale += $score;
    }

    // (13) finite tutte le prove, stampa il risultato totale
    echo ('<br/>'.'Punteggio totale dell\'esperimento ='.$totale);
    ?>
    Se ho capito bene quello che devi fare, devi fare queste modifiche:
    - prima di iniziare il ciclo più grande, devi definire la "mappa" tra i punteggi ottenuti dai lanci e le lettere dell'alfabeto che vuoi ottenere. Puoi sempre usare un array, ma dato che devi definire appositamente i valori tra il 6 e il 9, ti conviene usare la sintassi chiave => valore (ne trovi un esempio qui: http://it.php.net/manual/it/function.print-r.php)
    - sempre prima di iniziare il ciclo più grande, devi anche preparare l'array destinato a contenere i risultati delle prove (a tua scelta se devono o no essere convertiti tramite la mappa di cui sopra). Basta una banale riga $risultati = array();
    - al termine del ciclo più grande (prima dell'eventuale ripetizione), dovrai archiviare il risultato nel suddetto array di risultati. Puoi scrivere tranquillamente $risultati[$i] = ...; (completa!), anche se non hai definito esplicitamente una dimensione penserà PHP a gestire il tutto
    - infine, terminato tutto il ciclo, devi stampare i risultati (eseguendo la conversione, se non l'hai fatta insieme all'archiviazione). Ma perché mettersi a rovesciare l'array come un calzino, quando basta esaminarlo al contrario?

    Spero di averti dato qualche dritta... 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...

  19. #19
    Guest

    Predefinito

    Ringrazio Tutti , Grazie Dementialsite.
    Ora mi concentro e vedo cosa riesco a elaborare.

    Ringrazio ancora Tutti per i suggerimenti.

Regole di scrittura

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