Verständnisproblem mit Beispielprogramm.



  • In dem Buch, das ich zum lernen von C++ verwende ("Einstieg in C++" von Arnold Willemer), wird zur Erklärung der Funktionsweise von Arrays unter anderem der Bubblesort gezeigt. Hier hinterlässt der Autor ein Script, welches ich auch größtenteils verstehe, allerdings hab ich doch Probleme mit 2 Stellen, hier der Quellcode:

    #include <iostream>
    #include <cstdlib>
    using namespace std;
    
    const int MAX=5;
    int main()
    {
        int feld[MAX], hilf;
        int i, j, k;
    
        srand(time(0));
        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])
              { //Tauschen erforderlich
                 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;
        }
    }
    

    Mein erstes Problem findet sich in Zeile 11:
    was genau bewirkt die Funktion "time(0)" und warum wirrd sie hier verwendet?
    2.:
    was wird ab Zeile 24 genau gemacht? Wie wird die Zahl innerhalb des Arrays genau getauscht? Und was bewirkt die Variable "hilf" dabei genau?



  • srand() versieht den Zufallsgenerator rand() mit einem Startwert. Hier wird als Startwert die Zeit genommen. Damit vermeidet man, daß der Zufallsgenerator immer die gleiche Zahlenfolge ausspuckt.

    Die Variable hilf ist nötig, weil "feld[j]=feld[j+1]; feld[j+1]=feld[j]" nicht funktionieren würde (warum, dürfte klar sein: nach der ersten Anweisung wäre feld[j] == feld[j+1], was einen Tausch unmöglich macht).


Anmelden zum Antworten