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

Flussdiagramm von n_über_k in For-Schleife programmieren

 

Clemens
Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 01.04.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 01.04.2016, 12:19     Titel: Flussdiagramm von n_über_k in For-Schleife programmieren
  Antworten mit Zitat      
Guten Tag,
ich soll für die Uni aus einem Flussdiagramm eine function mit for-Schleife programmieren. Ich hab einfach mal angefangen und wollte mal Fragen was ich falsch mache bzw. wie ich der Funktion klar mache das sie solange die Verzweigung JA durchgeht bis endlich die Bedingung für die Beendigung erreicht ist...

hier mal mein "Anfang":

function  n_ueber_k(n,k)
ge(n,k)
isa(n, 'posinteger');
isa(k, 'posinteger');
z=k;
F=1;

    for k=1:n
        z>0
        F = F*(n-(z-1));
        F = F/z;
        z = z-1;
   
        for k=1:n
        ge(0,z)  
        end
    end


Im Anhang habe ich euch mal das Flussdiagramm hochgeladen.
Liebe Grüße
Clemens

Flussdiagramm.png
 Beschreibung:

Download
 Dateiname:  Flussdiagramm.png
 Dateigröße:  13.79 KB
 Heruntergeladen:  397 mal
Private Nachricht senden Benutzer-Profile anzeigen


Clemens
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 01.04.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 01.04.2016, 15:19     Titel:
  Antworten mit Zitat      
hat keiner nen tipp ? hab das gefühl dass die for schleife gar nicht durchlaufen wird
Private Nachricht senden Benutzer-Profile anzeigen
 
DSP
Forum-Meister

Forum-Meister



Beiträge: 2.117
Anmeldedatum: 28.02.11
Wohnort: ---
Version: R2014b
     Beitrag Verfasst am: 01.04.2016, 15:40     Titel:
  Antworten mit Zitat      
Hallo,

ich habe so einige Verständnisprobleme mit deinem Code. Siehe Kommentare



Code:

function  n_ueber_k(n,k)
ge(n,k) % Wozu der Vergleich n >= k ?  Soll der code nur ausgeführt werden wenn Ergebnis = true?
isa(n, 'posinteger');
isa(k, 'posinteger');
z=k;
F=1;

    for k=1:n
        z>0 % soll das eine Bedingung sein? Dann if verwenden
        F = F*(n-(z-1));
        F = F/z;
        z = z-1;
   
        for k=1:n % identische Laufvariable k innerhalb der 1. Schleife macht keinen Sinn
        ge(0,z)  % Wozu der Vergleich?
        end
    end
end
 


Zitat:
hab das gefühl dass die for schleife gar nicht durchlaufen wird


So etwas lässt sich leicht mit dem Debugger überprüfen. Breakpoint in die gewünschte Zeile setzen und dann die Funktion starten.

Sinnvoller wäre allerdings eine while Schleife

Code:

function  F = n_ueber_k(n,k)

    z=k;
    F=1;
    while z > 0 % Schleife so lange ausführen, bis z == 0
        F = F*(n-(z-1));
        F = F/z;
        z = z-1;
    end
end
 


Jetzt fehlt hier noch eine entsprechende Überprüfung von n und k auf Gültigkeit.

Gruß DSP
Private Nachricht senden Benutzer-Profile anzeigen
 
Clemens
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 01.04.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 01.04.2016, 16:32     Titel:
  Antworten mit Zitat      
Hallo,
erstmal vielen Dank für deine/ihre Antwort.
ge(n,k) habe ich gewählt, weil in der Aufgabe vorgegeben wurde, dass n>=k.
Das hatte ich vergessen zu erwähnen.
Ich hab jetzt versucht, in die for Schleife eine if else Bedingung einzubauen.

Code:
function F = n_ueber_k(n,k)
ge(n,k)
isa(n, 'posinteger');
isa(k, 'posinteger');
z=k;
F=1;
    for k=1:n
      if z>0 == true;
          F = F*(n-(z-1));
          F = F/z;
          z = z-1;
      else
         ;
      end
    end
       


