Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2011
    Messaggi
    420

    semplice funzione ricorsiva

    Ciao a tutti...
    Sto provando a scrivere quella che pensavo fosse una semplicissima funzione, ma dopo oltre due ore, ho partorito solo una mezza schifezza...
    Quelo che dovrei ottenere è questo:
    estrarre 3 oggetti casuali da un insieme di 7 (indicati per semplicità con i numeri da 1 a 7) e ad ognuno di loro attribuire il valore 3; se estraggo 2 volte lo stesso oggetto, il valore di quell'oggetto diventa 6 e se estraggo tutte e 3 le volte lo stesso, diventa 9.
    Tutto qui...
    Poichè nn riuscivo a farlo in maniera ricorsiva, ho provato a farlo "linearmente" ma oltre a non funzionare, mi rendo conto che fa davvero pena...

    Codice PHP:
    $oggetto = array(0,0,0);
    $valore = array(0,0,0);

    $oggetto[0] = rand(0,6);
    $valore[0] = 3;

    $oggetto[1] = rand(0,6);
    if (
    $oggetto[1] == $oggetto[0])  {$valore[0] == 6;}
    else{
    $valore[1] == 3;}

    $oggetto[2] = rand(0,6);
    if ((
    $oggetto[2] == $oggetto[0]) && ($oggetto[1] == $oggetto[0]))  {
        
    $valore[0] == 9;
    }elseif (
    $oggetto[2] == $oggetto[1]) {
        
    $valore[1] == 6;
    }else {
        
    $valore[2] == 3;
    }
        
        
    echo 
    $oggetto[0]." ".$oggetto[1]." ".$oggetto[2];
    echo 
    "
    "
    ;
    echo 
    $valore[0]." ".$valore[1]." ".$valore[2]; 

  2. #2
    Utente di HTML.it
    Registrato dal
    Sep 2011
    Messaggi
    420
    Ok.. sono un pirla...
    Sistemati tutti i doppi =
    Così funziona, ma mi aiutereste a scriverla in maniera ricorsiva?

  3. #3
    non mi pare sia necessaria una funzione ricorsiva, anche perchè non riesco a definire una Fn(1) e una Fn(N) per impostarla. Un esempio diverso:

    Codice PHP:
    //inizializzo gli oggetti da estrarre
    $objects = array();
    for(
    $i=0;$i<7;$i++)
        
    $objects[] = "obj$i";

    function 
    estrai($objects=array(),$max=3,$base=3,$moltiplicatore=2){

        
    $estratti = array();
        for(
    $i=0;$i<$max;$i++){
            
    $indx rand(0,count($objects)-1); //estrao un oggetto a caso
            
    if(!array_key_exists($objects[$indx],$estratti)) 
            
    $estratti[$objects[$indx]]=$base//mai estratto, assegno come valore estrazione il valore $base
            
    else
            
    $estratti[$objects[$indx]] *= $moltiplicatore//già estratto, moltiplico il valore accumulato per $moltiplicatore
        
    }    
        return 
    $estratti;
    }

    print_r(estrai($objects)); 
    per il tuo caso
    IP-PBX management: http://www.easypbx.it

    Old account: 2126 messages
    Oldest account: 3559 messages

  4. #4
    Codice PHP:
    <?php
    class Object {
        private 
    $name;
        private 
    $value;

        public function 
    __construct($name ""$value 0) {
            
    $this->name $name;
            
    $this->value $value;
        }

        public function 
    getName() {
            return 
    $this->name;
        }
        public function 
    setName($name) {
            
    $this->name $name;
        }
        public function 
    getValue() {
            return 
    $this->value;
        }
        public function 
    setValue($value) {
            
    $this->value $value;
        }
    }


    function 
    evaluateObjects($objects) {
        
    $index rand(06);
        
    $objects[$index]->setValue($objects[$index]->getValue() + 3);
    }

    $objects = array(
        
    => new Object("Primo"),
        
    => new Object("Secondo"),
        
    => new Object("Terzo"),
        
    => new Object("Quarto"),
        
    => new Object("Quinto"),
        
    => new Object("Sesto"),
        
    => new Object("Settimo")
    );

    for (
    $i 0$i 3$i++) {
        
    evaluateObjects($objects);
    }

    print_r($objects);
    ?>
    "Mai discutere con un idiota. Ti trascina al suo livello e ti batte con l'esperienza." (Oscar Wilde)

  5. #5
    Utente di HTML.it
    Registrato dal
    May 2012
    Messaggi
    213
    Non so se ho capito bene il funzionamento del tuo programmino però io ti consiglierei in alternativa a tutti quei costrutti di selezione, questo:

    Codice PHP:
    <?php
    $oggetto 
    = array(0,0,0);
    $valore = array(0,0,0);

    $oggetto[0] = rand(0,6);
    $valore[0] = 3;

    for(
    $i 1$i 3$i++)
    {
        
    $oggetto[$i] = rand(0,6);
        
    $valore[$i] = 3;
        for(
    $j 0$j $i$j++)
        {
            if(
    $oggetto[$i] == $oggetto[$j])
            {
                
    $valore[$j] += 3;
            } else
            {
                
    $valore[$i] = 3;
            }
        }
    }
    echo 
    $oggetto[0]." ".$oggetto[1]." ".$oggetto[2];
    echo 
    "
    "
    ;
    echo 
    $valore[0]." ".$valore[1]." ".$valore[2];
    ?>

  6. #6
    Utente di HTML.it
    Registrato dal
    Sep 2011
    Messaggi
    420
    Perfetto ragazzi, grazie infinite

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.