Gast
#3481554
Hallo, kann ich irgendwie eine for-schleife aus einer if-bedingung herausholen? also z.B.
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
|
Anzeige
|
For-Schleife auf if-bedingung herausholen
Gast
#3481554
Hallo, kann ich irgendwie eine for-schleife aus einer if-bedingung herausholen? also z.B.
Ja
Gast
#3481563
Und wie? bei mir kommt die Fehlermeldung: 'else an ungültiger Position' und es wird mir die Zeile
angezeigt
Gast
#3481567
zähl mal die klammern Kümmer dich erst mal um deine geschwungenen Klammern, die gehen ständig auf aber nur 2x zu...
Gast
#3481572
Ja, also in meinem Programm ist es
also zum schluss gehen noch die zwei Klammern von der for-Schleife zu. Dann denke ich, dass das Beenden der if Abfrage, die erste for-Schleife beendet. Aber ich frage ja nach einem neuen Wert und davor muss die Klammer von if ja geschlossen worden sein oder nicht?
Gast
#3481575
Tolles Programm, werde ich mir mal merken. Es braucht viel weniger geschlossene geschweifte Klammern, als offene. ;-)
Gast
#3481577
Aber zwei (entweder die von x=1, oder von x==2) werden doch gar nciht benötigt, da das Programm gar nicht dahinspringt. müsste es dann so sein?
Lerne richtig Einrücken (Bei { einrücken und bei } ausrücken), sonst
kommt so Mist raus wie bei dir:
Wie du siehst totaler quatsch. Frank schrieb: > if(x==1){ > for(y=1;y<10;y++){ > for(z=1;z<10;z++){ > } // hier beende ich die if(x==1) schleife //////////////////// } > else if(x==2){ > for(z=1;z<10;z++){ > for(y=1;y<10;y++){ > } // hier beende ich die if(x==2) schleife } ///////////////////////////////////////////// Vieleicht so else nicht einsetzen neuer test für x=2: > if(x==1){ > for(y=1;y<10;y++){ > for(z=1;z<10;z++){ > } // hier beende ich die if(x==1) schleife } if(x==2){ > for(z=1;z<10;z++){ > for(y=1;y<10;y++){ > } // hier beende ich die if(x==2) schleife } dann sind die Tests unabhängig in der Reihenfolge: for(z=1;z<10;z++){ > if(x==1){ > for(y=1;y<10;y++){ > } // hier beende ich die if(x==1) schleife } for(y=1;y<10;y++){ if(x==2){ > for(z=1;z<10;z++){ > } // hier beende ich die if(x==2) schleife }
Gast
#3481598
Ah ja, das könnte (wird es auch) funktionieren. Das Problem ist aber, dass x nicht nur eins oder zwei ist, sondern eine variable zwischen 1 und 8. Dann stelle ich mir diesen weg als sehr schwierig vor. Aber trotzdem vielen Dank für den Tip. Frank
Gast
#3481599
>Aber zwei (entweder die von x=1, oder von x==2) werden doch gar nciht >benötigt, da das Programm gar nicht dahinspringt. Das ist eine ungewöhnliche Auffassung der Bedeutung von schliessenden Klammern. Obwohl man das versuchen kann, führt sie aber nicht zum Ziel. Die geschweiften Klammern haben genau einen Sinn: Sie fassen mehrere Anweisungen zu einem Block zusammen. Das ist dann nötig wenn mehrere Anweisungen in einer Schleife oder abhängig von einer If-Bedingung (if-Schleigen gibt es nicht) ausgeführt werden sollen. Ich demonstriere das hier mal an Deinem Code:
Gast
#3481603
Gast
#3481606
Da aber ein for (genauso wie ein if) nur eine einzelne Anweisung ist, kannst Du Dir einen Teil der Klammerungen sparen.
Sieht schon ein bisschen übersichtlicher aus. Die Einrückung muss natürlich trotzdem eingehalten werden, sonst wirds wieder kraus.
Gast
#3481607
Ja, gerade das wollte ich vermeiden, da der Code dazwischen sehr lang ist. Also um auf meiner ersten Frage (natürlich mit der Erweiterung, dass ich 8 möglichkeiten habe (da ja sonst lutz's code funktionieren würde)) zurückzukommen, sehe ich es richtig, dass dies nicht möglich ist?
Gast
#3481618
>Ja, gerade das wollte ich vermeiden, da der Code dazwischen sehr lang
ist.
Was genau wolltest Du vermeiden? Welcher Code wo zwischen?
Langer Code an sich ist kein Problem. Der Computer ist sehr geduldig.
Ich kann Dir leider nicht ganz folgen was Lutz Code betrifft.
Du kannst if-elseif Ketten beliebig lang machen.
Du kannst soetwas auch durch einen switch ersetzen (was es aber nicht wirklich übersichtlicher macht.
Frank schrieb: > dass ich 8 möglichkeiten habe was soll denn bei den anderen 6 Möglichkeiten passieren?
Gast
#3481624
Die Anweisungen, die ich bei XXXX hinschreiben müsste, ist sehr lang und wenn ihc das ganze 8 mal machen müsste, wäre es mir zu unübersichtlich.
Frank schrieb: > variable zwischen 1 > und 8 Dann hilft möglicherweise die switch case Anweisung, weil dabei eine Anzahl von verschiedenen Werten ausgewertet wird. int casex = 1; // Das ist die variable,die ausgewertet wird switch (casex) { case 1: for(y=1;y<10;y++) { // hier beginnen die zu einem Block zusammengefassten Anweisungen for(z=1;z<10;z++) { // hier beginnen die zu einem Block zusammengefassten Anweisungen } // hier enden die zu einem Block zusammengefassten Anweisungen } // hier enden die zu einem Block zusammengefassten Anweisungen break; // bis hierher läuft das Programm, wenn casex= 1 ist case 2: ... break; . . . case 8: ... break; default: ... break; } Dann mach ein Unterprogramm dafür:
Das kannst du dann immer aufrufen wenn du es ausführen willst: "XXXX();" Wobei ich mit meiner Frage auf sowas hinauswollte wie, ob du z.B. zwischen geraden und ungeraden x unterscheiden möchtest oder sowas, dann wäre das ganze noch einfacher zu bewerkstelligen.
Gast
#3481630
Du kannst natürlich so etwas:
unter gewissen Umständen auch durch sowas ersetzen
ersetzen. Auch kannst Du lange Anweisungen in eine Funktion schreiben. Es kommt halt darauf an, wie diese "langen Anweisungen" genau aussehen, wie Du im Einzelfall damit umgehen musst. Vielleicht brauchst Du Parameter. Was ist denn in den langen Anweisungen gleich und was unterscheidet sich je nach dem was x für einen Wert hat?
Gast
#3481633
Wahrscheinlich muss ich ein Unterprogramm dafür machen. Aber in diesem Prgramm rufe ich schon einige Unterprogramme auf. Das ist dann egal oder? SChon einmal danke für die Tips. Frank schrieb: > Prgramm rufe ich schon einige Unterprogramme auf. Das ist dann egal > oder? Es werden schon Grenzen durch die Hardware gesetzt, aber die wirst du auf einem Computer nicht erreichen, höchstens auf kleinen PIC-Mikrocontrollern mit lächerlichen Stacktiefen von 8... -> Ja, ist egal Ob du mit weniger for-Schleifen auskommst, hängt davon ab, wie groß die Code-Unterschiede bei unterschiedlichem x sind. Wenn sie nur klein sind, macht es Sinn, die if-Abfragen in die Schleifen hineinzunehmen. Bei großen Unterschieden ist die Lösung mit außen if - innen for aber auf jeden Fall schneller und zwar besonders bei Doppel- oder Mehrfachschleifen. Antwort schreibenBitte melde dich an, um einen Beitrag zu schreiben. |
Anzeige
|