Bubblesort mit Arrays
-
Hallo zusammen, ich bin im 1. Lehrjahr und lerne den "Fachinformatiker - Anwendungsentwicklung".Leider scheitere ich schon an den einfachen dingen. Im Moment programmieren wir einen Taschenrechner in C++. Die Ausgabe findet in einer Console statt.Ich habe eine Rechenoperation (Mittelwert berechnen) Lege dafür 10 Arrays an und der Nutzer gibt seine 10 Werte ein und ein Ergebnis wird angezeigt. Nun möchte ich die eingegebene Zahlen sortieren (via Bubblesort).
Ich hab SEHR vieles dazu bei Google und hier im Forum gefunden, nur leider blicke ich nicht ganz durch. Mein Array heißt "Mittelwert[i]" . Könnt ihr Beispiele geben am besten noch kommentiert! Ich bedanke mich schon mal.Mit freundlichen grüßen,
MeXeD
-
http://de.wikipedia.org/wiki/Bubblesort#Algorithmus
bubbleSort(Array A) for (n=A.size; n>1; n=n-1){ for (i=0; i<n-1; i=i+1){ if (A[i] > A[i+1]){ A.swap(i, i+1) } // ende if } // ende innere for-Schleife } // ende äußere for-SchleifeWo ist dein Problem? Fang einfach an und zeig deinen eigenen Versuch. Dann kann man dir helfen. Code vorkauen bringt dich nicht weiter. Wenn du dich nicht damit beschäftigen willst, dann hast du den Beruf leider verfehlt.
-
Ich hab schon einiges Probiert.
Und wahrscheinlich habe ich mich falsch ausgedrückt. Ich will natürlich nicht den ganzen Code hier Präsentiert haben. Weil den finde ich auch im Internet, kann aber damit nichts anfangen.int n; int i; for (n = 10; n>1; n=n-1) { for(i=0; i<n-1; i=i+1) { if (Mittelwert[i] > Mittelwert[i+1]) { } } }Das war mein Ansatz. Ich hatte auch den "Wikipedia" Link gefunden.
Was ich nicht verstanden habe war das "A.Swap" ich weis was Swap bedeutet.
Aber in der zusammen Setzung war/ ist dies mir das nicht klar.
-
A.swap(i, i+1)
bedeutet:
Vertausche die Arrayelemente i und i+1.
-
funktioniert nicht.
Das ist ja nicht mal c++
-
MeXeD schrieb:
funktioniert nicht.
Funktioniert. An der Stelle müsen die Elemente "i" und "i+1" vertauscht werden. Das wird mit der Methode "swap" gemacht.
MeXeD schrieb:
Das ist ja nicht mal c++
Doch, das ist es. Vorausgesetzt, irgendwo ist die Klasse "Array" deklariert mit den passenden Methoden.
-
...
-
Ja, deswegen. Wie soll ich "swap" verwenden wenn es Pseudo ist?
Ja davon habe ich gehört. Gleich angewandt.for (n = 10; n>1; n=n-1) { for(i=0; i<n-1; i=i+1) { if (Mittelwert[i] > Mittelwert[i+1]) { temp = Mittelwert[i]; Mittelwert[i] = Mittelwert[i+1]; Mittelwert[i+1] = temp; } } }Problem ist das er beim Ausführen meckert das er keine Quelle finden konnte!
-
Wo ist denn dein restlicher Code?
z.B. dein Hauptprogramm oder deine includes, oder das Initialisieren und Definieren deines Arrays?
Poste doch mal den gesamten Code
-
oder du nimmst std::swap
-
#include <iostream> #include <cstdlib> #include "fehler.h" using namespace std; double Rechnung_durchfuehren(double op1,double op2, char aus, double* Mittelwert) { double PI = 3.1415926; double ergebnis = 0; bool fail = false; bool Operanten = false; double value = 0; while (ergebnis = 0); // Mit dem Rechenzeichen womit gerechnet wird, wird hier abgefragt { switch(aus) { case 'a': case 'A': ergebnis = op1 + op2; //Addition break; case 'S': case 's': ergebnis = op1 - op2; //Subtraktion break; case 'D': case 'd': if (op2 == 0) // Abfangen des Fehler beim Dividieren durch 0 { cout <<endl; cout << " Eine Division durch 0 funktioniert leider nicht!" <<endl <<endl; fehler(); fail = true; break; } else { ergebnis = op1 / op2; //Division } break; case 'M': case 'm': ergebnis = op1 * op2; //Multiplikation break; case 'u': case 'U': break; ergebnis = PI * op1; // Umgang (kreis) break; case 'W': case 'w': ergebnis = sqrt(op1); break; default: cout <<endl << " Bitte geben sie NUR gueltige Nummern an"; fail = true; fehler(); break; case 'P': //Wenn das Rechenzeichen ein M ist case 'p': //Wenn das Rechenzeichen ein M ist int n; int i; int temp2 = 0; for (n = 10; n>1; n=n-1) { for(i=0; i<n-1; i=i+1) { if (Mittelwert[i] > Mittelwert[i+1]) { temp2 = Mittelwert[i]; Mittelwert[i] = Mittelwert[i+1]; Mittelwert[i+1] = temp2; } } } for(i = 0; i < 10; i = i + 1) { op1 = op1 + Mittelwert[i]; //Addiere alle Werte zusammen } ergebnis = op1 / 10; //Speichere in der Variable "erg" den Mittelwert break; } //return fail; // Wenn ein Fehlereintritt kommt übliche Fehlermeldung return ergebnis; } return fail; return Operanten; }Hier das Abfragen
double Mittelwert_abfragen(double index) { double value = 0; bool fail = false; //Benutzer-Abfrage der Werte für die Berechnung des Mittelwerts do { cout << endl; cout << " Bitte geben Sie den "; cout << index + 1; cout << ". Wert ein: "; cin >> value; if (cin.fail()) { cin.clear(); cout << endl << " Fehler ungueltiges Zeichen eingegeben!"; // Wenn Falsches Zeichen eingegeben wurde kommt hier eine Fehlermeldung char c; cin >> c; cin.get(); cout << endl; } cout << " _________________________________________________________________________ "; if (value != 0) { return value; } else { fail = true; } }while (fail == true); }
-
Warum musst du überhaupt sortieren, wenn du danach doch wieder nur den Durchschnitt bildest?
Oder willst du eigentlich den Median haben (also das mittlere Element)?
-
Wir sollen eine Funktion einbauen die sortiert.
Ich wollte es hier machen. Übern COUT sollen dann die Arrays wieder gegeben werden (sortiert) und darunter das Ergebnis.
Ich habe den Fehler gefundenTemp2 war ein int Wert.
Mittelwert aber Double.Hab es nun angepasst. Funktioniert auch. Ich setzt mich dann man an die Ausgabe ran.
-
while (ergebnis = 0); // Mit dem Rechenzeichen womit gerechnet wird, wird hier abgefragtDa sind gleich 2 Fehler. Es gibt einen Unterschied zwischen = und ==. Außerdem gehört an das Ende kein ;
-
Sehe es gerade.
Kommt davon, wenn man von einer anderen Programmiersprache kommt ..