Hilfe für C
-
@Wade1234 Ich verstehe nicht in wiefern
while(swapped==true)
falsche ist und wenn ich
if(swapped==false) { break; }
weg mache funktioniert es nicht mehr.
-
@Martin1809 Schalte die Compilerwarnungen auf die höchste Stufe und beachte diese.
Behandele Warnungen wie Fehler. Behebe deren Ursache.Es wurde nicht
swapped==true
bemängelt, sondernswapped=true
.
Sehr großer Unterschied.Welchen Wert hat swapped beim Eintritt in die Schleife?
In Zeile 26 darfst du nur bis 8 zählen, da du in der Schleife auf das Element i+1 zugreifst.
Wenn i 9 ist, wäre das dann 10 und das Element existiert nicht.Gib mal ein Beispiel für die gewünschte Ausgabe.
(auch als Code markieren, da sonst die führenden Leerzeichen entfernt werden)
-
@Wade1234 Wenn ich swapped==false habe funktioniert die Ausgabe nicht mehr, das heißt es wird nichts ausgegeben.
Ein Beispiel für die Gewünschte Ausgabe:Unsorted: Weihnachtsmann: |4||8||12||12||14||26||... ----------------------- |4| Weihnachtmann: |8||12||12||14||26||... ---------------------- |4||8| Weihnachtsmann: |12||12||14||26||... ----------------------- ... ----------------------- |4||8||12||12||14| Weihnachtsmann: |26||...
-
@Martin1809 weißt du überhaupt, wie eine while-schleife funktioniert und was da im kopf eigentlich geprüft werden soll?
-
@Wade1234 Schuldigung, dass das Fett geschrieben ist ich kann das auch irgendwie nicht mehr ändern
-
@Martin1809 warum glaubst du, dass
swapped == false
im schleifenkopf stehen sollte? und was glaubst du, wie sich das auf den programmablauf auswirken würde? welchen wert hatswapped
eigentlich beim eintritt in die schleife?
-
@Wade1234 swapped hat den Wert true
-
@Martin1809 Zähle die Durchläufe der
while
-Schleife ( z.B. mit der Variablen j.
Wenn i == j ist, gibst du "Weihnachtsmann" aus.Lies bitte nochmal aufmerksam unsere Antworten bezüglich
swapped=true
durch. Und beachte die Anzahl der = dabei.
-
-
@Wade1234
while(swapped==true); { swapped=false; for(int i=0; i<8; i++) { if(arr[i]>arr[i+1]) { int tmp=arr[i]; arr[i]=arr[i+1]; arr[i+1]=tmp; swapped = true; } j++; for(i=0; i<10; i=i+1) { if(i==j) { printf("Weihnachtsmann:"); } printf("|%d|", arr[i]); } } }
Ist das so wie du meinst?
-
@Martin1809 in Zeile 3 zählst du gerade nur bis 7.
Sollte der Weihnachtsmann nicht während des Sortierens ausgegeben werden?
Das j macht so keinen Sinn, da es nach der
while
-Schleife nicht mehr verändert wird.Welchen Werte haben swapped und j beim Eintritt in die
while
-Schleife?Und wo wird swapped mal auf
false
gesetzt?
-
@DirkB for()... ist noch in der while schleife nach dem if geschlossen wird
-
do { swapped=false; for(int i=0; i<8; i++) { if(arr[i]>arr[i+1]) { int tmp=arr[i]; arr[i]=arr[i+1]; arr[i+1]=tmp; swapped = true; } j++; for(i=0; i<10; i=i+1) { if(i==j) { printf("Weihnachtsmann:"); } printf("|%d|", arr[i]); } } } while(swapped==true); }
Das ist jetzt die Ausgabe:
SortedList
|4||26||8||26||12||26||20||16||14|Weihnachtsmann:|14||4||26||8||26||12||26||20||16||14||14|
-
@Martin1809 sagte in Hilfe für C:
@DirkB for()... ist noch in der while schleife nach dem if geschlossen wird
ok. Die Einrückung war verwirrend.
Die beiden verschachtelten
for
-Schleifen haben beide i als Laufvariable.und ein Newline (\n) ab und zu, macht die Ausgabe übersichtlicher.
-
@Martin1809 Vielleicht einfach erstmal richtig sortieren ohne den verda***** Weihnachtsmann?
-
do { swapped=false; for(int i=0; i<8; i++) { if(arr[i]>arr[i+1]) { int tmp=arr[i]; arr[i]=arr[i+1]; arr[i+1]=tmp; swapped = true; } j++; } } while(swapped==true); for(int i=0; i<10; i=i+1) { printf("|%d|", arr[i]); } }
So gibt er die Zahlen sortiert aus und das ist der einzige Weg den ich finde.
-
@Martin1809 sagte in Hilfe für C:
for(int i=0; i<8; i++)
Kann nicht sein bei 10 Elementen. Trenn' Dich zum Testen vielleicht mal von den zufälligen Daten.
-
@Martin1809 Du hast im Sortieralgorithmus schon eine
for
-Schleife.
Darin kannst du auch Werte ausgeben.
Sinnvollerweise erst nach dem Tausch (vor dem Ende der Schleife)
-
Offtopic, aber da es nicht anzusehen ist:
@Martin1809 sagte in Hilfe für C:
@Wade1234 Schuldigung, dass das Fett geschrieben ist ich kann das auch irgendwie nicht mehr ändern
Wie man dieses (und viele andere Foren, Texteditoren, etc.) benutzt:
https://daringfireball.net/projects/markdown/basicsWas du gemacht hast, ist alles als Überschrift zu formatieren. Eine horizontale Trennlinie
sind beispielsweise drei * (oder auch andere Kombinationen, siehe verlinkte Referenz).
-
@DirkB Für diesen Code funktioniert die Ausgabe für jeden Durchgang
do { swapped=false; for(int i=0; i<9; i++) { if(arr[i]>arr[i+1]) { int tmp=arr[i]; arr[i]=arr[i+1]; arr[i+1]=tmp; swapped = true; } j=j++; printf("|%d|", arr[i]); } printf("\n------------\n"); }while(swapped==true); printf("\n"); printf("-----------------------\n"); printf("SortedList\n"); for(int i=0; i<10; i=i+1) { printf("|%d|", arr[i]); } }
Das ist dann das Ausgegebene Ergebnis:
Unsorted |14||18||28||8||22||10||30||22||10||20| ZwischenList |14||18||8||22||10||28||22||10||20| ------------ |14||8||18||10||22||22||10||20||28| ------------ |8||14||10||18||22||10||20||22||28| ------------ |8||10||14||18||10||20||22||22||28| ------------ |8||10||14||10||18||20||22||22||28| ------------ |8||10||10||14||18||20||22||22||28| ------------ |8||10||10||14||18||20||22||22||28| ------------ ----------------------- SortedList |8||10||10||14||18||20||22||22||28||30|
Ich muss jetzt nur noch schaffen das Wort Weihnachtsmann immer links von dem Unsortierten Bereich erscheint.