Sortierung von Zahlen



  • Wie kann ich die Zahlen sortieren?

    #include <ctime>
    #include <iostream>
    
    using namespace std;
    
    int main(int argc, char *argv[])
    {
    	int lotto[6];
        int i, j;
        int iMax = 6;
        bool neueZahl;
    
        srand(static_cast<int>(time(0)));rand();
        for(i=0; i<iMax; i++)
        {
            do
            {
                lotto[i] = rand() % 45 + 1;
                neueZahl = true;
                for (j=0; j<i; j++)
                {
                    if (lotto[j]==lotto[i])
                    {
                        neueZahl = false;
                    }
                }
            }
    
            while (!neueZahl);
    
            cout << lotto[i] << " ";
         }
            cout << endl;
    
        return 0;
    }
    


  • Wenn es dir nur um eine Funktion geht, die effizient Werte sortieren kann, dann schau dir auf www.cplusplus.com mal std::sort() an.



  • std::sort

    int zahlen[]={3,2,5,0};
    std::sort(&zahlen[0],&zahlen[4]);
    


  • Nexus schrieb:

    Wenn es dir nur um eine Funktion geht, die effizient Werte sortieren kann, dann schau dir auf www.cplusplus.com mal std::sort() an.

    wie es funktioniert das weiss aber ich weiss nicht wie man das in mein programm implementiert 😕



  • huso schrieb:

    wie es funktioniert das weiss aber ich weiss nicht wie man das in mein programm implementiert 😕

    Das ist ein Widerspruch in sich... 😃



  • _matze schrieb:

    huso schrieb:

    wie es funktioniert das weiss aber ich weiss nicht wie man das in mein programm implementiert 😕

    Das ist ein Widerspruch in sich... 😃

    ist was dran 😃 aber weiss echt nicht wie implementieren... geht das nur mit for schleifen?



  • huso schrieb:

    _matze schrieb:

    huso schrieb:

    wie es funktioniert das weiss aber ich weiss nicht wie man das in mein programm implementiert 😕

    Das ist ein Widerspruch in sich... 😃

    ist was dran 😃 aber weiss echt nicht wie implementieren... geht das nur mit for schleifen?

    Wie, for-Schleifen?? Das ist ein Aufruf von std::sort, mehr nicht. Ich habe auch ein Beispiel gepostet, falls du es übersehen hast.



  • _matze schrieb:

    huso schrieb:

    _matze schrieb:

    huso schrieb:

    wie es funktioniert das weiss aber ich weiss nicht wie man das in mein programm implementiert 😕

    Das ist ein Widerspruch in sich... 😃

    ist was dran 😃 aber weiss echt nicht wie implementieren... geht das nur mit for schleifen?

    Wie, for-Schleifen?? Das ist ein Aufruf von std::sort, mehr nicht. Ich habe auch ein Beispiel gepostet, falls du es übersehen hast.

    ht

    das habe ich gesehen abr bei geht das irgendwie nicht...
    ich hatte es eigentlich so vor, dass ich jede zahl miteinander vergleiche.

    z.B 8 0 5 6 9 2

    ist 8 grösser als 0 wenn ja ist die reihenfolge dann so 0 8 5 6 9 2 usw.



  • huso schrieb:

    das habe ich gesehen abr bei geht das irgendwie nicht...

    Das ist keine Fehlerbeschreibung! Wenn was nicht geht, sag einfach, wie es wo und wann nicht geht. Dann wird man auch eher daraus schlau.

    huso schrieb:

    ich hatte es eigentlich so vor, dass ich jede zahl miteinander vergleiche.

    z.B 8 0 5 6 9 2

    ist 8 grösser als 0 wenn ja ist die reihenfolge dann so 0 8 5 6 9 2 usw.

    Du willst also selber sortieren? Das kannst du natürlich machen, dann halt doch mit Schleifen. Ich dachte, du suchst eine Funktion, die das für dich erledigt.



  • _matze schrieb:

    huso schrieb:

    das habe ich gesehen abr bei geht das irgendwie nicht...

    Das ist keine Fehlerbeschreibung! Wenn was nicht geht, sag einfach, wie es wo und wann nicht geht. Dann wird man auch eher daraus schlau.

    huso schrieb:

    ich hatte es eigentlich so vor, dass ich jede zahl miteinander vergleiche.

    z.B 8 0 5 6 9 2

    ist 8 grösser als 0 wenn ja ist die reihenfolge dann so 0 8 5 6 9 2 usw.

    Du willst also selber sortieren? Das kannst du natürlich machen, dann halt doch mit Schleifen. Ich dachte, du suchst eine Funktion, die das für dich erledigt.

    so habe ich es mir überlegt... die funktion kommt später 😃
    aber meine frage ist wie? muss ich eine zahl dann zwischenspeichern? bin eben ein neuling 😃



  • huso schrieb:

    aber meine frage ist wie? muss ich eine zahl dann zwischenspeichern?

    Ja, wenn du zwei Elemente des Arrays tauschen willst, geht das nur über eine temporäre Zwischenvariable. Quasi so:

    int temp=lotto[0];
    lotto[0]=lotto[1];
    lotto[1]=temp; //lotto[0] und lotto[1] sind jetzt getauscht
    

    huso schrieb:

    bin eben ein neuling 😃

    Kein Thema, war schließlich jeder mal. 🙂



  • _matze schrieb:

    huso schrieb:

    das habe ich gesehen abr bei geht das irgendwie nicht...

    Das ist keine Fehlerbeschreibung! Wenn was nicht geht, sag einfach, wie es wo und wann nicht geht. Dann wird man auch eher daraus schlau.

    Dazu wüsste ich gerne noch, woran es gescheitert ist, std::sort zu benutzen (auch, wenn es natürlich nicht verkehrt ist, wenn du das selbst machen willst). Vermutlich hast du den Header <algorithm> nicht eingebunden...?



  • Ohne Gewähr und vor allem Effizienz, siehe dazu die allseits bekannten alten Verwandten: Shell-Sort, Quick-Sort, Heap-Sort

    const int Max_Zahlen = 200;
    int lotto[Max_Zahlen];
    
    for (int i = 0; i < Max_Zahlen - 1; i++)
      for (int j = i+1; j < Max_Zahlen ; j++)
      {
         if (lotto[i]>lotto[j])
         {
           int temp = lotto[j]
           lotto[j] = lotto[i]
           lotto[j] = temp;
         }
      }
    

    Grüssle DC!



  • DeepCopy schrieb:

    Ohne Gewähr und vor allem Effizienz, siehe dazu die allseits bekannten alten Verwandten: Shell-Sort, Quick-Sort, Heap-Sort

    const int Max_Zahlen = 200;
    int lotto[Max_Zahlen];
    
    for (int i = 0; i < Max_Zahlen - 1; i++)
      for (int j = i+1; j < Max_Zahlen ; j++)
      {
         if (lotto[i]>lotto[j])
         {
           int temp = lotto[j]
           lotto[j] = lotto[i]
           lotto[j] = temp;
         }
      }
    

    Grüssle DC!

    Wenn es ihm ums selbst machen geht, braucht er keine Komplettlösung, die ist dem Lernen eher weniger zuträglich. Ich hoffe, er macht es selbst (und lernt dabei ne Menge).



  • Na ja, das Schleifenkonstrukt ist jetzt nicht sooo... gut, oder? Ausserdem muss er noch seinen Code einfügen, um die Schleife richtig zu bedienen, ach... und mir war halt einfach langweilig 😃



  • DeepCopy schrieb:

    Na ja, das Schleifenkonstrukt ist jetzt nicht sooo... gut, oder? Ausserdem muss er noch seinen Code einfügen, um die Schleife richtig zu bedienen, ach... und mir war halt einfach langweilig 😃

    bin überfordert... gebe auf und vergess das mal liebe



  • Hey, lass dich nicht entmutigen, zeig doch mal was du bisher gemacht hast. 👍



  • DeepCopy schrieb:

    Hey, lass dich nicht entmutigen, zeig doch mal was du bisher gemacht hast. 👍

    das von dir hab ich nicht kopiert die for anweisung hatte ich schon....

    #include <ctime>
    #include <iostream>
    
    using namespace std;
    
    int main(int argc, char *argv[])
    {
    	int lotto[6];
        int i, j;
        bool neueZahl;
    
        srand(static_cast<int>(time(0)));rand();
        for (int i = 0; i < lotto[6] - 1; i++)
        {
            do
            {
                lotto[i] = rand() % 45 + 1;
                neueZahl = true;
            	for (int j = i+1; j < lotto[6] ; j++)
    
            	{
                    if (lotto[j]==lotto[i])
                    	{
                        neueZahl = false;
                    	}
    			}
             }
         }
    
            while (!neueZahl);
    
            cout << lotto[i] << " ";
         }
            cout << endl;
    
        return 0;
    


  • for (int i = 0; i < lotto[6] - 1; i++)
    

    Dann fangen wir mal bei der Zeile an, was glaubst passiert hier ?



  • DeepCopy schrieb:

    for (int i = 0; i < lotto[6] - 1; i++)
    

    Dann fangen wir mal bei der Zeile an, was glaubst passiert hier ?

    die überprüfung?



  • Richtig eine Überprüfung:

    aber du hast deinen Code so geschrieben:

    int lotto[6]; // du hast ein Array mit 6 int elementen 
                    // und einen index von 0 - 5, weil man 
                    // bei arrays bei 0 (zero based) beginnt zu zählen
    
      // jetzt versuchst du aber folgendes, was auch 
      //semantisch falsch ist das aber später
      for (int i = 0; i < lotto[6] - 1; i++) 
       ...
    

Anmelden zum Antworten