Hilfe für C
-
@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.
-
@Martin1809 sagte in Hilfe für C:
Ich muss jetzt nur noch schaffen das Wort Weihnachtsmann immer links von dem Unsortierten Bereich erscheint.
Wie das geht, hatte ich schon erwähnt.
Ich hatte auch etwas zu Compilerwarnungen geschrieben.
Wenn du die beachten würdest, käme so etwas wiej=j++
nicht durch.PS. deine Zwischenliste hat nur 9 Elemente.
Man kann das lösen ohne an der Anzahl der Schleifendurchläufe etwas zu ändern.
Es braucht nur einprintf
an der richtigen Stelle.
-
@Martin1809 naja du musst dir halt eine variable erstellen, die die anzahl der bereits sortierten elemente repräsentiert. damit kannst du dir dann die anzahl der unsortierten elemente ausrechnen und sobald diese alle ausgegeben sind, rufst du
printf("Weihnachtsmann");
auf.