Die Mathe-Redaktion - 14.11.2019 07:03 - Registrieren/Login
Auswahl
ListenpunktHome
ListenpunktAktuell und Interessant ai
ListenpunktArtikelübersicht/-suche
ListenpunktAlle Links / Mathe-Links
ListenpunktFach- & Sachbücher
ListenpunktMitglieder / Karte / Top 15
ListenpunktRegistrieren/Login
ListenpunktArbeitsgruppen
Listenpunkt? im neuen Schwätz
ListenpunktWerde Mathe-Millionär!
ListenpunktFormeleditor fedgeo
Schwarzes Brett
Aktion im Forum
Suche
Stichwortsuche in Artikeln und Links von Matheplanet
Suchen im Forum
Suchtipps

Bücher
Englische Bücher
Software
Suchbegriffe:
Mathematik bei amazon
Naturwissenschaft & Technik
In Partnerschaft mit Amazon.de
Kontakt
Mail an Matroid
[Keine Übungsaufgaben!]
Impressum

Bitte beachten Sie unsere Nutzungsbedingungen, die Distanzierung, unsere Datenschutzerklärung und
die Forumregeln.

Sie können Mitglied werden. Mitglieder können den Matheplanet-Newsletter bestellen, der etwa alle 2 Monate erscheint.

Der Newsletter Okt. 2017

Für Mitglieder
Mathematisch für Anfänger
Wer ist Online
Aktuell sind 567 Gäste und 5 Mitglieder online.

Sie können Mitglied werden:
Klick hier.

Über Matheplanet
 
Zum letzten Themenfilter: Themenfilter:
Matroids Matheplanet Forum Index
Moderiert von matph
Informatik » Programmieren » Continue und break innerhalb if-Anweisung
Druckversion
Druckversion
Antworten
Antworten
Autor
Universität/Hochschule Continue und break innerhalb if-Anweisung
MarsMission
Aktiv Letzter Besuch: im letzten Quartal
Dabei seit: 18.08.2019
Mitteilungen: 29
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Themenstart: 2019-09-01


Hey es geht darum zu überprüfen ob der Code im Anhang terminiert. Daneben befindet sich eine Musterlösung.

Meine Fragen beziehen sich auf break; und continue; innerhalb der if Anweisung. Wenn sich break und continue innerhalb von if-Anweisungen befinden die sich wiederum innerhalb einer while- Schleife bzw for schleife- befinden, wie ist das break und continue zu behandeln. Gilt das rot- bzw. blaumarkierte was ich markiert habe? Als Erstgedanke dachte ich nicht, da ich erst der Vermutung war das break die Anweisung innerhalb der if-Abfrage dann dort beendet bei break; und ein Continue die if-Abfrage neu startet. Das sollte aber nicht korrekt sein, wieso aber?




  Profil  Quote  Link auf diesen Beitrag Link
zippy
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 24.10.2018
Mitteilungen: 716
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.1, eingetragen 2019-09-01


2019-09-01 14:00 - MarsMission im Themenstart schreibt:
Das sollte aber nicht korrekt sein, wieso aber?

Weil sich break und continue auf umgebende Scheifen beziehen. Ein if-Statement ist kein Schleife.

Solche Dinge kann man auch nachlesen, etwa hier: A continue statement with no label attempts to transfer control to the innermost enclosing while, do, or for statement of the immediately enclosing method, constructor, or initializer; this statement, which is called the continue target, then immediately ends the current iteration and begins a new one.



  Profil  Quote  Link auf diesen Beitrag Link
Diophant
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 18.01.2019
Mitteilungen: 2121
Aus: Rosenfeld, BW
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.2, eingetragen 2019-09-01

\(\begingroup\)\( \newcommand{\ba}{\begin{aligned}} \newcommand{\ea}{\end{aligned}} \newcommand{\bpm}{\begin{pmatrix}} \newcommand{\epm}{\end{pmatrix}} \newcommand{\bc}{\begin{cases}} \newcommand{\ec}{\end{cases}}\)
Hallo,

theoretisch springt das Programm bei einem break dorthin, wo du es mit dem roten Pfeil markiert hast. Aber: das passiert niemals, da die Bedingung \(x=5\) nicht eintritt.

Die continue-Anweisung wird jedoch beim ersten Durchgang ausgeführt, eben genau so, wie du es mit dem blauen Pfeil angedeutet hast. Bei den nächsten Bedingungen jedoch nicht mehr, da dann der Ausdruck \(y<10\) den Wert false hat.

Beide Anweisungen beziehen sich jeweils auf das innerste Schleifenkonstrukt, in dem sie vorkommen. Die if-Struktur ist jedoch keine Schleife.


Gruß, Diophant

[Die Antwort wurde vor Beitrag No.1 begonnen.]
\(\endgroup\)


  Profil  Quote  Link auf diesen Beitrag Link
MarsMission
Aktiv Letzter Besuch: im letzten Quartal
Dabei seit: 18.08.2019
Mitteilungen: 29
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.3, vom Themenstarter, eingetragen 2019-09-01


