Per mein Kommentar:
Ich glaube, wenn man auf 0 passieren initialisieren initialisieren i zu (+ 1 passieren), ersetzen Sie alle V [i] mit V [pass] und alle V [i + 1] mit V [i], sollte Ihr Code als
void swap(Quadratic_equation arr[], int lowerIndex, int higherIndex) {
Quadratic_equation temp = arr[lowerIndex];
arr[lowerIndex] = arr[higherIndex];
arr[higherIndex] = temp;
}
void sort_equation_array(Quadratic_equation V[], int howMany)
{
for (int pass = 0; pass < howMany; pass++)
{
for (int i = (pass + 1); i <= howMany -1; i++)
{
if (V[pass].a > V[i].a)
{
swap(V, pass, i);
}
else if (V[pass].a == V[i].a &&
V[pass].b > V[i].b)
{
swap(V, pass, i);
}
else if (V[pass].a == V[i].a &&
V[pass].b == V[i].b &&
V[pass].c > V[i].c)
{
swap(V, pass, i);
}
}
}
}
erwartet funktionieren
Sie sollten auch Ihre Eingaben bereinigen, um leichter erkennen zu können, welche Werte wohin gehen. Hier ist, was ich getan habe, Sie können es ändern, um zu sagen, was immer Sie möchten, aber Sie bekommen die Idee.
void get_quadratic_equation(Quadratic_equation &e)
{
cout << "a: ";
cin >> e.a;
cout << "b: ";
cin >> e.b;
cout << "c: ";
cin >> e.c;
}
int load_equation(Quadratic_equation V[], int n)
{
Quadratic_equation e;
int counter = 0;
cout << endl << "Set values for equation " << counter << endl;
get_quadratic_equation(e);
while (e.a != 0)
{
V[counter] = e;
++counter;
if (counter == n) break;
cout << endl << "Set values for equation " << counter << endl;
get_quadratic_equation(e);
}
cout << endl;
return counter;
}
OUTPUT
** Enter Quadratic Equations **
Set values for equation 0
a: 1
b: 2
c: 3
Set values for equation 1
a: 4
b: 5
c: 6
Set values for equation 2
a: 7
b: 8
c: 9
Set values for equation 3
a: 8
b: 7
c: 6
Set values for equation 4
a: 5
b: 4
c: 3
Set values for equation 5
a: 2
b: 1
c: 0
Set values for equation 6
a: 0
b: 0
c: 0
** NOT SORTED **
1x^2 + 2x + 3 root 1 = -1.00+i 1.41 root 2 = -1.00-i 1.41
4x^2 + 5x + 6 root 1 = 0.00+i 1.05 root 2 = 0.00-i 1.05
7x^2 + 8x + 9 root 1 = 0.00+i 0.98 root 2 = 0.00-i 0.98
8x^2 + 7x + 6 root 1 = 0.00+i 0.75 root 2 = 0.00-i 0.75
5x^2 + 4x + 3 root 1 = 0.00+i 0.66 root 2 = 0.00-i 0.66
2x^2 + 1x + 0 root 1 = 0.00 root 2 = -0.50
** SORTED BY A **
1x^2 + 2x + 3 root 1 = -1.00+i 1.41 root 2 = -1.00-i 1.41
2x^2 + 1x + 0 root 1 = 0.00 root 2 = -0.50
4x^2 + 5x + 6 root 1 = 0.00+i 1.05 root 2 = 0.00-i 1.05
5x^2 + 4x + 3 root 1 = 0.00+i 0.66 root 2 = 0.00-i 0.66
7x^2 + 8x + 9 root 1 = 0.00+i 0.98 root 2 = 0.00-i 0.98
8x^2 + 7x + 6 root 1 = 0.00+i 0.75 root 2 = 0.00-i 0.75
Side Note- Sie eine Swap-Funktion erstellen sollten, anstatt die exakt gleiche Code mehrfach in Ihrer sort_equation_array Funktion Wiederholung – mhodges
das richtige Werkzeug, solche Probleme zu lösen, ist der Debugger. Sie sollten Schritt für Schritt durch Ihren Code * gehen, bevor Sie auf Stack Overflow nachfragen. Für weitere Hilfe lesen Sie bitte [Wie kleine Programme zu debuggen (von Eric Lippert)] (https://ericlippert.com/2014/03/05/how-to-debug-small-programs/). Zumindest sollten Sie Ihre Frage bearbeiten, um ein [minimales, vollständiges und verifizierbares] (http://stackoverflow.com/help/mcve) Beispiel einzufügen, das Ihr Problem zusammen mit den Beobachtungen, die Sie in der Debugger. –
Ich glaube, wenn Sie pass auf 0 initialisieren, i auf (pass + 1) initialisieren, alle V [i] durch V [pass] ersetzen, und alle V [i + 1] mit V [i], sollte Ihr Code funktionieren wie erwartet – mhodges