Zum Inhalt springen
  • 1

do while do until Operator tauschen?


metalmeier

Frage

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

  • 0
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.

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

  • 0

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 🙂 ?

Link zu diesem Kommentar
Auf anderen Seiten teilen

  • 0
  • -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 von metalmeier
Link zu diesem Kommentar
Auf anderen Seiten teilen

  • 0

 

 

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 von pr0gg3r
Link zu diesem Kommentar
Auf anderen Seiten teilen

  • 0
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

Link zu diesem Kommentar
Auf anderen Seiten teilen

  • 0

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 von Whiz-zarD
Link zu diesem Kommentar
Auf anderen Seiten teilen

  • 0
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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

  • 0

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 von Han_Trio
brain afk
Link zu diesem Kommentar
Auf anderen Seiten teilen

  • 0
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 von pr0gg3r
Link zu diesem Kommentar
Auf anderen Seiten teilen

  • 0
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?

 

File_000.thumb.jpeg.35dae7919fa7b8720dd733e604446433.jpeg

Bearbeitet von metalmeier
Link zu diesem Kommentar
Auf anderen Seiten teilen

  • 0
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)

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

  • 0

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"

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Gast
Diese Frage beantworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...