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

while Schleife

 

Shadowman2712
Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 31.07.19
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 31.07.2019, 18:46     Titel: while Schleife
  Antworten mit Zitat      
Guten Tag,

ich habe ein Problem bei folgendem Code:

Code:
q = -2;
while abs(q) < 20
    q = -2 * q - 10 ;
    if abs (q) < 8
        continue
    end
    fprintf('%d\t', q);
end



da gibt mir Matlab Ergebnisse raus die ich nicht verstehe (nutze Matlab erst seit kurzem). Könnt Ihr mir die Ausgabe erklären und den grund für diese? Dachte zum Beispiel die erste Ausgabe ist -6 und nicht -14 denn wenn q = -2 dann ist die Bedingung abs(q) < 20 erfüllt da Betrag -2 = 2 < 20 also wird in der dritten Zeile mit q = -2 weiter gerechnet. daraus folgt: q = -2 * -2 -10 = 4-10=-6 und nicht -14. Wo ist mein Denkfehler?

[EDITED, Jan, Bitte Code-Umgebung verwenden - Danke!]
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 31.07.2019, 18:53     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
Dachte zum Beispiel die erste Ausgabe ist -6

if abs (q) < 8 ist erfüllt und damit tritt "continue" ein, d.h. die nächste Iteration wird ausgeführt.

Im Debugger kannst du sowas auch wunderbar nachvollziehen.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
Shadowman2712
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 31.07.19
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 31.07.2019, 18:59     Titel:
  Antworten mit Zitat      
Danke für die schnelle Antwort.

Was genau heißt die nächste Iteration wird ausgeführt? wird q dann um 1 erhöht also zu q=-1? Wieso ist dann bei der ersten Iteration bzw. beim ersten Durchlauf das Ergebnis -14 und nicht -6 also was ist mein Denkfehler?

Debugger sagt mit leider nichts ich weiß nur dass ich breakpoints setzen kann (rote Punkte) und das Programm dann stoppt. Bekomme dann aber keine Informationen oder ähnliches angezeigt (auch nicht im Terminal). Wie gesagt bin noch neu.
Private Nachricht senden Benutzer-Profile anzeigen
 
Shadowman2712
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 31.07.19
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 31.07.2019, 19:01     Titel:
  Antworten mit Zitat      
Oder wird erst ein Ergebnis ausgegeben wenn q < 8 nicht mehr erfüllt ist da continue kein Ergebnis ausgibt sondern das Programm ohne Ausgabe eines Ergebnisses weiterlaufen lässt (ich bin kein Informatiker ich schreibe lediglich eine einzige Info Klausur in meinem Studiengang)
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 31.07.2019, 19:05     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
wird q dann um 1 erhöht also zu q=-1

Warum denn? Du sagst ja nirgends, dass das gemacht werden soll.

Zitat:
Wieso ist dann bei der ersten Iteration bzw. beim ersten Durchlauf das Ergebnis -14 und nicht -6 also was ist mein Denkfehler?

Das habe ich dir gerade versucht zu erklären. Das continue sorgt dafür, dass wieder an den Anfang der while-Schleife gesprungen wird.

Zitat:
Debugger sagt mit leider nichts ich weiß nur dass ich breakpoints setzen kann (rote Punkte) und das Programm dann stoppt.

... und damit bist du im Debugger und kannst schrittweise die Zeilen durchgehen.

Zitat:
Bekomme dann aber keine Informationen oder ähnliches angezeigt (auch nicht im Terminal).

Was soll denn angezeigt werden? Was meinst du mit "Terminal"?
Du kannst z.B. den Wert von q im Workspace Browser beobachten.

Zitat:
Wie gesagt bin noch neu.

Dann hilft vielleicht das:
https://www.mathworks.com/learn/tutorials/matlab-onramp.html

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
Shadowman2712
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 31.07.19
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 31.07.2019, 19:14     Titel:
  Antworten mit Zitat      
also wenn ich schrittweise die zeilen durchgehe sehe ich keine weiteren Infos weder im workspace noch im Skript. Können Sie mir eventuell den Code Zeile für Zeile erklären was genau gemacht wird? Ich denke eine grundlegende Annahme bei mir ist wahrscheinlich falsch:

Der Code ist in der Altklausur vorgegeben und das Ergebnis soll ohne Matlab also im Kopf bestimmt werden ich komme aber nicht auf diese Werte:(-14 18 -46)

Code:
q = -2;
while abs(q) < 20
    q = -2 * q - 10 ;
    if abs (q) < 8
        continue
    end
    fprintf('%d\t', q);
end


[EDITED, Jan, Bitte Code-Umgebung verwenden - Danke!]
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 31.07.2019, 19:32     Titel:
  Antworten mit Zitat      
Hallo,

im Workspace werden verschiedene Informationen zu den Variablen angezeigt, u.a. Value (sofern angewählt).

Wenn die Zeilen von 1-8 durchnummeriert sind:

1 q = -2
2 true, also zu Zeile 3
3 q = -6
4 true, also zu Zeile 5
5 zu Zeile 2
2 true, also zu Zeile 3
3 q = 2
4 true, also zu Zeile 5
5 zu Zeile 2
2 true, also zu Zeile 3
3 q = -14
4 false, also zu Zeile 7
7 Ausgabe -14
8 zu Zeile 2
2 true, also zu Zeile 3
3 q = 18
4 false, also zu Zeile 7
7 Ausgabe 18
8 zu Zeile 2
2 true, also zu Zeile 3
3 q = -46
4 false, also zu Zeile 7
7 Ausgabe 18
8 zu Zeile 2
2 false, also abgeschlossen.

Wenn du wirklich was lernen willst, kann ich dir nur empfehlen, die Tutorials durchzugehen.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
Shadowman2712
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 31.07.19
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 31.07.2019, 20:25     Titel:
  Antworten mit Zitat      
Vielen Dank ich habe es verstanden. Ja mit den Tutorien ist es so eine Sache es besteht zeitknappheit aufgrund anderer Klausuren aber plotten etc. beherrsche ich schon recht gut. Habe noch einige Probleme mit dem print Befehl aber es ist noch etwas Zeit =)
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.