metalmeier Geschrieben 4. Dezember 2020 Teilen Geschrieben 4. Dezember 2020 Hallo ich hänge bei meinem Fernstudium an einer Aufgabe. Laut Aufgabe bringen die beiden SChleifen das gleiche Ergebniss. (do while/until) $n = 1 do { "Schleifen-Nr: $n" $n++ } while ($n -lt 7) $n = 1 do { "Schleifen-Nr: $n" $n++ } until ($n -ge 7) In Powershell ISE wird immer bis 6 durchgeschleift, bringt also das Selbe. In offizielen Artikeln habe ich gelsen "Grundsätzlich können sich do-until und do-while gegenseitig ersetzen, indem man die Bedingung negiert." Wenn man nur negiert, müsste es aber, wenn -lt = kleiner als ist, -gt (=größer) heißen. Jedoch wird dann ja die 7 (=) angezeigt. Stimmt diese Aussage mit dem negieren? Bei der ESA wird ja gefragt, was bringt das gleiche Ergebnis, das funktioniert aber mit negieren nicht. Danke im Voraus. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
0 MartinSt Geschrieben 4. Dezember 2020 Teilen Geschrieben 4. Dezember 2020 (bearbeitet) vor 41 Minuten schrieb metalmeier: müsste es aber, wenn -lt = kleiner als ist, -gt (=größer) heißen. warum? Bearbeitet 4. Dezember 2020 von MartinSt Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
0 metalmeier Geschrieben 4. Dezember 2020 Autor Teilen Geschrieben 4. Dezember 2020 (bearbeitet) wär ja net wenn du mir erklärst warum 🙂 while / until ist -gt / le oder -lt? Bearbeitet 4. Dezember 2020 von metalmeier Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
0 Whiz-zarD Geschrieben 4. Dezember 2020 Teilen Geschrieben 4. Dezember 2020 vor einer Stunde schrieb metalmeier: Wenn man nur negiert, müsste es aber, wenn -lt = kleiner als ist, -gt (=größer) heißen. Jedoch wird dann ja die 7 (=) angezeigt. Überlege doch mal, was an deiner Aussage nicht stimmt. Ist while ($n -lt 7) wirklich das selbe, wie until ($n -gt 7)? Schaue doch mal genau dein Beispiel an, denn da steht schon die Antwort. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
0 metalmeier Geschrieben 4. Dezember 2020 Autor Teilen Geschrieben 4. Dezember 2020 Da wäre noch die Frage kann ich alle Operatoren in oben dem Script anwenden oder nicht? Ich habe einfach durchprobiert und dann bleibt die Schleife bei 1 stehen. Also while /until - lt 7 (kleiner als) = -gt 7 (NICHT größer als) ..... heißt also 7 darf auch stehen -lt 7 = -ge 7 (NICHT gleich größer) -gt 7 (größer als) = -le 7 (NICHT kleiner gleich) -le = -gt So 🙂 ? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
0 Whiz-zarD Geschrieben 4. Dezember 2020 Teilen Geschrieben 4. Dezember 2020 Was heißt denn: -lt -gt -le -ge Das sind vier unterschiedliche Operatoren, die alle eine unterschiedliche Aussage treffen. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
0 metalmeier Geschrieben 4. Dezember 2020 Autor Teilen Geschrieben 4. Dezember 2020 (bearbeitet) -lt - kleiner als -gt - größer als -le - kleiner gleich -ge - gleich, größer So hab ich es aus Powershell, sollte ja auch auf die englischen Wörter zu treffen. Bearbeitet 4. Dezember 2020 von metalmeier Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
0 pr0gg3r Geschrieben 4. Dezember 2020 Teilen Geschrieben 4. Dezember 2020 (bearbeitet) vor 3 Stunden schrieb metalmeier: Wenn man nur negiert, müsste es aber, wenn -lt = kleiner als ist, -gt (=größer) heißen. Jedoch wird dann ja die 7 (=) angezeigt. -lt ist negiert aber nicht -gt, sondern -ge /edit: vor 3 Stunden schrieb metalmeier: In Powershell ISE wird immer bis 6 durchgeschleift, bringt also das Selbe. Soll es ja auch sein?! In deinem Script hast du ja einmal while ($n -lt 7) und einmal until ($n -ge 7), das passt so schon. Ich gehe davon aus, dass du meinst, dass bei dem until -gt stehen soll, das ist aber nicht so weil -lt negiert -ge ist und nicht -gt. Bearbeitet 4. Dezember 2020 von pr0gg3r Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
0 metalmeier Geschrieben 5. Dezember 2020 Autor Teilen Geschrieben 5. Dezember 2020 vor 9 Stunden schrieb pr0gg3r: -lt ist negiert aber nicht -gt, sondern -ge /edit: Soll es ja auch sein?! In deinem Script hast du ja einmal while ($n -lt 7) und einmal until ($n -ge 7), das passt so schon. Ich gehe davon aus, dass du meinst, dass bei dem until -gt stehen soll, das ist aber nicht so weil -lt negiert -ge ist und nicht -gt. Ok, die Frage ist jetzt ob ich es verstanden habe 😛 Habe ich es so richtig negiert? while until lt 7 (kleiner als) = -ge 7 (NICHT gleich größer) -gt 7 (größer als) = -le 7 (NICHT kleiner gleich) -le = -gt Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
0 Whiz-zarD Geschrieben 5. Dezember 2020 Teilen Geschrieben 5. Dezember 2020 (bearbeitet) Fang doch nicht immer an, die Begriffe umzuformulieren... -gt => greater than => größer als -lt => less than => kleiner als -ge => greater or equals than => größer oder gleich als -le => less or equals than => kleiner oder gleich als while => solange until => bis Das ist alles. Versuche doch deinen oberen Code in einen Sinnvollen Satz zu formulieren und dabei verwendest du einfach das Vokabular. do { // Irgendein Code } while ($n -lt 7) do { // Irgendein Code } until ($n -ge 7) Im oberen Code steht einfach "Durchlaufe die Schleife, solange n kleiner als 7 ist". Wie lautet nun der Satz der zweiten Schleife? Bearbeitet 5. Dezember 2020 von Whiz-zarD Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
0 metalmeier Geschrieben 5. Dezember 2020 Autor Teilen Geschrieben 5. Dezember 2020 vor 16 Minuten schrieb Whiz-zarD: Fang doch nicht immer an, die Begriffe umzuformulieren... -gt => greater than => größer als -lt => less than => kleiner als -ge => greater or equals than => größer oder gleich als -le => less or equals than => kleiner oder gleich als while => solange until => bis Das ist alles. Versuche doch deinen oberen Code in einen Sinnvollen Satz zu formulieren und dabei verwendest du einfach das Vokabular. do { // Irgendein Code } while ($n -lt 7) do { // Irgendein Code } until ($n -ge 7) Im oberen Code steht einfach "Durchlaufe die Schleife, solange n kleiner als 7 ist". Wie lautet nun der Satz der zweiten Schleife? Durchlaufe die Schleife bis n NICHT größer oder gleich ist. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
0 Whiz-zarD Geschrieben 5. Dezember 2020 Teilen Geschrieben 5. Dezember 2020 (bearbeitet) vor 25 Minuten schrieb metalmeier: Durchlaufe die Schleife bis n NICHT größer oder gleich ist. Nein... 🙄 Wo steht denn doch ein -ne für not bzw. nicht? Bearbeitet 5. Dezember 2020 von Whiz-zarD Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
0 Han_Trio Geschrieben 5. Dezember 2020 Teilen Geschrieben 5. Dezember 2020 (bearbeitet) until ($n -ge 7) bedeutet "bis der Wert von Variable n größer oder gleich 7 ist". Wenn du mit einem Wert von 6 in die Schleife reingehst, wird sie durchgeführt: Es wird "6" ausgegeben, anschließend wird der Wert von n um eins erhöht. Mit diesem neuen Wert (7) von n ist die "until" Bedingung dann erfüllt, und die Schleife wird verlassen (und zwar, BEVOR sie erneut ausgeführt wird). Zum Vergleich, so würde ich die entspr. Skripte in Bash schreiben: #!/bin/bash n=1 while [ $n -lt 7 ]; do echo "Schleifen Nummer: $n" n=$(( $n + 1 )) done ########## n=1 until [ $n -ge 7 ]; do echo "Schleifen Nummer: $n" n=$(( $n + 1 )) done Die Syntax ist halt leicht anders, und die beiden Teile sind kopfgesteuert, was die Bedingung angeht. Aber im Kern ist es genau das Gleiche. Hier ist vielleicht etwas besser ersichtlich, wann genau die Bedingung überprüft wird, und warum genau eben (in beiden Fällen) die Schleife verlassen wird, sobald n = 7 ist. Um die eigentliche Frage zu erörtern: Ich persönlich habe nichts gegen Vereinfachungen, um sich Sachen zu merken, aber wenn man schon sagt: "While und until lassen sich ersetzen, indem man die Bedingung negiert", dann sollte es auch klar ersichtlich sein, wie diese Negierung abläuft. Offensichtlich ist also, diesem Beispiel folgend, die Negierung von "-lt" NICHT "-gt", sondern eben "-ge". Bearbeitet 5. Dezember 2020 von Han_Trio brain afk Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
0 pr0gg3r Geschrieben 5. Dezember 2020 Teilen Geschrieben 5. Dezember 2020 (bearbeitet) vor 46 Minuten schrieb Han_Trio: dann sollte es auch klar ersichtlich sein, wie diese Negierung abläuft. Genau. Um das nochmal zu vereinfachen: Nehmen wir an, wir haben folgende Menge: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 Nun haben wir alle Zahlen "kleiner als 7" (entspricht -lt 7), dann sind das: 1, 2, 3, 4, 5, 6 Dann ist "kleiner als 7" negiert die, die übrig bleiben: 7, 8, 9, 10 und das entspricht "größer gleich sieben" (-ge 7). (weil sonst wie @Han_Trio gesagt hat, die 7 raus fällt). Ist zwar mathematisch jetzt nicht einwandfrei ausgedrückt, aber so kompliziert und unverständlich ist es jetzt auch nicht. /Edit: Man kann also auch sagen, "NICHT kleiner als sieben = größer gleich sieben" oder "kleiner als sieben = NICHT größer gleich sieben" Bearbeitet 5. Dezember 2020 von pr0gg3r Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
0 metalmeier Geschrieben 5. Dezember 2020 Autor Teilen Geschrieben 5. Dezember 2020 (bearbeitet) vor 4 Stunden schrieb Whiz-zarD: Nein... 🙄 Wo steht denn doch ein -ne für not bzw. nicht? Das hab ich wohl aus dem Heft falsch interpretiert. Das ist der Nachteil wenn man sich nicht austauschen kann. Zur Kontrolle wäre jetzt noch gut zu wissen. Wenn das gleiche Ergebnis raus kommen soll, und benutzt -gt bei einer do-while Schleife, was benutze ich bei einer do-until Schleife? Bearbeitet 5. Dezember 2020 von metalmeier Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
0 metalmeier Geschrieben 6. Dezember 2020 Autor Teilen Geschrieben 6. Dezember 2020 vor 19 Stunden schrieb pr0gg3r: Genau. Um das nochmal zu vereinfachen: Nehmen wir an, wir haben folgende Menge: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 Nun haben wir alle Zahlen "kleiner als 7" (entspricht -lt 7), dann sind das: 1, 2, 3, 4, 5, 6 Dann ist "kleiner als 7" negiert die, die übrig bleiben: 7, 8, 9, 10 und das entspricht "größer gleich sieben" (-ge 7). (weil sonst wie @Han_Trio gesagt hat, die 7 raus fällt). Ist zwar mathematisch jetzt nicht einwandfrei ausgedrückt, aber so kompliziert und unverständlich ist es jetzt auch nicht. /Edit: Man kann also auch sagen, "NICHT kleiner als sieben = größer gleich sieben" oder "kleiner als sieben = NICHT größer gleich sieben" Also bekommt man das Gleiche Ergebnis mit: -gt (8,9,10) = -le (1,2,3,4,5,6,7) -le (1,2,3,4,5,6,7) = -gt (8,9,10) -lt (1,2,3,4,5,6) = -ge (7,8,9,10) -ne (7) = -lt (1,2,3,4,5,6) -ge (7,8,9,10) = -lt (1,2,3,4,5,6) -eq (7) = -gt (8,9,10) Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
0 Whiz-zarD Geschrieben 6. Dezember 2020 Teilen Geschrieben 6. Dezember 2020 Das macht überhaupt keinen Sinn... Was soll "größer als 8,9,10" oder "größer oder gleich 7,8,9,10" bedeuten? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
0 metalmeier Geschrieben 6. Dezember 2020 Autor Teilen Geschrieben 6. Dezember 2020 Vielleicht macht es für euch mehr Sinn die Fragestellung zu sehen. (Bitte nur über die ersten 1 oder 2 Reihen reden, muss es ja selbst verstehen) Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
0 pr0gg3r Geschrieben 6. Dezember 2020 Teilen Geschrieben 6. Dezember 2020 vor 54 Minuten schrieb metalmeier: Vielleicht macht es für euch mehr Sinn die Fragestellung zu sehen. Du musst doch nur negieren! Das haben wir jetzt schon 3x durchgekaut. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
0 Han_Trio Geschrieben 6. Dezember 2020 Teilen Geschrieben 6. Dezember 2020 Lösen wir uns vielleicht mal kurz von Schleifen um die Negierung zu klären. Wenn du dir vorstellst, du hast eine Reihe von ganzen Zahlen, die an einer ganz bestimmten Stellen getrennt werden sollen, durch zwei (gegenteilige) Bedingungen. Die Trennung findet zwischen 6 und 7 statt; die eine Bedingung soll alles "links" davon abdecken, die andere alles "rechts" davon. Ungefähr so: [...] 5, 6 || 7, 8, [...] Wenn du nun also definierst, alles links der Trennung wäre "kleiner als 7", dann wäre die Negierung (für die rechte Seite) eben das Gegenteil davon, und das ist NICHT "größer als 7", denn dann würde die 7 von beiden Bedingungen nicht erfasst werden. Es muss also "größer oder gleich 7" sein. Es gilt also: "-lt 7" -> "-ge 7" Andersrum geht es auch: Du könntest sagen, alles rechts der Trennung wäre "größer als 6". Dann wäre die Negierung (für die linke Seite) NICHT "kleiner als 6", sondern eben "kleiner oder gleich 6" -> ansonsten würde die 6 rausfallen. Hier würde gelten: "-gt 6" -> "-le 6" metalmeier reagierte darauf 1 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
0 metalmeier Geschrieben 6. Dezember 2020 Autor Teilen Geschrieben 6. Dezember 2020 Alles klar, ich danke euch allen !!! Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Frage
metalmeier
Hallo ich hänge bei meinem Fernstudium an einer Aufgabe.
Laut Aufgabe bringen die beiden SChleifen das gleiche Ergebniss. (do while/until)
$n = 1
do
{
"Schleifen-Nr: $n"
$n++
}
while ($n -lt 7)
$n = 1
do
{
"Schleifen-Nr: $n"
$n++
}
until ($n -ge 7)
In Powershell ISE wird immer bis 6 durchgeschleift, bringt also das Selbe.
In offizielen Artikeln habe ich gelsen "Grundsätzlich können sich do-until und do-while gegenseitig ersetzen, indem man die Bedingung negiert."
Wenn man nur negiert, müsste es aber, wenn -lt = kleiner als ist, -gt (=größer) heißen. Jedoch wird dann ja die 7 (=) angezeigt.
Stimmt diese Aussage mit dem negieren? Bei der ESA wird ja gefragt, was bringt das gleiche Ergebnis, das funktioniert aber mit negieren nicht.
Danke im Voraus.
Link zu diesem Kommentar
Auf anderen Seiten teilen
20 Antworten auf diese Frage
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.