Verständnisproblem mit while( ! sortiert)

Siedler2

Grünschnabel
Hallo,
habe ein kleines Verständnisproblem und zwar bei:
while( ! sortiert)Ich weiß nicht genau wie man das übersetzen soll.
Das Ausrufezeichen heißt ja nichts anderes als NICHT.
Meiner Theorie zufolge heißt der Ausdruck while (! sortiert):
Führe den Befehl solange aus bis alles sortiert ist.
Praktisch gesehen würde ich für while( ! sortiert) folgendes einsetzen:
while( ! 0)
Auf die Null komme ich auf diesen Weg:
Sortiert = falsch
Da falsch mit 0 festgelegt ist.
Sortiert = 0
Aber genau dieser Ausdruck ergibt für mich keinen Sinn mehr.
while( ! 0) ==> ?
Ich weiß nicht was hier überhaupt nicht null sein darf, da ich nur Ausdrücke der Form
while ( a >= b) gewohnt bin.
Hoffe, dass mein Problem einigermaßen verstanden wurde.

C++:
//zahlen sortieren
bool falsch=false,richtig=true; 
  
bool sortiert = falsch;
long hilf;              
int ende= a;            
 
while ( !sortiert)      // solange noch nicht
 
{
 i=0;
	sortiert = richtig;     
    --ende;
 
Zuletzt bearbeitet:
In C/C++ gibt es einen impliziten bool-cast-Konverter. D.h. wie du schon angenommen hast, eine Variable auf true oder false abgefragt wird bei einem Wert von 0 wie false, bei jedem anderen Inhalt wie true behandelt.

Beim ersten Durchlauf steht sortiert auf false. D.h. while ( !sortiert) springt an, da sortiert false ist.
Sobald sortiert auf true gestellt wird, trifft die while-Bedingung nicht mehr zu da !sortiert false entspricht.

Mit der Mapperei von falsch=false und richtig=true tust du dir vermutlich nicht wirklich einen Gefallen. Das macht den Code schwerer lesbar. Als Programmierer sollte man sich sowieso mit Englisch anfreunden.
 
Hallo Endurion,
Hier noch mal eine grundlegende Frage:
Bei Anwendung von false ist die Aussage auf jeden Fall falsch und bei Anwendung von true ist die Aussage auf jeden Fall richtig.

Zurück zum Beispiel:
Dass heißt, wenn beim ersten Durchgang der Anfangswert false ist ergeben sich für mich folgende Probleme:


Problem 1:
Wenn ich das jetzt richtig verstanden habe ist der Anfangswert beim ersten Durchlauf false.
Habe jetzt jedoch das Problem, dass das Ausrufezeichen genau diese Aussage verneint.
Also sagt die while Schleife doch:
Solange die Schleife nicht den Wert 0 (false) hat soll er sortieren.
Anders gesagt, wenn die Schleife den Wert 1 hat soll er sortieren.
Problem, beim Wert 1 sollten die Zahlen eigentlich schon sortiert sein.



Problem 2:
Angenommen wir haben die erste Hürde schon genommen:
Wir haben für while(!sortiert)
while(!false) eingesetzt und befinden uns jetzt an der Stelle:
Sortiert = richtig

Das würde ja heißen das der Ausdruck jetzt so lautet :
while(!true)
Was den Befehl gibt, wenn die Schleife nicht wahr ist bzw. den Wert 1 hat soll sie abbrechen.
Sie hat aber den Wert 1 (true).


Ich könnte mir höchstens vorstellen das, wenn man am Anfang für sortieren den Wert false gibt. Die Schleife dann so aussieht while(!false ) und das einfach ein Befehl dafür ist das diese einfach weiter laufen soll bis sie nicht mehr den Wert Null hat.
Allerdings wird der Befehl der Schleife später mit dem Befehl:
Sortiert = true
So geändert das der Befehl der Schleife while(!true) so lauten müsste:
Lauf weiter bis du nicht mehr den Wert 1 hast.
Diese Interpretation ergibt aber keinen Sinn, da die Schleife ja in der Realität beim erreichen des Wertes 1 (true) abbricht.
 
Moin.
Problem 1: du vergisst das die "1" aus dem letzten Satz mittels "!" zu "0" invertiert wird.
Problem 2: ist doch richtig? wenn sortiert = true (1) ist, dann wird "while(!sortiert)" zu while(0) -> Abbruch.
 
Zurück