Visualizzazione struttura

di il
3 risposte

Visualizzazione struttura

Salve, allora il mio problema e che sia con struct e con cellarray non so come visualizzare i dati inseriti nella cellarray su una function esterna. Come posso fare?
In particolare la function exec nn funziona. Come mai? anche con

s=struct('Contatore',{}); non funziona




function variabili()
            
    
              s=cellarray;
             
s.Contatore;
          
        end
        
        
        
        function out=contatore()
            
            
            
            self.conta=1;
            
            
            out=self.conta;
     
         
         
        end
       
        
        
        function out2=ex()
            
           
            
             out=prova21.contatore();
           
            for i=1:3
                
                out=out+1;
                
                
            end
           
           
            out2=out;
           
            
          
            
            
            
              
           prova21.variabili.s.Contatore=out2;

            
            
            
            display(prova21.variabili.s.Contatore);
            
            
            
        end
                
        function  exec()
            
          

   display(prova21.variabili.s.Contatore);
            
            
 
        end

3 Risposte

  • Re: Visualizzazione struttura

    Di tutte le funzioni che hai scritto, l'unica che "funziona" è "contatore" la quale ritorna, giustamente il valore "1" assegnato al campo "conta" della struttura "self".
    La funzione "contatore" non ritorna (se questa era l'aspettativa) la struttura "self".
    Affinchè la funzione "contatore" ritorni la struttura "self" dovrebbe essere dichiarata così:

    function self=contatore()

    Quanto alle altre funzioni:

    function variabili()
    - Non si capisce cosa dovrebbe fare
    - è dichiarata in modo che non ritorno alcun valore (affinchè ritorni almeno un valore, dovrebbe essere definita in modo analogo a "contatore")
    - nella prima istruzione: s=cellarray;
    cellarray non è una variabile definita, non è una funzione (almeno non di MatLab), di conseguenza risulta "indefinito" e genera un messaggio di errore.
    Per la creazione di cell arrays si può usare la funzione "cell" di MatLab
    - la seconda istruzione: s.Contatore; genera un messaggio di errore dal momento che la struttura "s" non è stata creata alla riga precedente; se anche lo fosse stata (e non lo è stata) il campo "Contatore" non sarebbe stato comunque definito

    function out2=ex()
    - nella prima istruzione: out=prova21.contatore(); la struttura "prova21" non è stata definita, questo genera un messaggio di errore inoltre, "contatore" è una funzione e non si può assegnare una funzione ad una variabile (a meno che non si tratti dell'handle della funzione, ma non credo che fosse questo lo scopo).
    - il resto delle istruzioni della funzione sono errate in quanto basate sulla struttura "prova21" che (vedi punto precedente) non esiste

    function exec()
    Nella funzione, la struttura "prova21" non è definita (così come non lo era nella funzione precedente) questo genera un messaggio di errore.

    Affinchè una variabile (di qualunque tipo) sia visibile all'interno di una funzione deve essere passata come parametro o deve essere dichiarata "global"

    Prima di procedere con altri tentativi di scrittura di funzioni, ti consiglio caldamente di leggere la guida "Getting Started" di MatLab per acquisire i fondamenti del linguaggio MatLab.

    Puoi trovarla in Internet:

    http://www.mathworks.com/help/pdf_doc/matlab/getstart.pdf
    http://www.mathworks.com/academia/student_version/learnmatlab.pdf
    (cerca quella corrispondente alla versione di MatLab che hai).

    Inoltre, con il comando "doc" dalla Command Window si apre l'Help Browser di MatLab, al fondo della pagina principale trovi il link alla documentazione completa in formato ".pdf."; tra i tanti documenti dovresti trovare anche la guida "Getting Started".

    Hope this helps.
  • Re: Visualizzazione struttura

    ask_raf ha scritto:


    Di tutte le funzioni che hai scritto, l'unica che "funziona" è "contatore" la quale ritorna, giustamente il valore "1" assegnato al campo "conta" della struttura "self".
    La funzione "contatore" non ritorna (se questa era l'aspettativa) la struttura "self".
    Affinchè la funzione "contatore" ritorni la struttura "self" dovrebbe essere dichiarata così:

    function self=contatore()

    Quanto alle altre funzioni:

    function variabili()
    - Non si capisce cosa dovrebbe fare
    - è dichiarata in modo che non ritorno alcun valore (affinchè ritorni almeno un valore, dovrebbe essere definita in modo analogo a "contatore")
    - nella prima istruzione: s=cellarray;
    cellarray non è una variabile definita, non è una funzione (almeno non di MatLab), di conseguenza risulta "indefinito" e genera un messaggio di errore.
    Per la creazione di cell arrays si può usare la funzione "cell" di MatLab
    - la seconda istruzione: s.Contatore; genera un messaggio di errore dal momento che la struttura "s" non è stata creata alla riga precedente; se anche lo fosse stata (e non lo è stata) il campo "Contatore" non sarebbe stato comunque definito

    function out2=ex()
    - nella prima istruzione: out=prova21.contatore(); la struttura "prova21" non è stata definita, questo genera un messaggio di errore inoltre, "contatore" è una funzione e non si può assegnare una funzione ad una variabile (a meno che non si tratti dell'handle della funzione, ma non credo che fosse questo lo scopo).
    - il resto delle istruzioni della funzione sono errate in quanto basate sulla struttura "prova21" che (vedi punto precedente) non esiste

    function exec()
    Nella funzione, la struttura "prova21" non è definita (così come non lo era nella funzione precedente) questo genera un messaggio di errore.

    Affinchè una variabile (di qualunque tipo) sia visibile all'interno di una funzione deve essere passata come parametro o deve essere dichiarata "global"

    Prima di procedere con altri tentativi di scrittura di funzioni, ti consiglio caldamente di leggere la guida "Getting Started" di MatLab per acquisire i fondamenti del linguaggio MatLab.

    Puoi trovarla in Internet:

    http://www.mathworks.com/help/pdf_doc/matlab/getstart.pdf
    http://www.mathworks.com/academia/student_version/learnmatlab.pdf
    (cerca quella corrispondente alla versione di MatLab che hai).

    Inoltre, con il comando "doc" dalla Command Window si apre l'Help Browser di MatLab, al fondo della pagina principale trovi il link alla documentazione completa in formato ".pdf."; tra i tanti documenti dovresti trovare anche la guida "Getting Started".

    Hope this helps.
    function out2=ex()
    - nella prima istruzione: out=prova21.contatore(); la struttura "prova21" non è stata definita, questo genera un messaggio di errore inoltre, "contatore" è una funzione e non si può assegnare una funzione ad una variabile (a meno che non si tratti dell'handle della funzione, ma non credo che fosse questo lo scopo).
    - il resto delle istruzioni della funzione sono errate in quanto basate sulla struttura "prova21" che (vedi punto precedente) non esiste

    allora nella funzione prova21 sarebbe il nome della classe e non mi genera errore mi e assegnado alla funzione a una variabile i mi da il valore 4 come mi aspettavo, perche io assegno il valore 4 alla cella.

    Come si dichiara la classe prova21 per poter essere usata?
  • Re: Visualizzazione struttura

    E' la prima volta che fai riferimento a "classi".

    Nella domanda precedente, non avevi specificato che "prova21" era una classe e nei titolo della domanda hai citato "struttura".

    Se prova21 è una classe e l'hai già definita in un file ".m" il più è fatto.

    Per utilizzare istanze della classe "prova21" devi semplicemente creare delle del tipo della classe:

    a=prova21;

    Alla variabile "a" saranno associate le "Properties" (io campi / variabili simili a quelli delle strutture) ed i "Methods" (le funzioni).

    Ad ogni modo, per poter usare la variabile "a" in una funzione, a prescindere dal tipo di variabile, devi:

    - passarla come parametro oppure
    - dichiararla "global"

    Un esempio di definizione di classe preso dall'Help di MAtLab (http://it.mathworks.com/help/matlab/matlab_oop/getting-familiar-with-classes.html
    classdef BasicClass
       properties
          Value
       end
       methods
          function r = roundOff(obj)
             r = round([obj.Value],2);
          end
          function r = multiplyBy(obj,n)
             r = [obj.Value] * n;
          end
       end
    end
    Un esempio di creazione di una istanza della classe:
    - creazione della variabile "a"
    - assegnazione di un valore al campo (Property) "Value"
    a=BasicClass
    
    a.Value=123;
    
    
    Un esempio di funzione che crea e restituisce una variabile di tipo ""class BasicClass":
    
    function a=prova_classe()
    % Creazione di una varaibile del tipo "BasicClass"
    k=BasicClass;
    % Assegnazioone di un valore al campo "Value"
    k.Value=42;
    % Assegnazione della variabile di tipo "BasicClass" alla varaibile di
    % output della funzione
    a=k
    
    U esempio di funzione che riceve in input una variabile di tipo "BasicClass" e vi assegna un valore del campo "Value"
    
    function a=prova_classe(a)
    % La funzione riceve in input una variabile di tipo "BasicClass" e vi
    % assegna un valore del campo "Value"
    % La varaibile in input deve essere istanziata" prima prima della chiamata
    % di questa funzione
    % A seconda del modo con il quale questa funzione viene chiamata, la
    % stessa restituisce:
    %    la varaibile in input con il nuovo valore del campo "Value"
    %       a=prova_classe(a)
    %    una nuov istanza della classe "BasicClass"
    %       b=prova_classe(a)
    
    a.Value=a.Value+1;
    
    Nota: a seconda del modo con il quale questa funzione viene chiamata, la stessa restituisce:
    - la varaibile in input con il nuovo valore del campo "Value"
    a=prova_classe(a)
    - una nuova istanza della classe "BasicClass"
    b=prova_classe(a)


    Un esempio di uno script che crea un'istanza della classe "BasicClass" e la passa in input ad una funzione
    
    a=BasicClass
    
    a.Value=123;
    
    a=prova_classe(a)
    
    Per maggiori dettagli fare riferimento a:

    http://it.mathworks.com/help/matlab/matlab_oop/getting-familiar-with-classes.html


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