Visualizzazione risultati 1 fino 4 di 4

Discussione: problema di Giosefo in php

  1. #1
    Guest

    Predefinito problema di Giosefo in php

    So cercando di realizzare uno script che simuli il problema di Giosefo.
    In pratica il problema di Giosefo è il gioco delle sedie, dove ci sono n bambini e n - 1 sedie.
    Ho scritto questo:
    pag.html:
    Codice HTML:
    <html>
    <head>
    <script type="text/javascript">
    function hidden(id1,id2,id3)
    {
      document.getElementById(id1).style.display='block';
      document.getElementById(id2).style.display='none';
      document.getElementById(id3).style.display='none';
    }
    function all()
    {
      document.getElementById('n').style.display='none';
      document.getElementById('nn').style.display='none';
      document.getElementById('nnn').style.display='none';
    }
    </script>
    <style>
    #n, #nn, #nnn {display: none}
    </style>
    <title>Problema di Giosefo</title>
    </head>
    <body>
    <form action="azione.php" name="giosefo" method="post">
    Quanti partecipanti ci sono?<br>
    4: <input type="radio" value="4" name="part" onclick="hidden('n','nn','nnn')"><br>
    <div id="n">
    Inserisci i nomi dei partecipanti:<br>
    <input type="text" name="p1"><br><br>
    <input type="text" name="p2"><br><br>
    <input type="text" name="p3"><br><br>
    <input type="text" name="p4"><br><br>
    </div>
    5: <input type="radio" value="5" name="part" onclick="hidden('nn','n','nnn')"><br>
    <div id="nn">
    Inserisci i nomi dei partecipanti:<br>
    <input type="text" name="p5"><br><br>
    <input type="text" name="p6"><br><br>
    <input type="text" name="p7"><br><br>
    <input type="text" name="p8"><br><br>
    <input type="text" name="p9"><br><br>
    </div>
    6: <input type="radio" value="6" name="part" onclick="hidden('nnn','n','nn')"><br>
    <div id="nnn">
    Inserisci i nomi dei partecipanti:<br>
    <input type="text" name="p10"><br><br>
    <input type="text" name="p11"><br><br>
    <input type="text" name="p12"><br><br>
    <input type="text" name="p13"><br><br>
    <input type="text" name="p14"><br><br>
    <input type="text" name="p15"><br><br>
    </div>
    <br>
    <input type="submit" value="Gioca!">&nbsp;<input type="reset" value="Cancella" onclick="all()">
    </form>
    </body>
    </html>
    azione.php
    Codice PHP:
    <?php
    $part
    = $_POST['part'];
    $p = array();
    switch(
    $part) {
    case
    "4":
    $p[1] = $_POST['p1'];
    $p[2] = $_POST['p2'];
    $p[3] = $_POST['p3'];
    $p[4] = $_POST['p4'];


    break;
    case
    "5":
    $p[5] = $_POST['p5'];
    $p[6] = $_POST['p6'];
    $p[7] = $_POST['p7'];
    $p[8] = $_POST['p8'];
    $p[9] = $_POST['p9'];
    break;
    case
    "6":
    $p[10] = $_POST['p10'];
    $p[11] = $_POST['p11'];
    $p[12] = $_POST['p12'];
    $p[13] = $_POST['p13'];
    $p[14] = $_POST['p14'];
    $p[15] = $_POST['p15'];
    break;
    }
    $giri = $part - 1;
    //echo $giri."<br>"; debug

    for($i=1;$i<=$giri;$i++) {
    switch(
    $part) {
    case
    "4":
    $rand = mt_rand(1,4);
    break;
    case
    "5":
    $rand = mt_rand(5,9);
    break;
    case
    "6":
    $rand = mt_rand(10,15);
    break;
    }
    echo
    "Giro ".$i.": esce ".$p[$rand]."<br>";
    unset(
    $p[$rand]);
    }
    /*debug
    foreach($p as $index) {
    echo $index."<br>";
    }
    */
    echo "Il vincitore è: ".$p[0]."<br>";
    ?>
    Solo che l'output non va bene, perchè il cilo si esegue solo 2 volte.
    Pagina di prova: http://crashinside.net/esempi/pag.html
    Ultima modifica di gabryhacker : 18-10-2008 alle ore 19.21.00

  2. #2
    L'avatar di Xsescott
    Xsescott non è connesso AlterGuru
    Data registrazione
    08-02-2004
    Messaggi
    1,413

    Predefinito

    Questo script non andrà mai bene,

    il vincitore lo porti a $p[0] ma siccome $p[0] non è inizializzato e la funzione non può shiftare perchè lei elimina igli indici ma non vi è nessun ordinamento, quindi se elimini l'indice 1, il 2 non va a 1, sia perchè come ho già detto non vi è nessun ordinamento e soprattutto perchè tu non l'hai inizializzato p[0], se pur supponendo che rimanesse il primo elemento non lo stamperebbe comunque :P

    comunque ti conviene eliminare gli indici con gli unset e poi recuperi l'ultimo valore con una semplice sottrazione, fai qualcosa del genere:
    Codice:
    $p[1]= "1";
    $p[2]= "2";
    $p[3]= "3";
    $p[4]= "4";
    
    $result = 1 + 2 + 3 + 4;
    $rand = 1;
    unset($p[$rand]);
    $result = $result - $rand;
    $rand = 3;
    unset($p[$rand]);
    $result = $result - $rand;
    $rand = 2;
    unset($p[$rand]);
    $result = $result - $rand;
    
    echo  "siamo in p1= ".$p[1]
           ."<br />"."siamo in p2= ".$p[2]
                    ."<br>siamo in p3= ".$p[3]
                    ."<br>siamo in p4= ".$p[4]
                    ."<br> l'ultimo è:".$p[$result];
    "Quando il potere dell'amore supererà l'amore per il potere il mondo conoscerà la pace" Jimmy Hendrix


    [ Richiesta: http://www.unibologna.eu/ ] --> [Risposta: http://www.magazine.unibo.it/Magazin...al_Portale.htm Morale] -->[ http://www.anti-phishing.it/news/art...s.13062007.php ]
    consoliwebsite.altervista.org

  3. #3
    Guest

    Predefinito

    Ho modificato lo script così:
    Codice PHP:
    <?php
    $part
    = $_POST['part'];
    $p = array();
    switch(
    $part) {
    case
    "4":
    $p[1] = $_POST['p1'];
    $p[2] = $_POST['p2'];
    $p[3] = $_POST['p3'];
    $p[4] = $_POST['p4'];
    $result = 1 + 2 + 3 + 4;


    break;
    case
    "5":
    $p[5] = $_POST['p5'];
    $p[6] = $_POST['p6'];
    $p[7] = $_POST['p7'];
    $p[8] = $_POST['p8'];
    $p[9] = $_POST['p9'];
    $result = 5 + 6 + 7 + 8 + 9;
    break;
    case
    "6":
    $p[10] = $_POST['p10'];
    $p[11] = $_POST['p11'];
    $p[12] = $_POST['p12'];
    $p[13] = $_POST['p13'];
    $p[14] = $_POST['p14'];
    $p[15] = $_POST['p15'];
    $result = 10 + 11 + 12 + 13 + 14 + 15;
    break;
    }
    $rand = 1;
    unset(
    $p[$rand]);
    $result = $result - $rand;
    $rand = 3;
    unset(
    $p[$rand]);
    $result = $result - $rand;
    $rand = 2;
    unset(
    $p[$rand]);
    $result = $result - $rand;
    echo
    "siamo in p1= ".$p[1]
    .
    "<br />"."siamo in p2= ".$p[2]
    .
    "<br>siamo in p3= ".$p[3]
    .
    "<br>siamo in p4= ".$p[4]
    .
    "<br> l'ultimo è:".$p[$result];
    ?>
    Ecco un'output:
    Codice:
    siamo in p1= 
    siamo in p2= 
    siamo in p3= 
    siamo in p4= 4
    l'ultimo è:4
    La pagina di prova è la stessa

  4. #4
    L'avatar di Xsescott
    Xsescott non è connesso AlterGuru
    Data registrazione
    08-02-2004
    Messaggi
    1,413

    Predefinito

    Il mio voleva essere un veloce spunto su qualche controllo, mica uno script completo :P

    Comunque questo dovrebbe funzionare:
    Codice:
    <?php
    $part = $_POST['part'];
    $p = array();
    $fine = 0;
    $inizio = 0;
    $somma = 0;
    
    
    
    switch($part) {
        case "4":
            $p[1] = $_POST['p1'];
            $p[2] = $_POST['p2'];
            $p[3] = $_POST['p3'];
            $p[4] = $_POST['p4'];
            
            $inizio = 1;
            $fine = 4;
            
        break;
        case "5":
            $p[5] = $_POST['p5'];
            $p[6] = $_POST['p6'];
            $p[7] = $_POST['p7'];
            $p[8] = $_POST['p8'];
            $p[9] = $_POST['p9'];
            
            $inizio = 5;
            $fine = 9;
        break;
        case "6":
            $p[10] = $_POST['p10'];
            $p[11] = $_POST['p11'];
            $p[12] = $_POST['p12'];
            $p[13] = $_POST['p13'];
            $p[14] = $_POST['p14'];
            $p[15] = $_POST['p15'];
            
            $inizio = 10;
            $fine = 15;
        break;
    }
    
    $giri = $part - 1;
    
    for($i=$inizio;$i<=$fine;$i++){
    $somma = $somma + $i;   
    }  
    
    for($i=1;$i<=$giri;$i++) {
        $controllo = 0;
        if($part==4) {
            
                
                $rand = mt_rand(1,4);
                if(array_key_exists($rand,$p)){
                   $somma = $somma - $rand;
                   $controllo = 1;
                   }
                 else{
                 
                 $i--;
                 }
           }
          else  if($part==5) {
                $rand = mt_rand(5,9);
                if(array_key_exists($rand,$p)){
                   $somma = $somma - $rand;
                   $controllo = 1;
                   }
                 else{
                 
                 $i--;
                 }
            }
           else {
                $rand = mt_rand(10,15);
                if(array_key_exists($rand,$p)){
                   $somma = $somma - $rand;
                   $controllo = 1;
                   }
                 else{
                 
                 $i--;
                 }
            }
        
        if($controllo == 1){
        echo "Giro ".$i.": esce ".$p[$rand]."<br>";
        unset($p[$rand]);
        }
    }
    
    echo "Il vincitore è: ".$p[$somma]."<br>";
    ?>
    ciao!
    "Quando il potere dell'amore supererà l'amore per il potere il mondo conoscerà la pace" Jimmy Hendrix


    [ Richiesta: http://www.unibologna.eu/ ] --> [Risposta: http://www.magazine.unibo.it/Magazin...al_Portale.htm Morale] -->[ http://www.anti-phishing.it/news/art...s.13062007.php ]
    consoliwebsite.altervista.org

Regole di scrittura

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