WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Variable aus Unterfunktion in Hauptfunktion benutzen

 

Nil

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.02.2009, 16:50     Titel: Variable aus Unterfunktion in Hauptfunktion benutzen
  Antworten mit Zitat      
Hallo zusammen!

ich hoffe ihr könnt mir helfen.

Ich bastel gerade an einem kleinen Programm, welches ein Array erstellen soll, in der Göße abhängig von dem Eingabeparameter.

Nun habe ich ein problem:

ich will einer Variablen n den ´Wert zuweisen, welchen die entsprechende Unterfunktion berechnet.

Leider klappt es nicht.

ich bekomme zwar den Wert der Unterfunktion angezeigt (nodes1), aber kann anscheinend nicht von der Hauptfunktion darauf zugreifen, bzw diesen Wert in der Hauptfunktion weiter "verarbeiten"

Code:
function [Tree, n] = GenerateTreeEmpty1(p)

% funktion erstellt einen noch leeren "Baum", also ein Array mit der
% benötigten Knotenanzahl abhängig von der Periodendauer des Baumes
% bekommt die Periodendauer übergeben
% gibt die Anzahl der Knoten raus



TreeEmpty = struct('Amount', [], 'InvestCost', [], 'LaborCost', [], ...
                   'MaintainanceCost', [], 'EnergyCost', [],...
                   'CostOfPlace', [], 'CostPerYear', [], 'CostPerUnit', [],...
                   'Turnaround', [], 'Revenue', [],'RevenuePerUnit', [],...
                   'NPV', [], 'xyKoord', [], 'NodeNr', [])
               


acc = 0;

n = NodesCounter(p, acc)    %% Unterfunktion soll die Anzahl der Knoten berechnen
 

Tree = repmat(TreeEmpty, n , 1 )




end


function [nodes1] = NodesCounter(p, nodesAcc)


% Unterfunktion berechnet die Knotenanzahl

if p == 0
   
    nodes1 = nodesAcc + 1
   

else  
   
    a  = 2^p;
   
    p = p - 1;
   
   
    nodes2 = nodesAcc + a;
   
    NodesCounter(p, nodes2);

   
   
end
end



Wär toll, wenn einer sagen könnte, wie ich das anstelle

Vielen Dank schon mal!!

Nil


HansB.

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.02.2009, 17:17     Titel:
  Antworten mit Zitat      
In dem else Zweig deiner Unterfunktion gibt es keine Variable nodes1. Dadurch kann auch nichts zurückgegeben werden.

Grüße Hans
 
HansB.

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.02.2009, 17:20     Titel:
  Antworten mit Zitat      
Hmm sorry hab den Funktionsaufruf nicht gesehen.

Gruß Hans
 
Nil

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.02.2009, 17:21     Titel:
  Antworten mit Zitat      
naja, das Problem ist ja grade nicht die Unterfunktion.
Die funktioniert einwandfrei, wenn ich sie alleine aus dem Command Window entsprechend aufrufe. nodes1 bekomme ich ja.

Das Problem ist, dass ich diese Zahl, also nodes1 , in der Hauptfunktion nocheinmal benutzen will, und das funktioniert nicht..

Gruß
Nil
 
Bijick
Ehrenmitglied

Ehrenmitglied



Beiträge: 914
Anmeldedatum: 18.06.07
Wohnort: Nürnberg
Version: R2006b, R2008b
     Beitrag Verfasst am: 26.02.2009, 17:54     Titel:
  Antworten mit Zitat      
Hallo Nil,

der Fehler ist doch in der Unterfunktion. Sie muss heißen:

Code:
function nodes1 = NodesCounter(p, nodesAcc)

% Unterfunktion berechnet die Knotenanzahl

if p == 0
    nodes1 = nodesAcc + 1;
else
    a  = 2^p;
    p = p - 1;
    nodes2 = nodesAcc + a;
    nodes1 = NodesCounter(p, nodes2);
end


Der rekursive Aufruf funktioniert dann, weil jedes nodes1 in einem lokalen Workspace erzeugt wird. Sie kennen einander nicht und werden auch nicht überschrieben.

Herzliche Grüße
Bijick
_________________

>> why
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum posten
Du kannst Dateien in diesem Forum herunterladen
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2024 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.