Vielen dank!



  Profil  Quote  Link auf diesen Beitrag Link
MarsMission
Aktiv Letzter Besuch: im letzten Quartal
Dabei seit: 18.08.2019
Mitteilungen: 29
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.4, vom Themenstarter, eingetragen 2019-09-01


Also ich habe hier eine ähnliche Aufgabe, wobei ich mir folgende fragen stelle.

1) Das y` in der ersten Zeile aus der Lösung ist falsch oder? Eigentlich müsste es aufgrund von case 0: y`=y=3+1=4 sein anstatt 5 oder?

2)Was ist der unterschied ob das case Szenario mit oder ohne break endet? In beiden Fällen überspringt er doch alles was innerhalb {} steht bzgl. switch(Zahl){...}




  Profil  Quote  Link auf diesen Beitrag Link
Diophant
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 18.01.2019
Mitteilungen: 2121
Aus: Rosenfeld, BW
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.5, eingetragen 2019-09-01


Hallo,

2019-09-01 14:50 - MarsMission in Beitrag No. 4 schreibt:
Also ich habe hier eine ähnliche Aufgabe, wobei ich mir folgende fragen stelle.

1) Das y` in der ersten Zeile aus der Lösung ist falsch oder? Eigentlich müsste es aufgrund von case 0: y`=y=3+1=4 sein anstatt 5 oder?

Das sehe ich auch so.

EDIT: auch hier habe ich mich geirrt. Siehe den Beitrag von rlk.

2019-09-01 14:50 - MarsMission in Beitrag No. 4 schreibt:
2)Was ist der unterschied ob das case Szenario mit oder ohne break endet? In beiden Fällen überspringt er doch alles was innerhalb {} steht bzgl. switch(Zahl){...}



Hier ist wiederum die switch-Struktur keine Schleife. Ein break bricht also die do/while-Schleife ab. Dein roter Pfeil muss also auf den Befehl nach dem while bzw. ans Programmende zeigen.

Sorry, das durchgestrichene war falsch. Dein roter Pfeil ist richtig gesetzt: die break-Anweisung führt zu einem Sprung aus der switch/case-Struktur.


Gruß, Diophant



  Profil  Quote  Link auf diesen Beitrag Link
MarsMission
Aktiv Letzter Besuch: im letzten Quartal
Dabei seit: 18.08.2019
Mitteilungen: 29
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.6, vom Themenstarter, eingetragen 2019-09-01


Hey vielen dank! Ich habe noch einige Unsicherheiten ....

1) Also kann ich mir merken das

switch-case-Abfragen bzw. if-Abfragen, die ein break enthalten und sich innerhalb einer Schleife der folgenden Form befinden

do-while-loop
while-loop
for-loop

das break die komplette Schleife überspringt?

2) In der switch-case Abfrage was passiert wenn am Ende eines cases kein break vorhanden ist z.b. auch wenn das switch case szenario nicht in einer loop ist? Ich vermute mal das wenn case (n): Anweisung; KEIN BREAK VORHANDEN das darauffolgende case (n+1): Anweisung; break; ausführt unabhängig ob am Anfang switch(n+1) stattgefunden hat?



  Profil  Quote  Link auf diesen Beitrag Link
Diophant
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 18.01.2019
Mitteilungen: 2121
Aus: Rosenfeld, BW
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.7, eingetragen 2019-09-01


Hallo,

EDIT: hier stand Unsinn: siehe den nächsten Beitrag von rlk.

(Ich hatte leider das fehlende break übersehen).


Gruß, Diophant



  Profil  Quote  Link auf diesen Beitrag Link
rlk
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 16.03.2007
Mitteilungen: 10563
Aus: Wien
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.8, eingetragen 2019-09-01


Hallo MarsMission,
2019-09-01 14:50 - MarsMission in Beitrag No. 4 schreibt:
Also ich habe hier eine ähnliche Aufgabe, wobei ich mir folgende fragen stelle.

1) Das y` in der ersten Zeile aus der Lösung ist falsch oder? Eigentlich müsste es aufgrund von case 0: y`=y=3+1=4 sein anstatt 5 oder?
y'=5 ist richtig.
2019-09-01 14:50 - MarsMission in Beitrag No. 4 schreibt:
2)Was ist der unterschied ob das case Szenario mit oder ohne break endet? In beiden Fällen überspringt er doch alles was innerhalb {} steht bzgl. switch(Zahl){...}
Wegen der fehlenden break-Anweisung in Zeile 6 wird Zeile 7 ausgeführt und y auf 5 gesetzt. Diese Eigenschaft von switch wird als fall through bezeichnet und ist in den meisten Fällen unerwünscht. Die danach folgende break-Anweisung beendet die switch-Anweisung, der rote Pfeil ist richtig.

Verwendest Du Java, wie zippy in Beitrag No. 1 vermutet hat, oder eine andere Sprache?

Servus,
Roland




[Die Antwort wurde nach Beitrag No.5 begonnen.]



  Profil  Quote  Link auf diesen Beitrag Link
