Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    algoritmo numeri casuali unici

    Codice PHP:
    function unique_random($n,$tot){
        
    srand ((double) microtime() * 1000000);
        for (
    $i=1$i<=$n;$i++){
            
    $random[$i] = mt_rand (1,$tot);
            
             echo 
    "
    $i : ".$random[$i];
            echo 
    "
    "
    $i ."-> ".$random[$i-1]; /**/
            
    if ($random[$i] == $random[$i-1] ){
                
    $random[1]=$random[2]=0;
                echo 
    "
    n "
    .$n;
                echo 
    "
    tot "
    .$tot;
                
    unique_random($n,$tot);
            }
        }
        return 
    $random;
    }
    $random unique_random(2,4); 
    Un problema che presenta questo algoritmo e' che se trova due numeri uguali alla fine torna 0 cioe' l'inizializzazione dell'array.

    Che ne pensate?
    Come lo risolvereste?
    Trinity
    http://www.vocabolariodidio.it
    http://www.giulianodelena.com
    trova la tua casa per le vacanze
    http://www.salento.lecce.it

  2. #2
    codice:
    class UniqueRandom {
    	
    	var $__container = Array();
    
    	function UniqueRandom( $n, $tot ) {
    		$this->__addNum( $n, $tot );
    	}
    	
    	function get() {
    		return $this->__container;
    	}
    
    	function __addNum( &$n, &$tot ) {
    		srand( (double) microtime() * 1234567 );
    		for( $a = 0; $a < $n; $a++ ) {
    			$num = &rand( 1, $tot );
    			if( in_Array( $num, $this->__container ) ) {
    			        $this->__addNum( $n, $tot );
    			        break;
    			}
    			else {
    				array_push( $this->__container, $num );
    				if( count( $this->__container ) == $n ) {
    					break;
    				}
    			}
    		}
    	}
    }
    
    $random = &new UniqueRandom( 2, 4 );
    var_dump( $random->get() );
    Formaldehyde a new Ajax PHP Zero Config Error Debugger

    WebReflection @WebReflection

  3. #3
    Indubbiamente una soluzione estremamente elegante

    Ho fatto delle indagini su funzioni che non conoscevo bene, le riporto xche' forse potrebbero essere utili a qualcun altro:

    in_Array() Cerca tutti i valori in un array e riporta true se il valore del primo argomento e' stato trovato nell'array del secondo argomento

    array_push() Aggiunge elementi nell'array indicati nel primo argomento

    var_dump() e' simile a print_r con la differenza che da piu' informazioni. Oltre a stampare il contenuto della variabile, la funzione mostra il tipo di dato per ogni elemento di un array o in un oggetto.

    Domanda:
    Perche' usi questa sintassi?
    __variabile
    oppure
    __nomefunzione

    e poi
    perche' ai parameri formali gli passi & che, se nn erro, rappresenta l'indirizzo alla variabile?

    Grazie Tante.
    Trinity
    http://www.vocabolariodidio.it
    http://www.giulianodelena.com
    trova la tua casa per le vacanze
    http://www.salento.lecce.it

  4. #4
    Originariamente inviato da Ndr
    Domanda:
    Perche' usi questa sintassi?
    __variabile
    oppure
    __nomefunzione
    e' il mio modo per rappresentare metodi o variabili private ( o protette ) all' interno di una classe



    Originariamente inviato da Ndr
    e poi
    perche' ai parameri formali gli passi & che, se nn erro, rappresenta l'indirizzo alla variabile?

    Grazie Tante.
    $n e $tot non necessitano una duplicazione di alcun tipo, sono solo riferimenti, quindi li passo per riferimento senza creare una nuova copia ad ogni richiamo ( anche se teoricamente PHP non dovrebbe crearla finche' queste non vengono modificate ... )
    Formaldehyde a new Ajax PHP Zero Config Error Debugger

    WebReflection @WebReflection

  5. #5
    per php il passaggio di parametri di default e' per valore?
    Trinity
    http://www.vocabolariodidio.it
    http://www.giulianodelena.com
    trova la tua casa per le vacanze
    http://www.salento.lecce.it

  6. #6
    Originariamente inviato da Ndr
    per php il passaggio di parametri di default e' per valore?
    nel 4 il passaggio e' per variabile => valore e si crea un duplicato per ogni funzione ... nel 5 dovrebbe essere di default per heap e si crea un duplicato solo se modificato il valore della variabile.

    con la & si assegna lo stesso indirizzo di memoria e se modifichi uno, modifichi anche l'altro ... in questo caso non necessito dell' eventualita' di una copia, quindi passo per riferimento
    Formaldehyde a new Ajax PHP Zero Config Error Debugger

    WebReflection @WebReflection

  7. #7
    Originariamente inviato da andr3a
    nel 5 dovrebbe essere di default per heap e si crea un duplicato solo se modificato il valore della variabile.
    dove l'hai letto?
    A dalla letteratura informatica non vedo notizia di passaggio di paramtri per heap
    Trinity
    http://www.vocabolariodidio.it
    http://www.giulianodelena.com
    trova la tua casa per le vacanze
    http://www.salento.lecce.it

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.