Anfängerfrage
-
Ich glaube, die Leute meinen eigenrlich, Daß Du statt
cout << endl << MAX-1 << ". Durchlauf beendet: ";lieber
cout << endl << MAX-i << ". Durchlauf beendet: ";schreiben solltest.
Und konsequenter Einrücken wäre was.
#include <iostream> #include <cstdlib> #include <ctime> using namespace std; const int MAX=5; int main() { int feld[MAX], hilf; int i, j, k; srand(time(0)); //Zufallsgenerator vorbereiten for (i=0; i<MAX; i++) { //Array besetzen und anzeigen feld [i] = rand() % 100 + 1; cout << feld [i] << " "; } cout << endl; for(i=MAX-1; i>0; i--) // MAX-1, weil die Karten immer mit dem rechten Nachbarn verglichen werden // d. h. nicht 4, sondern 3 Vergleiche { for(j=0; j<i; j++) { 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] << " "; } // Zeige das Array in diesem Durchlauf cout << endl << MAX-i << ". Durchlauf beendet: "; for(k=0; k<MAX; k++) { cout << feld[k] << " "; } cout << endl; } cin.clear(); cin.get(); }Das macht Deine IDE auch von selber.
Microsoft: Strg+A gefolgt von Alt+F8
CodeBlocks: Rechte Mauta "Format using AStyle"Ist der Code im Buch auch so? Falls ja, wirf es.
-
volkard schrieb:
Ich glaube, die Leute meinen eigenrlich, Daß Du statt
cout << endl << MAX-1 << ". Durchlauf beendet: ";lieber
cout << endl << MAX-i << ". Durchlauf beendet: ";schreiben solltest.
Und konsequenter Einrücken wäre was.
#include <iostream> #include <cstdlib> #include <ctime> using namespace std; const int MAX=5; int main() { int feld[MAX], hilf; int i, j, k; srand(time(0)); //Zufallsgenerator vorbereiten for (i=0; i<MAX; i++) { //Array besetzen und anzeigen feld [i] = rand() % 100 + 1; cout << feld [i] << " "; } cout << endl; for(i=MAX-1; i>0; i--) // MAX-1, weil die Karten immer mit dem rechten Nachbarn verglichen werden // d. h. nicht 4, sondern 3 Vergleiche { for(j=0; j<i; j++) { 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] << " "; } // Zeige das Array in diesem Durchlauf cout << endl << MAX-i << ". Durchlauf beendet: "; for(k=0; k<MAX; k++) { cout << feld[k] << " "; } cout << endl; } cin.clear(); cin.get(); }Das macht Deine IDE auch von selber.
Microsoft: Strg+A gefolgt von Alt+F8
CodeBlocks: Rechte Mauta "Format using AStyle"Ist der Code im Buch auch so? Falls ja, wirf es.
so ist es aber auch falsch weil
cout << endl << MAX-i << ". Durchlauf beendet: ";jetzt außerhalb der for schleife ist. hier würde auch nur immer wieder 4 ausgegeben werden oder vertu ich mich da jetzt?
-
Du hast 2 verschachtelte for-Schleifen.
Die äussere hat die Laufvariable i, die erste innere zählt mit j und die zweite innere mit k. Die Anweisung steht im Rumpf der äusseren Schleifen, d.h. dort i bekannt und wird pro Durchlauf auch geändert.
Du wirst also folgendes rausbekommen:
// ...... 5. Durchlauf beendet. 4. Durchlauf beendet. 3. Durchlauf beendet. 2. Durchlauf beendet. 1. Durchlauf beendet.Mit meinem Vorschalg zählt er genau umgekehrt, also von 1 (oder 0) hoch
-
ups okay hab eine klammer übersehn
-
Wie ich eben sagte, das gilt ...
-
...
-
#include <iostream> #include <cstdlib> #include <ctime> using namespace std; const int MAX=5; int feld[MAX], hilf, i; void zufallszahlen() { srand(time(0)); //Zufallsgenerator vorbereiten for (i=0; i<MAX; i++) { //Array besetzen und anzeigen feld [i] = rand() % 100 + 1; cout << feld [i] << " "; } } void tauschen() { for(int j=0; j<i; j++) { 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] << " "; } } void ergebnis() { // Zeige das Array in diesem Durchlauf cout << endl << MAX-i << ". Durchlauf beendet: "; for(int k=0; k<MAX; k++) { cout << feld[k] << " "; } cout << endl; } void bubblesort() { zufallszahlen(); cout << endl; for(i=MAX-1; i>0; i--) // MAX-1, weil die Karten immer mit dem rechten Nachbarn verglichen werden // d. h. nicht 4, sondern 3 Vergleiche { tauschen(); ergebnis(); } cin.clear(); cin.get(); } int main() { bubblesort(); }so sieht das ganze doch schon viel schöner aus find ich zumindest^^
-
Komischen Geschmack hast du.
-
Ist halt die Frage, ob man als Kind beim Versteckspielen bis 20 gezählt hat oder von 20 auf 0 runtergezählt hat.
-
Jockelx schrieb:
Komischen Geschmack hast du.
ich find das so übersichtlicher weil man nich mehr so viele schleifen ineinander verschachtelt hat und mit den klammern nich mehr durcheinander kommt
-
#include <iostream> #include <cstdlib> #include <ctime> using namespace std; const int MAX=5;//Unfug int feld[MAX], hilf, i;//Pöse! void zufallszahlen()//ok, aber ohne globale Variablen { srand(time(0)); //Zufallsgenerator vorbereiten//hier falsch for (i=0; i<MAX; i++) { //Array besetzen und anzeigen feld [i] = rand() % 100 + 1; cout << feld [i] << " ";//hier bitte keine Ausgabe } } void tauschen()//ah, eine innere Schleife, an sich ok {//Ausgabe wegmachen for(int j=0; j<i; j++) { 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] << " "; } } void ergebnis()//Ja, so kann man ausgeben { // Zeige das Array in diesem Durchlauf cout << endl << MAX-i << ". Durchlauf beendet: ";//weg for(int k=0; k<MAX; k++) { cout << feld[k] << " "; } cout << endl; } void bubblesort()//nu wirds aber kindisch, viel zu überladen, das ist die main. { zufallszahlen(); cout << endl; for(i=MAX-1; i>0; i--) // MAX-1, weil die Karten immer mit dem rechten Nachbarn verglichen werden // d. h. nicht 4, sondern 3 Vergleiche { tauschen(); ergebnis(); } cin.clear(); cin.get(); } int main() { bubblesort(); }
-
Die Kritik war sicherlich nicht das aufteilen in Funktionen...
Aber ein globales i und hilf (feld am besten auch nicht)?
Eine Sortierfunktion, sollte sicherlich ein Feld sortieren und nicht erstmal ein Neues erzeugen!
Funktionen machen etwas. Ein Substantiv (zufallszahlen) als Funktionsname ist nicht schön.
-
bin ja auch noch n ziemlicher grünschnabel was c++ angeht. die ganzen konventionen sind mir noch nicht so geläufig.
-
Durch Klammern sollte man sich nicht durcheinanderbringen lassen können.
Dass man Teile in Funktionen auslagert ist auch gut.
Aber deine Formatierung ist Müll und deine globalen Variablen auch...