Taschenrechner Schleifenproblem?
-
- Beiträge: 92
- Registriert: Fr Jan 22, 2010 1:49 pm
Re: Taschenrechner Schleifenproblem?
Aber wenn break das while beendet. Beendet es dann auch automatisch das Switch? und wiso funktioniert dann noch die default Anweisung? Weil das default steht doch noch im switch, oder nicht??
Re: Taschenrechner Schleifenproblem?
oh hab ich mich vor lauter switch und while vertan 
Das break beendet in diesem Fall nur die switch-Entscheidung. Mit der while-Schleife hat das hier nichts zu tun.
gruß stampuhh

Das break beendet in diesem Fall nur die switch-Entscheidung. Mit der while-Schleife hat das hier nichts zu tun.
gruß stampuhh
NachDenkSeiten.de
-
- Beiträge: 92
- Registriert: Fr Jan 22, 2010 1:49 pm
Re: Taschenrechner Schleifenproblem?
Ist schon verwirrend
. Aber wenn das break das switch beendet steht das default nicht mehr im switch??

Re: Taschenrechner Schleifenproblem?
Es steht noch im switch wird aber nicht mehr ausgeführt. Das default soll ja eigentlich nur ausgeführt werden wenn eine Zahl vorkommt die nicht durch die Fälle (case) abgedeckt ist. So wie das else bei der if-Bedingung.
Eigentlich ist eine switch mit break ja auch nichts anderes als eine sehr oft verzweigte if else Abfrage
gruß stampuhh
Eigentlich ist eine switch mit break ja auch nichts anderes als eine sehr oft verzweigte if else Abfrage
Code: Alles auswählen
if(i == 1)
{
// entspricht case 1
}
else if(i == 2)
{
// entspricht case 2
}
else
{
// entspricht default und wird nur ausgeführt wenn if 1 und if 2 nicht ausgeführt wurden.
}
NachDenkSeiten.de
- Dirty Oerti
- Beiträge: 2229
- Registriert: Di Jul 08, 2008 5:05 pm
- Wohnort: Thurndorf / Würzburg
Re: Taschenrechner Schleifenproblem?
Mal eine Anmerkung zum Code:
"zahl9" und "zahl1" sind keine guten Namen für Variablen. Wenn du dein Programm in einem halben Jahr (oder sagen wir in 3 Tagen) noch einmal anschaust, dann musst du erst einmal wieder verstehen, was diese Variablen eigentlich beinhalten und welchen Zweck sie verfolgen.
Das die Variablen eine Zahl in sich tragen ist klar, deswegen ist es unnütze, das dann auch noch in den Variablennamen zu packen.
Wie wäre es z.B. mit:
"auswahl" / "choice"
"fortfahren" / "run"
o.ä.
Dann nochwas:
Blöcke irgendwelcher Art (while, if, else, einfach nur so {} ) können nur nacheinander oder komplett ineinander verschachtelt gesetzt werden.
Das ist ok.
Sowas geht aber !NICHT!:
Das es nicht gehen kann siehst du schon daran, dass man es mit Klammern (ohne Kommentare) gar nicht demonstrieren kann 
Zum switch:
Du musst unterscheiden zwischen die Schleife beenden, wenn das Programm läuft, also ausgeführt wird und die Schleife (syntaktisch) im Programmcode abschließen.
Ist nun integer z.B. gleich 1, dann wird der Code im Bereich hinter der Bezeichnung "case 1:" ausgeführt. Würde kein "break;" da stehen, dann würde auch der Code von case 2 ausgeführt werden, denn auch der steht (im Programmcode) hinter der Bezeichnung "case 1:"
Steht nun aber ein break da, dann endet die switch-Anweisung in dem Fall, dass integer == 1 ist am break; am Ende von case 1:
"zahl9" und "zahl1" sind keine guten Namen für Variablen. Wenn du dein Programm in einem halben Jahr (oder sagen wir in 3 Tagen) noch einmal anschaust, dann musst du erst einmal wieder verstehen, was diese Variablen eigentlich beinhalten und welchen Zweck sie verfolgen.
Das die Variablen eine Zahl in sich tragen ist klar, deswegen ist es unnütze, das dann auch noch in den Variablennamen zu packen.
Wie wäre es z.B. mit:
"auswahl" / "choice"
"fortfahren" / "run"
o.ä.
Dann nochwas:
Blöcke irgendwelcher Art (while, if, else, einfach nur so {} ) können nur nacheinander oder komplett ineinander verschachtelt gesetzt werden.
Code: Alles auswählen
while
{
if
{
}
else
{
if
{
}
}
}
if
{
for
{
{
}
}
}
Sowas geht aber !NICHT!:
Code: Alles auswählen
if
{ // if1 start
if
{ // if2 start
} // if1 ende
} // if2 ende

