Brauche Erklärung des folgenden Listing
-
Guten Abend
Ich lese im moment ein Buch über C++ und das klappt auch eigentlich ganz gut aber es gibt ein listing wo die Erklärung des Buches bei mir einfach nicht ausreicht.
es geht um das zahlen sortieren, Hier erstmal das Listing#include <iostream> using namespace std; #include <stdlib.h> const int MAX=5; int main() { int feld[MAX], hilf;hh int i, j, k; srand(56); for(i=0; i<MAX; i++) { feld[i] = rand() % 100 + 1; cout << feld[i] << " "; } cout << endl; for(i=MAX-1; i>0; i--) { for (j=0; j<i; j++) { cout << "(" << j << "-" << j+1 << "): " ; if (feld[j]>feld[j+1]) { hilf = feld[j]; feld[j] = feld[j+1]; feld[j+1] = hilf; } cout << feld[j] << " - " << feld[j+1] << " "; } cout << endl << MAX-i << ". Durchlauf beendet: "; for (k=0; k<MAX; k++) { cout << feld[k] << " "; } cout << endl; } }ich bitte um eine sehr ausführliche erklärung, wie dieses kleine Programm genau funktioniert.
ich bedanke mich schon mal im voraus
-
Am besten gehst du mal für ein paar Zahlen den Code selbst Schritt für Schritt durch (allenfalls mit dem Debugger) und dann kannst du das ganze recht gut verstehen.
Das wird übrigens Bubblesort benutzt.
-
okay, dankeschön für den tipp
ich habe bis jezt alles soweit verstanden bis auf eins
und zwar folgendes:for(i=MAX-1; i>0; i--)wieso den da MAX-1 ??
cout << "(" << j << "-" << j+1 << "): " ; if (feld[j]>feld[j+1]) { // Tauschen erforderlich hilf = feld[j]; feld[j] = feld[j+1]; feld[j+1] = hilf; } cout << feld[j] << " - " << feld[j+1] << " ";und wieso da j+1?
ich verschtehe das nicht was es mit den einsen auf sich hat
bitt um erklärung.
-
TheJoker schrieb:
for(i=MAX-1; i>0; i--)wieso den da MAX-1 ??
Weil dein Array MAX Elemente enthält, die Zählung des Index bei 0 Beginnt und damit das letzte Element bei MAX-1 zu finden ist. Setzt du da MAX wird dein Programm komisches Verhalten an den Tag legen oder gleich crashen

-
Das Feld hat MAX Elemente, die Nummerierung geht aber von 0 bis MAX-1.
Z.B. MAX=5, Nr von 0 bis (5-1)=4
Das letzte Feldelement hat also die Nr. 4
-
In dem Listing sind zwei grobe Schnitzer drin, dieda so auf keinen Fall rein sollten, und zwar gleich in den erstend rei Zeilen:
#include <iostream> using namespace std; //using-Direktiven sollten nach Möglichkeit nie in Headern oder vor dem Einbinden von anderen Headern erfolgen #include <stdlib.h> //<stdlib.h> ist im C++-Standard veraltet. Der Header <cstdlib> enthält sie selben Funktionen, allerdings im namespace stdRichtig wäre also:
#include <iostream> #include <cstdlib> using namespace std;
-
Erstmal vielen dank für die schnellen antworten (:
ja ihr habt recht, jezt habe ich verstanden warum MAX-1
ich muss mich noch dran gewönen das der index bei 0 anfängt
das hat mich ein bischen verwirt.und danke pumuckl für den hinweis, den werde ich mir merken.