Visualizzazione dei risultati da 1 a 4 su 4

Discussione: Errore...ma perchè?

  1. #1

    Errore...ma perchè?

    Ciao,
    quando provo ad eseguire il mio codice mi appare il seguente errore:
    Parse error: parse error, expecting `','' or `';'' in C:\xampp\htdocs\PHPEsempi\algoritmiOrdinamento\Hea p.php on line 11

    Ma non mi spiego perchè visto che lalinea 11 termina con ;

    Il mio codice è il seguente:

    codice:
    <?php
    
    /* Classe che implementa la struttura dati HEAP e la sua funzionalità per
       l'ordinamento di una collezione mediante l'algoritmo di ordinamento
       Heap Sort */
    
    class Heap{
    
        /* Variabile di istanza che implementa la struttura dati ad albero
           dell'heap per mezzo di un array */
        private $heap[];
        private $heapSize = 0; // Numero di elementi correntemente dentro l'HEAP
    
        /* Costruttore: Crea un nuovo oggetto istanza di Heap. Riceve un qualunque
                        array come parametro di input, lo copia dentro alla
                        variabile di istanza heap[] (mettendoli dentro l'array Heap
                        a partire dalla posizione 1) e su di esso richiama ilmetodo
                        di classe heapify per trasformarlo in loco in un heap */
    
        public function __construct($arr=array()){
    
           /* Scorre l'array ricevuto come parametro e lo copia nel'array heap
    	   traslando gli elementi una posizione in avanti (per farli partire dalla
    	   posizione 1 e non 0) */
           foreach($arr as $chiave => $valore){
              $heap[$chiave+1] = $arr[chiave];    // Copia gli elementi traslandoli
              $heapSize ++;    //Incrementa di 1 il numero elementi inseriti nell'heap
           }
    
    	   /* Invoca il metodo heapify sull'array partendo dalla prima posizione che
    	      sarà trasformato in un HEAP */
           $this->heap = $this->heapify($heap, 1);
        }
    
    
    	/* Metodo che dato un qualsiasi array lo riarrangia trasformandolo in una
    	   struttura dati HEAP memorizzata sempre nello stesso array di partenza */
    	   
        private function heapify($heap, nodo_i){
            echo "heapify è stata chiamata
    ";
            
            /* CASO BASE: Se heap è vuoto ritorna al chiamante */
            if(sinistro($nodo_i) > this->$heapSize) return;
            
            /* Altrimenti procedi ricorsivamente nel seguente modo */
            else{
                $sin = sinistro($nodo_i);   // Posizione della radice del sottoalbero sinistro
                $des = destro($nodo_i);     // Posizione della radice del sottoalbero destro
                
                $nodoCorrente = $sin;
                heapify($heap, $nodoCorrente);       // Chiama ricorsivamente sul sottoalbero sinistro
                $nodoCorrente = $des;
    			heapify($heap, $nodoCorrente);       // Chiama ricorsivamente sul sottoalbero destro
                
                fixHeap($nodoCorrente, $heap);
            }
                
            }
            
    	/* Metodo che prende in input un quasi heap (cioè un heap con al più
    	   un'anomalia) ed un indice nodo_i e restituisce un heap corretto */
    	private function fixHeap($nodo_i, $quasiHeap[]){
    		$sin;  		 // Conterrà l'indice del figlio sinistro
    		$des;   	 // Conterrà l'indice del figlio destro
    		$max;        // Conterrà l'indice del figlio avente valore massimo
    		
    		/* Se nodo_i è una foglia allora ritorna al chiamante (caso base)*/
    	    if(sinistro($nodo_i) > this->$heapSize) return;
    	    
    	    /* Se nodo_i non è una foglia */
    	    else{
    	        $sin = sinistro($nodo_i);   // Posizione del figlio sinistro
    			$des = destro($nodo_i);     // Posizione del figli destro
    			
    			/* Trova il massimo tra il figlio sinistro e destro di nodo_i */
    			if($quasiHeap[sin] >= $quasiHeap[$des]) $max = $sin;
    			else $max = $des;
    			
    			/* Se il valore in posizione nodo_i è MINORE del valore del figlio
    			   massimo */
    			if(quasiHeap[$nodo_i] < quasiHeap[$max]){
    			    $tmp = $quasiHeap[$nodo_i];  // Salva il valore in posizione i
    				/* Scambia il valore in posizione nodo_i con il valore in
    				   posizione max */
    				$quasiHeap[$nodo_i] = $quasiHeap[max];
    				$quasiHeap[$max] = $tmp;
    				
    				/* Invoca ricorsivamente il metodo fixHeap() passandogli come
    				   parametro lo stesso array e la posizione max */
    				fixHeap($max, $quasiHeap);
    			}
    	    }
    	}
    				
    	/* Metodo che dato l'indice di un elemento dell'heap calcola l'indice del
    	   suo figlio sinistro nell'heap */
    	private function sinistro(indicePadre){
    	    $sin = $indicePadre*2;  		// Calcola l'indice del figlio sinistro
    	    return $sin;            		// Ritorna il valore di sin al chiamante
    	}
    	
    	/* Metodo che dato l'indice di un elemento dell'heap calcola l'indice del
    	   suo figlio destro nell'heap */
    	private function destro(indicePadre){
    	    $des = $indicePadre*2 + 1;      // Calcola l'indice del figlio destro
    	    return $padre;                  // Ritorna il valore di des al chiamante
    	}
    	
    	/* Metodo che dato un elemento dell'heap calcolal'indice del padre */
    	pruvate function padre(indiceNodo){
    	    $padre = floor(i/2);    // Calcola la parte intera
    		return $padre;          // Ritorna al chiamante la posizione del padre
    	}
    	
    }
    ?>
    Grazie
    Andrea

  2. #2
    se questa è la linea 11

    codice:
    private $heap[];
    devi dichiararla così

    codice:
    private $heap = array();
    però voglio dire una cosa, capisco che vieni da java, ma è un pò sbagliato iniziare con php dalle classi... Però, ognuno è libero di fare quello che vuole

  3. #3
    Originariamente inviato da sandro010489
    se questa è la linea 11

    codice:
    private $heap[];
    devi dichiararla così

    codice:
    private $heap = array();
    però voglio dire una cosa, capisco che vieni da java, ma è un pò sbagliato iniziare con php dalle classi... Però, ognuno è libero di fare quello che vuole
    Guarda...lungi da me voler sembrare saccente...perchè sono proprio l'ultimo dei principianti...

    Ma...PHP procedurale me lo sono già un po' visto prima di iniziare a studiare PHP OO...poi conosco abbastanza decentemente il C (anche se sono piuttosto arruginito perchè non lo tocco da anni...ma diciamo che come logica della programmazione procedurale ce l'ho) e comunque stò sempre con le 2 guide di HTML.it (guida a PHP di base e guida a PHP OO) contemporaneamente aperte...

    ora però ho un altro problemino in queso metodo (diciamo che con la sintassi di PHP ci stò ancora facendo a botte)

    codice:
    private function heapify($heap, $nodo_i){
            echo "heapify è stata chiamata
    ";
            
            /* CASO BASE: Se heap è vuoto ritorna al chiamante */
            if(sinistro($nodo_i) > this->$heapSize) return;
            
            /* Altrimenti procedi ricorsivamente nel seguente modo */
            else{
                $sin = sinistro($nodo_i);   // Posizione della radice del sottoalbero sinistro
                $des = destro($nodo_i);     // Posizione della radice del sottoalbero destro
                
                $nodoCorrente = $sin;
                heapify($heap, $nodoCorrente);       // Chiama ricorsivamente sul sottoalbero sinistro
                $nodoCorrente = $des;
    			heapify($heap, $nodoCorrente);       // Chiama ricorsivamente sul sottoalbero destro
                
                fixHeap($nodoCorrente, $heap);
            }
                
        }
    L'errore che mi dà è: Parse error: parse error in C:\xampp\htdocs\PHPEsempi\algoritmiOrdinamento\Hea p.php on line 43

    che è riferito a questa linea di codice:
    codice:
    if(sinistro($nodo_i) > this->$heapSize) return;
    Cosa c'è che non va bene?

    Tnx
    CMQ...ho corretto

  4. #4
    Utente di HTML.it L'avatar di neroux
    Registrato dal
    Aug 2009
    Messaggi
    1,973
    Codice PHP:
    $this->heapSize 

    www.sitemeer.com » Quando un sito pare irraggiungibile

    Se ti piace ci puoi trovare anche su Facebook

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 © 2024 vBulletin Solutions, Inc. All rights reserved.