Zum switch:
Du musst unterscheiden zwischen die Schleife beenden, wenn das Programm läuft, also ausgeführt wird und die Schleife (syntaktisch) im Programmcode abschließen.
Code: Alles auswählen
switch (integer)
{
case 1:
{
// 1
break; //damit NUR 1 ausgeführt wird und der Code unterhalb dieser Anweisung nicht!
}
case 2:
{
// 2
// kein break, wird also case 2 ausgeführt, dann wird danach immer der folgende Code (case 3) ausgeführt
}
case 3:
{
// 3
break;
}
default: // Das ist der defaut-case, das wird ausgeführt, wenn keiner der obigen Fälle (cases) erfüllt ist. Du musst nicht unbedingt einen default case schreiben, du kannst ihn auch weglassen.
{
// default
}
} // Ende des switch im PROGRAMMCODE
Steht nun aber ein break da, dann endet die switch-Anweisung in dem Fall, dass integer == 1 ist am break; am Ende von case 1:
Bei Fragen einfach an daniel[ät]proggen[Punkt]org
Ich helfe gerne!
----------
Wenn du ein Licht am Ende des Tunnels siehst, freu dich nicht zu früh! Es könnte ein Zug sein, der auf dich zukommt!
----
It said: "Install Win95 or better ..." So I installed Linux.
Ich helfe gerne!

----------
Wenn du ein Licht am Ende des Tunnels siehst, freu dich nicht zu früh! Es könnte ein Zug sein, der auf dich zukommt!
----
It said: "Install Win95 or better ..." So I installed Linux.
-
- Beiträge: 92
- Registriert: Fr Jan 22, 2010 1:49 pm
Re: Taschenrechner Schleifenproblem?
Also das Break beendet die Switch Anweisung, das default steht noch im switch (aber fungiert als eine Art else Anweisung). Dann Erfolgt das erste } das zeigt das ende des switch an ( rein vom schreiben des Programms her), obwohl es bei break schon Beendet wurde. Das zweite } zeigt das Ende des while an (rein vom schreiben des Programms).
Beendet wird das while nach der Prüfung des Wertes der in while festgelt wurde und übereinstimmt.
Stimmt das so?
Beendet wird das while nach der Prüfung des Wertes der in while festgelt wurde und übereinstimmt.
Stimmt das so?
-
- Beiträge: 92
- Registriert: Fr Jan 22, 2010 1:49 pm
Re: Taschenrechner Schleifenproblem?
Also nochmal.
Das Switch Case 1-6 fungiert auch als solches. Bis Case 6 ausgewählt wird. Da dort break enthalten ist wird sofort das Switch bendet und ignoriert alles was noch in diesem steht und geht zur nächsten Anweisung nach dem Switch weiter. Da dort nur } das zweite steht, also while Ende ( rein vom schreiben des Programmes her) wird nun geprüft ob der durch Case 6 gegeben wert mit dem im Vorfeld im while fesgelgtem wert übereinstimmt was nur im Case 6 der Fall ist und beendet das proramm da die Schleife aufgelöst wird und die Werte übereinstimmen. Wird nur Case 1- 5 aufgerufen findet keine Übereinstimmung mit dem im while festgelegten wert statt. Daher wird das Programm wiederholt bis Case 6 das aufhebt. In diesem Fall ist die Default Anweisung nicht mehr notwendig und wird durch in Case 6 festgelegtem Break einfach ignoriert. Ist ja ach nicht mehr notwendig da das Programm im Case 6 Fall sofort beendt wird; nach der Print ausgabe.
Stimmt das so??
Das Switch Case 1-6 fungiert auch als solches. Bis Case 6 ausgewählt wird. Da dort break enthalten ist wird sofort das Switch bendet und ignoriert alles was noch in diesem steht und geht zur nächsten Anweisung nach dem Switch weiter. Da dort nur } das zweite steht, also while Ende ( rein vom schreiben des Programmes her) wird nun geprüft ob der durch Case 6 gegeben wert mit dem im Vorfeld im while fesgelgtem wert übereinstimmt was nur im Case 6 der Fall ist und beendet das proramm da die Schleife aufgelöst wird und die Werte übereinstimmen. Wird nur Case 1- 5 aufgerufen findet keine Übereinstimmung mit dem im while festgelegten wert statt. Daher wird das Programm wiederholt bis Case 6 das aufhebt. In diesem Fall ist die Default Anweisung nicht mehr notwendig und wird durch in Case 6 festgelegtem Break einfach ignoriert. Ist ja ach nicht mehr notwendig da das Programm im Case 6 Fall sofort beendt wird; nach der Print ausgabe.
Stimmt das so??
Re: Taschenrechner Schleifenproblem?
Mhh ja schon. Aber du hast ja nicht nur nach dem case 6 ein break. Jedes andere break in der switch Abfrage funktioniert genauso.
Am besten zu versuchst das Prinzip der while-Schleife erst einmal ohne die switch zu verstehen 
Ich versuche es noch einmal zu erklären
Schritt 1:
Schritt 2:
Schritt 3:
Die while-Bedingung kann man wörtlich so sehen: "Mache etwas solange wie die Bedingung wahr ist, beende die Schleife sobald sie falsch wird".
Betrachte die while und die switch Klammerung getrennt. Dirty Oerti hat es oben sehr gut beschrieben
Es bringt auch viel wenn man einfach mal ein bisschen "rum spielt". Zumindest mir hilft es wenn ich etwas nicht ganz verstanden habe, dann probiere ich ein bisschen aus im Code.
gruß stampuhh
Code: Alles auswählen
int i = 1;
switch(i)
{
case 1 : printf("bla\n"); //Wird ausgeführt
break; //BREAK! Programm beendet switch und springt an Position XY
case 2 : printf("blub\n"); // wird ignoriert
break; // das hier auch
default: printf("lala\n"); // und das hier auch
}
// Position XY
// Hier geht es weiter im Programm..egal was!