MarsMission
Aktiv Letzter Besuch: im letzten Quartal
Dabei seit: 18.08.2019
Mitteilungen: 29
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.9, vom Themenstarter, eingetragen 2019-09-01


Hey vielen dank für deine Antwort rlk. Ja ich benutze Java.

Also kann man sagen, dass wenn kein break; nach einem case(g): Anweisung; vorhanden ist, man diesen Code einfach überspringt und gar nicht beachtet sofern g eintritt? Weil so wie ich es verstanden habe wird alles wieder zurückgesetzt da kein break vorhanden ist und einfach die nächste Anweisung vom nächsten case(g+1) ausgeführt wird. Das geht alles solange weiter bis ein break vorhanden ist. Das break beendet dann das switch-case-Szenrio



  Profil  Quote  Link auf diesen Beitrag Link
zippy
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 24.10.2018
Mitteilungen: 716
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.10, eingetragen 2019-09-01


2019-09-01 15:37 - MarsMission in Beitrag No. 9 schreibt:
Also kann man sagen, dass wenn kein break; nach einem case(g): Anweisung; vorhanden ist, man diesen Code einfach überspringt und gar nicht beachtet sofern g eintritt?

Nein, das kann man nicht sagen, denn der Code kann ja Seiteneffekte haben (er kann z.B. eine Variable hochzählen).



  Profil  Quote  Link auf diesen Beitrag Link
MarsMission
Aktiv Letzter Besuch: im letzten Quartal
Dabei seit: 18.08.2019
Mitteilungen: 29
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.11, vom Themenstarter, eingetragen 2019-09-01


Und wie kommt man dann auf y=5? Anders kann ich mir das nicht erklären ...
Es geht um das y` in der ersten Reihe.
lg




  Profil  Quote  Link auf diesen Beitrag Link
Diophant
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 18.01.2019
Mitteilungen: 2121
Aus: Rosenfeld, BW
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.12, eingetragen 2019-09-01

\(\begingroup\)\( \newcommand{\ba}{\begin{aligned}} \newcommand{\ea}{\end{aligned}} \newcommand{\bpm}{\begin{pmatrix}} \newcommand{\epm}{\end{pmatrix}} \newcommand{\bc}{\begin{cases}} \newcommand{\ec}{\end{cases}}\)
Hallo MarsMission,

2019-09-01 15:46 - MarsMission in Beitrag No. 11 schreibt:
Und wie kommt man dann auf y=5? Anders kann ich mir das nicht erklären ...
Es geht um das y` in der ersten Reihe.
lg



Nun, zwischen diesen beiden Zeilen:
Java
case 0: y=x+1;
case 1: y=x+2; break;

ändert x seinen Wert ja nicht. Insofern läuft in der ersten Zeile die Rechnung \(y=3+1=4\) und in der zweiten Zeile eben \(y=3+2=5\) ab.

Denn wie gesagt: der ersten Zeile fehlt hier ein break.


Gruß, Diophant
\(\endgroup\)


  Profil  Quote  Link auf diesen Beitrag Link
zippy
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 24.10.2018
Mitteilungen: 716
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.13, eingetragen 2019-09-01


2019-09-01 15:46 - MarsMission in Beitrag No. 11 schreibt:
Und wie kommt man dann auf y=5?

Es ist vor dem Eintritt in das case-Statement $x=1+2=3$. Dann wird zuerst der "case 0"-Fall ausgeführt, der zu $y:=3+1=4$ führt, und danach der Code bis zum nächsten break, der zu $y:=3+2=5$ führt.

In diesem Fall hat der Code, der zu dem "case 0"-Fall gehört, tatsächlich keine Folgen, da seine Wirkung auf $y$ von dem nach nachfolgende Code vollständig überschrieben wird.

Das muss aber nicht immer so sein. Deshalb ist dein "Merksatz", dass man den Code "einfach überspringt und gar nicht beachtet" nicht korrekt (auch wenn er in diesem Spezialfall zum richtigen Ergebnis führt).

[Die Antwort wurde nach Beitrag No.11 begonnen.]



  Profil  Quote  Link auf diesen Beitrag Link
MarsMission hat die Antworten auf ihre/seine Frage gesehen.
MarsMission hatte hier bereits selbst das Ok-Häkchen gesetzt.
Neues Thema [Neues Thema] Antworten [Antworten]    Druckversion [Druckversion]

 


Wechsel in ein anderes Forum:
 Suchen    
 
All logos and trademarks in this site are property of their respective owner. The comments are property of their posters, all the rest © 2001-2019 by Matroids Matheplanet
This web site was made with PHP-Nuke, a web portal system written in PHP. PHP-Nuke is Free Software released under the GNU/GPL license.
Ich distanziere mich von rechtswidrigen oder anstößigen Inhalten, die sich trotz aufmerksamer Prüfung hinter hier verwendeten Links verbergen mögen.
Lesen Sie die Nutzungsbedingungen, die Distanzierung, die Datenschutzerklärung und das Impressum.
[Seitenanfang]