Jetzt bekomme ich für k und n auch schon werte ausgegeben. Allerdings ist die Bedingung n>=K noch nicht implementiert worden bzw. sie wird noch nicht befolgt.
Denn ich kann zum Beispiel auch n_ueber_k(1,4) eingeben und es wird tdm. gerechnet.
Grüße Clemens

[EDITED, Jan, Bitte kein Top-Quoting - Danke!]
Private Nachricht senden Benutzer-Profile anzeigen
 
DSP
Forum-Meister

Forum-Meister



Beiträge: 2.117
Anmeldedatum: 28.02.11
Wohnort: ---
Version: R2014b
     Beitrag Verfasst am: 01.04.2016, 16:58     Titel:
  Antworten mit Zitat      
Diese Zeilen führen zu nichts...

Code:

ge(n,k) % Wozu der Vergleich n >= k ?  Soll der code nur ausgeführt werden wenn Ergebnis = true?
isa(n, 'posinteger');
isa(k, 'posinteger');
 


Was soll mit dem Ergebnis passieren? Du prüfst eine Bedingung, aber das Ergebnis der Prüfung wird nie verwendet. Lies dir mal die Doku zu if und else durch! Der isa Befehl macht hier auch keinen Sinn. Es wird nur der Datentyp überprüft, nicht aber die Zahl selbst. Die Eingangsargumente n und k sind i.d.R. vom Datentyp double, so fern sie nicht anders deklariert wurden. Daher wird selbst bei n und k als ganze Zahl immer ein false kommen, da es sich eben nicht um einen Integer handelt.


Code:

function F = n_ueber_k(n,k)
if ge(k,n)
    disp('n > k gefordert')
    F = NaN;
    return
else
    if mod(n,1) % Test auf ganze Zahl -> mod = Restdivision
        disp('n = ganze Zahl gefordert')
        F = NaN;
        return
    end
    if mod(k,1) % Test auf ganze Zahl -> mod = Restdivision
        disp('k = ganze Zahl gefordert')
        F = NaN;
        return
    end
    z=k;
    F=1;
    for k=1:n
        if z>0 % der Vergleich liefert 0 oder 1 (false oder true)...Wenn die Bedingung true ist, wird die Anweisung im if Teil ausgeführt!
            F = F*(n-(z-1));
            F = F/z;
            z = z-1;
        else
            return % end function
            % alternativ der Befehl "break" um die Schleife zu beenden
        end
    end
end
end          
 


Eine while Schleife ist aber nach wie vor effizienter Wink Break und return Befehle in einer Schleife sind auch nicht unbedingt guter Programmierstil.

Gruß DSP
Private Nachricht senden Benutzer-Profile anzeigen
 
Clemens
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 01.04.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 01.04.2016, 17:19     Titel:
  Antworten mit Zitat      
...
das sieht natürlich schon anders aus als mein Haufen "function" Very Happy
Ich werde mich heute und am Wochenende hinsetzen um Matlab weiter zu durchdringen, das ich nämlich echt keine Lust habe mir das einfach von den Vorsemestlern zu kopieren (wie die Mehrheit es tut)^^
Nochmal vielen Dank. Ich werde in Zukunft bestimmt noch häufiger Fragen haben.Ich lade nochmal die Aufgabenstellung hoch. dann wird vlt mein Gedankengang klarer und andere haben eine Aufgabe mehr mit der sie üben können =)
schönes Wochenende
Gruß Clemens

Matlab_2_Labor_Aufgabe_3.png
 Beschreibung:

Download
 Dateiname:  Matlab_2_Labor_Aufgabe_3.png
 Dateigröße:  148.24 KB
 Heruntergeladen:  380 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 01.04.2016, 18:32     Titel:
  Antworten mit Zitat      
Hallo Clemens,

Zitat:
]hat keiner nen tipp ? hab das gefühl dass die for schleife gar nicht durchlaufen wird

In den Forums-Regeln wird darauf hingewiesen, dass ein Bumping erst nach frühestens 24 Stunden erwünscht ist: http://www.gomatlab.de/der-kleine-gomatlab-de-knigge-t125.html

Danke! Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
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 - 2025 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.