Bubblesort Problem
-
Moinsen.
Ich habe mich vor einiger Zeit schonmal hier gemeldet und mir wurde gut weiter geholfen (stand damals nur aufm Schlauch)
Jetzt ist mein Programm fast fertig ich habe nurnoch ein Problem mit bubblesort.
Wir haben zu zweit versucht unsere Ausgabe zu sortieren haben es aber einfach nicht geschafft.
Wir würden deswegen zwar nicht durchfallen, wäre aber trotzdem ärgerlich.
Ich werde erstmal nicht das ganze Programm posten (wegen Übersicht)Im Grunde geben wir mit dieser Schleife unsere Ergebnisse in einer Tabelle aus
printf("\n\n\n\n"); printf("Kettenblatt Ritzel Uebersetzung Entfaltung\n"); printf("________________________________________________________________\n"); for (i=1 ; i<k+1 ; i++) { for (j=1 ; j<r+1 ; j++){ e[i]=(float)s*((float)zk[i]/zr[j]); f[i]=(float)zk[i]/zr[j]; printf("%d %d %.2f %.2f\n",zk[i],zr[j],f[i],e[i]); } }
in Zeile 11 fügen wir dann
bubblesort (e,100); ein, da wir die Variable e sortiert haben wollenUnser Bubblesort sieht folgendermaßen aus:
void bubblesort(float e[], int n) { int i, j, b; for(i = 0; i < n-1; i++) { for(j = 0; j < n-2; j++) { if(e[j] > e[j+1]) { b = e[j]; e[j] = e[j+1]; e[j+1] = b; } } } }
vorher hatten wir versucht alle Variablen in einem struct zusammen zu fassen und dann sortieren zu lassen.
Möglicherweise sind unsere Köpfe momentan auch einfach überladen wegen den Anderen Klausuren die noch Zeitgleich anstehen.
Es wär echt klasse wenn ihr uns den entscheidenden Hinweis geben würdet damit die Köpfe wieder für Physik und Elektrotechnik frei werdenEntschuldigt bitte wenn ich etwas vergessen habe, auf Kritik und anregungen antworte ich so schnell wie möglich.
MfG Nosebud
-
Etwas genauer als "wir haben ein Problem" wäre nett.
Wie äußert sich euer Problem?Schau dir mal den Typ von b und von e in bubblesort an.
Deine Schleife läuft auch nicht weit genug.
Bei n = 2 wird gar nicht sortiert.Ihr solltet auch nochmal euren Einrückungstil etwas verfeinern. Zwie } direkt untereinander deuten darauf hin.
-
Was ist euer Problem? Bitte mal den ersten Link in meiner Signatur lesen. Wir können weder Gedanken lesen noch wird jemand großartig Lust haben, sich deine alten Threads zu suchen, nur um dort vielleicht den zum Verständnis nötigen Kontext zu finden.
Für mich macht es jedenfalls 0 Sinn in Zeile 11 sortieren zu wollen. Da ist dein Feld doch erst bis zum i-ten Eintrag gefüllt. Wer weiß was an den danach folgenden Eintragen steht. Und dann wird direkt danach auch noch das Element ausgegben, welches an die i-te Stelle sortiert wurde, was noch weniger Sinn macht.
Was ist das besondere an der Zahl 100? Wieso überhaupt selber eine Sortierfunktion schreiben? Wieso dann noch ausgerechnet Bubblesort?
Weitere Anmerkungen:
Was soll der erste Cast in Zeile 8 machen? Wieso printf um statische Zeichenkettenliterale auszugeben? Eurer Einrückungs"stil" ist schrecklich, es sieht fast so aus als wäre die Einrückung absichtlich unübersichtlich gestaltet.
-
Unsere Formatierung muss natürlich überarbeitet werden und ich verstehe dass dieser Anblick Schmerzen in Informatiker Augen verursachen kann.
Wir sind eben keine Informatiker und wollen auch keine Informatiker werden um ehrlich zu sein sonst würden wir Informatik studieren.Unser Problem ist dass wir nicht wissen wo wir die Sortierung einfügen sollen.
Wenn du jetzt sagst dass unsere bubblesort funktion nicht weit genug sortiert ist wohl zuerst das unser Fehler.der fehler müsste ja mit for(j = 0; j < n-i-1; j++) behoben sein...so stehts zumindest im skript.
Die Zahl 100 bei bubblesort (e,100) haben wir gewählt, um dem Programm zu sagen wie groß das Array e ist und bei einem Wert zwischen über 200 stürzt das programm ab.
Wir sind eben keine Fachmänner und das merkt man bestimmt auch.
es ist auch nicht meine absicht euch mit Aussagen meinerseits irgendwie zu beleidigen.Diese Sortierung ist für uns momentan eher zweitrangig da wir wie bereits gesagt deswegen nicht durchfallen werden.
wenn ihr aus diesem Grund sagt ihr wollt uns nicht helfen kann dieser Beitrag gerne wieder gelöscht werden.
-
Ihr müßt erst das Feld berechnen. Komplett.
Dann sortieren.
Dann ausgeben.Im Augenblick versucht ihr das in einem Durchgang. Das geht nicht.
Die Anzahl für die Große des Feldes sollte schon einen realen Bezug haben.
Das k+1 wäre keine schlechte Wahl.Ihr könnt ja mal bubblesort nacheinander für n = 0, n= 1, n= 2 auf dem Papier durchspielen.
Habt ihr auch schon
DirkB schrieb:
Schau dir mal den Typ von b und von e in bubblesort an.
gemacht?
-
@DirkB
Das ist echt mal eine hilfe zu sagen dass das nicht in einem Durchgang geht.
Also verstehe ich das richtig dass wir das Feld am besten in einem Unterprogramm ausrechnen, dann den Wert an unser bubblesort übergeben und dann die Werte ausgeben?b ist int und e float?
ok ein weiterer Fehler dadurch gehen natürlich die Kommastellen verloren.
-
Ein Unterprogramm braucht ihr nicht unbedingt.
for (i=1 ; ... // Was ist eigentlich mir e[0] ? { e[i] = Berechnen } bubblesort(e,...) for (i=1 ; ... { printf("...", e[i],...); }
geht ja auch.
-
Moment das muss mal kurz wirken bin noch nicht ganz so schnell
-
Also es wird jetzt auf jedenfall schonmal sortiert.
Nur gibts jetzt nen Fehler in der Berechnung.
Ich setz mich später nochmal mit meinem Kollegen dran und Versuch es zu beheben.
Sollten weitere Probleme auftauchen meld ich mich nochmal