Ich versuche es noch einmal zu erklären
Schritt 1:
Code: Alles auswählen
int i = 1;
while( i < 3) // i ist 1 also kleiner als 3
{
i++; // i um 1 erhöhen (i = i + 1 )
} // Schritt 2 springe wieder an die Bedingung der while-Schleife
Code: Alles auswählen
while( i < 3) // i ist 2 also kleiner als 3, da es beim ersten Durchlauf erhöht wurde
{
i++; // i um 1 erhöhen (i = i + 1 )
} // Schritt 3 springe wieder an die Bedingung der while-Schleife
Code: Alles auswählen
while( i < 3) // i ist 3 also nicht kleiner als 3 !! Die while-Schleife wird beendet. Springe nach Position XY
{
i++; // wird nicht mehr ausgeführt
} // Position XY
// Hier geht es jetzt weiter. Das Programm hat die while-Schleife verlassen
Betrachte die while und die switch Klammerung getrennt. Dirty Oerti hat es oben sehr gut beschrieben

Es bringt auch viel wenn man einfach mal ein bisschen "rum spielt". Zumindest mir hilft es wenn ich etwas nicht ganz verstanden habe, dann probiere ich ein bisschen aus im Code.
gruß stampuhh
NachDenkSeiten.de
-
- Beiträge: 92
- Registriert: Fr Jan 22, 2010 1:49 pm
Re: Taschenrechner Schleifenproblem?
Also ist Case 1-5 wahr, Case 6 falsch was die Schleifenbedinungen angeht und Break ignoriert alles weiere unterhalb der Anweisung ( indemfall den Rest des Switch ). da nach dem Switch nichtsmehr folgt ( so while geklammert). So wird bei jedem durchlauf Case 1-6 geprüft ob die while bedinung falsch geworden ist. Im Case 6 Fall trifft das zu was zum sofortgem schleifen Ende nach der Prüfung führt. Würden noch ander Anweisungen im Programm stehen nach dem Switch nicht {while} geklammert sind, würden diese theoretisch ausgeführt werden da die Schleife verlasssen wurde.
Case 6 break ignoriert dann das Default (oder was immmernoch da stehen würde), was noch im Switch steht. Da Break das Switch sofort beendet.
Break beenden indem Sinn immer den Rest was da noch kommen könnte in einer Funktion oder Anweisung und führt so sofort zum nächsten Schritt,
Also unten. Text 1 sieht man, Text 2 sieht man, Text 3 sieht man, Text 4 sieht man wird per Auswahl aktiv und führt dazu das Text 5 nicht erscheint, Text 5 würde man sehen wenn 4 nicht aktiviert würde (dafür sieht man dann Text 4 nicht mehr), Text 6 sieht man.
Text 1
{Text 2
Text 3
Text 4 Break
Text5}
Text 6
Jetzt verstanden?
Nochmal Danke für eure Geduld und Hilfe!!!
Case 6 break ignoriert dann das Default (oder was immmernoch da stehen würde), was noch im Switch steht. Da Break das Switch sofort beendet.
Break beenden indem Sinn immer den Rest was da noch kommen könnte in einer Funktion oder Anweisung und führt so sofort zum nächsten Schritt,
Also unten. Text 1 sieht man, Text 2 sieht man, Text 3 sieht man, Text 4 sieht man wird per Auswahl aktiv und führt dazu das Text 5 nicht erscheint, Text 5 würde man sehen wenn 4 nicht aktiviert würde (dafür sieht man dann Text 4 nicht mehr), Text 6 sieht man.
Text 1
{Text 2
Text 3
Text 4 Break
Text5}
Text 6
Jetzt verstanden?
Nochmal Danke für eure Geduld und Hilfe!!!
- Dirty Oerti
- Beiträge: 2229
- Registriert: Di Jul 08, 2008 5:05 pm
- Wohnort: Thurndorf / Würzburg
Re: Taschenrechner Schleifenproblem?
Hm, naja.
Ich denke du verstehst da mit dem switch noch etwas falsch. Schau dir das am besten erst OHNE while Schleife außenrum an. Ob da ein while oder ein if oder auch gar nichts außenrum ist interessiert das Switch (was KEINE Schleife ist) nicht.
Arbeiten wir mit dem folgenden Code: (Am besten du kopierst ihn dir und machst ein einfaches Programm daraus ("int main() {" davor und "return 0; }" danach ) )
Ok, was passiert nun, wenn die Variable var den Wert 0 hat?
-----------------------------------------
-----------------------------------------
So
Verständlich?
Ich denke du verstehst da mit dem switch noch etwas falsch. Schau dir das am besten erst OHNE while Schleife außenrum an. Ob da ein while oder ein if oder auch gar nichts außenrum ist interessiert das Switch (was KEINE Schleife ist) nicht.
Arbeiten wir mit dem folgenden Code: (Am besten du kopierst ihn dir und machst ein einfaches Programm daraus ("int main() {" davor und "return 0; }" danach ) )
Code: Alles auswählen
int var;
var = X;// Gib hier zu Testzwecken am besten mal Zahlen von 0 bis 6 ein. Das X ist mal nur als Platzhalter gedacht.
printf("Das Switch beginnt\n");
switch (var)
{
case 1:
{
printf("Case 1 wird ausgeführt\n");
break;
}
case 2:
{
printf("Case 2 wird ausgeführt\n");
}
case 3:
{
printf("Case 3 wird ausgeführt\n");
break;
}
case 4:
{
printf("Case 4 wird ausgeführt\n");
}
default:
{
printf("Kein Case passt, also wird der (default) Standardfall ausgeführt\n");
}
}
printf("Das Switch ist zuende\n");
Ok, was passiert nun, wenn die Variable var den Wert 0 hat?
Alles fett markierte wird ausgeführt. Die Ausgabe würde so aussehen:int var;
var = 0;
printf("Das Switch beginnt\n");
switch (var)
{
case 1:
{
printf("Case 1 wird ausgeführt\n");
break;
}
case 2:
{
printf("Case 2 wird ausgeführt\n");
}
case 3:
{
printf("Case 3 wird ausgeführt\n");
break;
}
case 4:
{
printf("Case 4 wird ausgeführt\n");
}
default:
{
printf("Kein Case passt, also wird der (default) Standardfall ausgeführt\n");
}
}
printf("Das Switch ist zuende\n");
-----------------------------------------Das Switch beginnt
Kein Case passt, also wird der (default) Standardfall ausgeführt
Das Switch ist zuende
Die Ausgabe dazu:int var;
var = 1;
printf("Das Switch beginnt\n");
switch (var)
{
case 1:
{
printf("Case 1 wird ausgeführt\n");
break; // Heißt, "BRICH die Switch-Anweisung JETZT ab und gehe an ihr Ende"
}
case 2:
{
printf("Case 2 wird ausgeführt\n");
}
case 3:
{
printf("Case 3 wird ausgeführt\n");
break;
}
case 4:
{
printf("Case 4 wird ausgeführt\n");
}
default:
{
printf("Kein Case passt, also wird der (default) Standardfall ausgeführt\n");
}
}
printf("Das Switch ist zuende\n");
-----------------------------------------Das Switch beginnt
Case 1 wird ausgeführt
Das Switch ist zuende
Die Ausgabe wäre hier:int var;
var = 2;
printf("Das Switch beginnt\n");
switch (var)
{
case 1:
{
printf("Case 1 wird ausgeführt\n");
break;
}
case 2:
{
printf("Case 2 wird ausgeführt\n");
// hier ist KEIN break!
}
case 3:
{
printf("Case 3 wird ausgeführt\n");
break;
}
case 4:
{
printf("Case 4 wird ausgeführt\n");
}
default:
{
printf("Kein Case passt, also wird der (default) Standardfall ausgeführt\n");
}
}
printf("Das Switch ist zuende\n");
-----------------------------------------Das Switch beginnt
Case 2 wird ausgeführt
Case 3 wird ausgeführt
Das Switch ist zuende
Ausgabe:int var;
var = 3;
printf("Das Switch beginnt\n");
switch (var)
{
case 1:
{
printf("Case 1 wird ausgeführt\n");
break;
}
case 2:
{
printf("Case 2 wird ausgeführt\n");
}
case 3:
{
printf("Case 3 wird ausgeführt\n");
break;
}
case 4:
{
printf("Case 4 wird ausgeführt\n");
}
default:
{
printf("Kein Case passt, also wird der (default) Standardfall ausgeführt\n");
}
}
printf("Das Switch ist zuende\n");
Das Switch beginnt
Case 3 wird ausgeführt
Das Switch ist zuende
-----------------------------------------
Ausgabe:int var;
var = 4;
printf("Das Switch beginnt\n");
switch (var)
{
case 1:
{
printf("Case 1 wird ausgeführt\n");
break;
}
case 2:
{
printf("Case 2 wird ausgeführt\n");
}
case 3:
{
printf("Case 3 wird ausgeführt\n");
break;
}
case 4:
{
printf("Case 4 wird ausgeführt\n");
// KEIN break, also weiter
}
default:
{
printf("Kein Case passt, also wird der (default) Standardfall ausgeführt\n");
}
}
printf("Das Switch ist zuende\n");
Das Switch beginnt
Case 4 wird ausgeführt
Kein Case passt, also wird der (default) Standardfall ausgeführt
Das Switch ist zuende
-----------------------------------------
Ausgabe:int var;
var = 5; // Jeder höhere Wert hat nun die selben Auswirkungen
printf("Das Switch beginnt\n");
switch (var)
{
case 1:
{
printf("Case 1 wird ausgeführt\n");
break;
}
case 2:
{
printf("Case 2 wird ausgeführt\n");
}
case 3:
{
printf("Case 3 wird ausgeführt\n");
break;
}
case 4:
{
printf("Case 4 wird ausgeführt\n");
}
default:
{
printf("Kein Case passt, also wird der (default) Standardfall ausgeführt\n");
}
}
printf("Das Switch ist zuende\n");
-----------------------------------------Das Switch beginnt
Kein Case passt, also wird der (default) Standardfall ausgeführt
Das Switch ist zuende
So

Bei Fragen einfach an daniel[ät]proggen[Punkt]org
Ich helfe gerne!
----------
Wenn du ein Licht am Ende des Tunnels siehst, freu dich nicht zu früh! Es könnte ein Zug sein, der auf dich zukommt!
----
It said: "Install Win95 or better ..." So I installed Linux.
Ich helfe gerne!

----------
Wenn du ein Licht am Ende des Tunnels siehst, freu dich nicht zu früh! Es könnte ein Zug sein, der auf dich zukommt!
----
It said: "Install Win95 or better ..." So I installed Linux.