Function

di il
3 risposte

Function

Salve, ho un dubbio



 function create(n)
            
      
            for i=1:n
            
                
                 Nodemanager.variabili.conta=Nodemanager.variabili.conta+1;
                
                
                 Node(Nodemanager.variabili.conta);

      
                display(Node(Nodemanager.variabili.conta));

                
 

            end
           
           
            
           
        end
        





  function node=create(self)
            
      
            for i=1:n
            
                
                 Nodemanager.variabili.conta=Nodemanager.variabili.conta+1;
                
                
                 node=Node(Nodemanager.variabili.conta);

      
                display(Node(Nodemanager.variabili.conta));
                
 

            end
           
           
            
           
        end




 function self=variabili()
            
            self.conta2=0;
            
            
            self.conta=1;
            
            
            
        end
        


Il mio dubbio perchè durante il ciclo for nn viene incrementato il valore conta che lo preso in un altra funzione? e poi nella seconda perchè devo per forza mettere un parametro? self nn deve permettere l'inseirmento di un parametro?

3 Risposte

  • Re: Function

    Le domande riportate non sono molto chiare.

    Guardando le tre funzioni si può dire:

    [*] la funzione variabili non presenta problemi, nel senso che genera in output la struttura self con i due campi (conta e conta2) con assegnati i valori corrispondenti

    [*] la funzione create contiene un baco nella prima istruzione:

    Nodemanager.variabili.conta=Nodemanager.variabili.conta+1;

    la struttura Nodemanager non viene passata alla funzione come parametro quindi viene creata nella funzione stessa; questo comporta che alla prima iterazione del loop la struttura non esiste ancora, in particolar modo la parte a destra: non è possibile incrementare (+1) Nodemanager.variabili.conta perchè, appunto, non esiste.

    Quanto alla seconda istruzione, assumo che Node sia un'altra funzione.

    [*] la funzione node=create(self) un baco: la variabile n utilizzata nella definizione del ciclo for non è definita (non viene passata come parametro, nè viene inizializzata prima del loop).

    La funzione presenta anche lo stesso baco della funzione create (vedi punto precedente) relativamente all'incremento del campo conta della struttura Nodemanager.variabil
    Inoltre il parametro in input self (che sembrerebbe essere generato dalla funzione varaibili non è utilizzato.
    Se nella funzione node=create(self) si vuole utilizzare il paramtero di input self questo deve essere utilizzato "con il suo nome".
    Oltre a questo, i campi della struttura self sono diversi da quelli della struttura Nodemanager.variabili.
    Sempre nella funzione node=create(self), l'istruzione:

    node=Node(Nodemanager.variabili.conta);

    dovrebbe assegnare il valore del campo conta alla variabile di output node; dove è definita la funzione Node?

    Hope this helps.
  • Re: Function

    [quote="ask_raf"]Le domande riportate non sono molto chiare.

    Guardando le tre funzioni si può dire:

    [*] la funzione variabili non presenta problemi, nel senso che genera in output la struttura self con i due campi (conta e conta2) con assegnati i valori corrispondenti

    [*] la funzione create contiene un baco nella prima istruzione:

    Nodemanager.variabili.conta=Nodemanager.variabili.conta+1;

    la struttura Nodemanager non viene passata alla funzione come parametro quindi viene creata nella funzione stessa; questo comporta che alla prima iterazione del loop la struttura non esiste ancora, in particolar modo la parte a destra: non è possibile incrementare (+1) Nodemanager.variabili.conta perchè, appunto, non esiste.

    Quanto alla seconda istruzione, assumo che Node sia un'altra funzione.

    [*] la funzione node=create(self) un baco: la variabile n utilizzata nella definizione del ciclo for non è definita (non viene passata come parametro, nè viene inizializzata prima del loop).

    La funzione presenta anche lo stesso baco della funzione create (vedi punto precedente) relativamente all'incremento del campo conta della struttura Nodemanager.variabil
    Inoltre il parametro in input self (che sembrerebbe essere generato dalla funzione varaibili non è utilizzato.
    Se nella funzione node=create(self) si vuole utilizzare il paramtero di input self questo deve essere utilizzato "con il suo nome".
    Oltre a questo, i campi della struttura self sono diversi da quelli della struttura Nodemanager.variabili.
    Sempre nella funzione node=create(self), l'istruzione:

    node=Node(Nodemanager.variabili.conta);

    dovrebbe assegnare il valore del campo conta alla variabile di output node; dove è definita la funzione Node?

    Hope this helps.[/quote

    Allora nella funzione create ho messo
    
    
    
     
        
            function node=create(n)
                
          
                
                
                
                for i=1:n
                
                    
                    
                     Nodemanager.variabili.conta=Nodemanager.variabili.conta+1;
                     
                     
    
                     node=Node(Nodemanager.variabili.conta);
    
          
    
                    
     
    
                end
               
               
                
               
            end
    
    

    Cosa devo fare affinche si incrementi sono alla prima volta che lo faccio , qualche aiuto nn sò
  • Re: Function

    Il problema, anzi, i problemi, continuano ad essere gli stessi:

    Alla funzione viene passato solo il parametro "n" il quale, essendo utilizzato per controllare il ciclo for, assumo sia un intero (uno scalare).

    L'istruzione

    Nodemanager.variabili.conta=Nodemanager.variabili.conta+1;

    continua ad essere errata (vedi precedente risposta).

    La struttura Nodemanager (con i suoi campi):
    [*] non viene passata come parametro alla funzione (l'unico parametro in input è "n")
    [*] non è dichiarata come variabile globale, per cui, se anche fosse stata definita in uno script, non sarebbe "visibile" all'interno della funzione
    [*] non è stata inizializzata (in particolare il campo "Nodemanager.variabili.conta") prima del ciclo for

    come conseguenza, durante la prima iterazione "Nodemanager.variabili.conta" non esiste, quindi non è possibile incrementare il campo "conta" aumentandone (di 1) il valore perchè ancora non esiste.
    Non so come spiegarmi in modo "semplice" ..., l'istruzione

    Nodemanager.variabili.conta=Nodemanager.variabili.conta+1

    si potrebbe "tradurre":

    una_cosa_che_non_esiste = una_cosa_che_non_esiste +1

    Quanto fa "una_cosa_che_non_esiste +1"?

    Bisogna quindi:
    [*] creare (ed inizializzare) la struttura "fuori dalla funzione" e passarla alla stessa come parametro di input
    [*] oppure creare (ed inizializzare) la struttura "fuori dalla funzione" e dichiararla "variabile globale" (con la key word "global" - vedi help global)
    [*] oppure inizializzarla prima del ciclo for (ammesso che abbia un senso nel contesto del programma che si vuole realizzare=:

    function node=create(n)
    Nodemanager.variabili.conta=0;
    for i=1:n
    Nodemanager.variabili.conta=Nodemanager.variabili.conta+1;
    %%% node=Node(Nodemanager.variabili.conta);
    end

    Per quanto riguarda l'output della funzione, se si vuole avere in uscita il valore raggiunto da Nodemanager.variabili.conta, basta scrivere:

    node=Nodemanager.variabili.conta;

    non so cosa significhi "Node(Nodemanager.variabili.conta);"

    scritta così, si direbbe che "Node" sia una funzione.

    Quanto alla domanda: "Cosa devo fare affinche si incrementi sono alla prima volta che lo faccio": cosa si intende con "solo alla prima volta che lo faccio"?

    Hope this helps.
Devi accedere o registrarti per scrivere nel forum
3 risposte