Bubblesort
-
Benutze einen Debugger oder printf() und lass dir die Werte ausgeben in jedem Schritt. Dann wirst du sehen, wann wo was falsch läuft.
-
bin angemeldet. war nur zu faul zum einloggen xD.
also.. das problem ist das gleiche
die ausgabe ist:
Deine Zahlen: zahl zahl zahl zahl zahl
Drücken sie etwas zum fortfahren (also system("pause"); )dannach schließt er das Fenster nicht aber macht auch nichts mehr...
also... ich hab kp worans liegt.. ich probier das mal mit der zwischenausgabe
edit:
#include <stdio.h> #include <stdbool.h> #include <conio.h> #include <ctype.h> int main() { bool x=false; int c=1, k=0, zahl[6]={0}; system("color 0a"); system("cls"); printf("Setze 5 Beliebige Zahlen ein (nach Jeder Zahl -> Enter): \n\n"); for(c=1; c<=5; c++) scanf("%i",&zahl[c]); // Eingabe der zahlen system("cls"); printf("Zahlen unsortiert: %i %i %i %i %i\n", zahl[1],zahl[2],zahl[3],zahl[4],zahl[5]); system("pause"); do { //bubblesort c=1; k=c+1; x=false; while (c<5) if( zahl[c]>zahl[k] ) { //vergleichen und neusetzen der zahl arrays zahl[0]=zahl[c]; //zahl zahl[c]=zahl[k]; zahl[k]=zahl[0]; printf("zahl[c]: %i, zahl[k]: %i\n",zahl[c],zahl[k]); x=true; c++; k=c+1; } } while(x==true); //ende bubblesort system("cls"); printf("\nZahlen sortiert: %i %i %i %i %i",zahl[1], zahl[2], zahl[3], zahl[4], zahl[5]); getch(); }
so siehts mitlerweile aus.. aber die probe in zeile 32 geht garnicht auf...
mein compiler ist devcpp.. mit TurboC hab ichs auch schon probiert... (aber der kennt stdbool.h schon garnicht)
-
Wenn die if-Bedingung in Zeile 20 nicht erfüllt ist, wird c nicht mehr erhöht. Das Programm hängt sich auf.
-
omg.. jetzt gehts.. aber ordnen tut der immernoch nicht richtig.. naja ich probiers mal weiter.. gegebenen falls schreib ich hier wieder rein ^^ danke
-
habs problem immernoch...
ich wüsste wie ichs behebe aber hab ne frage obs einen Not ausdruck gibt
also dass ers programm nur macht wenn zahl[1]<=zahl[2]<=zahl[3]<=zahl[4]<=zahl[5]
nicht zutrifft..Edit:
do { c=1; k=c+1; //bubblesort x=false; while (c<5) { if ( zahl[c]>zahl[k] ) { //vergleichen und neusetzen der zahl arrays zahl[0]=zahl[c]; //zahl[c] wird als zahl[0] zwischengespeichert zahl[c]=zahl[k]; //zahl[k] also zahl[c+1] wird auf zahl[c] gesetzt zahl[k]=zahl[0]; //zwischenspeicher wird dann wieder auf zahl[k] gesetzt > tausch beendet x=true; c++; k=c+1; printf("Zwischenspeicher: %i %i %i %i %i\n",zahl[1], zahl[2], zahl[3], zahl[4], zahl[5]); } else (c=6); } } while(x==true);
das ist halt die schleife... aber der macht das halt nur durch wenn die erste zahl größer die 2te ist.. wenn nicht dann hört der auf..
weiss jemand ne gute lösung?
-
Statt dem
else (c=6);
würd ich mal
else {c += 1 };
versuchen. Schau dir nochmal den Bubble-Sort Algorithmus genau an...
-
den algorithmus kenn ich nicht direkt..
ich weiss nur wie dieses tauschprinzip funktioniert.. unser lehrer is so einer der einem nix beibringt und einfach sagt "so zu montag macht ihr ein bubblesort programm. ihr habt internet. schaut nach was das ist.. tschüss"
bzw: was bringt +=?
-
Das c wird um eins erhöht.
Für den Algorithmus siehe [1]
Dummerweise gibt es solche Lehrer...
[1] http://de.wikipedia.org/wiki/Bubblesort#Formaler_Algorithmus
-
also ich habs nochmal umgeschrieben:
do { if ( zahl[0]>zahl[1] || zahl[1]>zahl[2] || zahl[2]>zahl[3] || zahl[3]>zahl[4] || zahl[4]>zahl[5] ) { //vergleichen und neusetzen der zahl-arrays for(c=1; c<5; c++) { k=c+1; if (zahl[c]>zahl[k]) { zahl[0]=zahl[c]; //zahl[c] wird als zahl[0] zwischengespeichert zahl[c]=zahl[k]; //zahl[k] also zahl[c+1] wird auf zahl[c] gesetzt zahl[k]=zahl[0]; //zwischenspeicher wird dann wieder auf zahl[k] gesetzt > tausch beendet printf("\nZwischenspeicher: %i %i %i %i %i",zahl[1], zahl[2], zahl[3], zahl[4], zahl[5]); } } } else x=false; } while(x==true); printf("\n\nZahlen sortiert: %i %i %i %i %i",zahl[1], zahl[2], zahl[3], zahl[4], zahl[5]); getch();
das sind jez nur die schleifen. rest ist nur formelles zeug..
aber der hängt sich wie am anfang auf.. Der letzte Zwischenspeicher ist dann halt = der endausgabe.. aber bis zu der Letzten ausgabe (Zahlen sortiert: ...)
kommt der garnicht.. nach dem letzten zwischenspeicher hängt der sich auf x_x woran liegts?
-
So sollte es gehen
#include <stdio.h> int main(int argc, char* argv[]) { int zahl[6] = {0, 3, 1, 99, 4, 2}; int k; int tmp; int vertauscht = false; do { vertauscht = false; for(int c=1; c<5; c++) { k=c+1; if (zahl[c]>zahl[k]) { tmp=zahl[c]; //zahl[c] wird als zahl[0] zwischengespeichert zahl[c]=zahl[k]; //zahl[k] also zahl[c+1] wird auf zahl[c] gesetzt zahl[k]=tmp; //zwischenspeicher wird dann wieder auf zahl[k] gesetzt > tausch beendet vertauscht = true; } } } while(vertauscht == true); printf("\nZahlen sortiert: %i %i %i %i %i\n",zahl[1], zahl[2], zahl[3], zahl[4], zahl[5]); }
Vielleicht schaust du dir nochmal den Algorithmus auf Wikipedia an.
Diese Abbruchbedingung hier
if ( zahl[0]>zahl[1] || zahl[1]>zahl[2] || zahl[2]>zahl[3] || zahl[3]>zahl[4] || zahl[4]>zahl[5] ) { //vergleichen und neusetzen der zahl-arrays
Ist nicht korrekt. Das ist nämlich nicht die Bedinung, die gegeben sein muss, damit weiter sortiert wird.
-
wieder so ein fehler wo man sich hinter her denkt dass er banal ist..
naja sorry dass ich soviele dumme fehler gemacht haeb xD danke!
-
YamiSparrow schrieb:
wieder so ein fehler wo man sich hinter her denkt dass er banal ist..
Versuch einfach draus zu lernen.
YamiSparrow schrieb:
naja sorry dass ich soviele dumme fehler gemacht haeb xD danke!
Dafür musst du dich nicht entschuldigen. Wie gesagt, lern draus.
Schönen Abend!