Eigener Sortieralgorythmus



  • Das ist immer noch freischwebend. Besser ist es so:

    void __fastcall TForm1::Button2Click(TObject *Sender) 
    { 
      ListBox1->Clear(); 
      int* zahlenfeld = new int[10];//du kannst Element 0 ruhig verwenden
      zahlenfeld[0] = StrToInt(Form1->Edit1->Text);
      zahlenfeld[1] = StrToInt(Form1->Edit2->Text);
      zahlenfeld[2] = StrToInt(Form1->Edit3->Text);
      zahlenfeld[3] = StrToInt(Form1->Edit4->Text);
      zahlenfeld[4] = StrToInt(Form1->Edit5->Text);
      zahlenfeld[5] = StrToInt(Form1->Edit6->Text);
      zahlenfeld[6] = StrToInt(Form1->Edit7->Text);
      zahlenfeld[7] = StrToInt(Form1->Edit8->Text);
      zahlenfeld[8] = StrToInt(Form1->Edit9->Text);
      zahlenfeld[9] = StrToInt(Form1->Edit10->Text);
    
      eigener_sortieralgorithmus(zahlenfeld,10);//Aufruf der Sortierfunktion
    
      for(int i=0;i<10;++i)
      {
        ListBox1->Items->Add(IntToStr(zahlenfeld [i]));
      }
    }
    

    PS: Zum zweiten Mal - sfds



  • Hallo

    Nein damit erzeugst du eine leere Schleife die entweder nichts macht oder endlos ist. Das Semikolon hinter dem while muß weg damit der nachfolgende Codeblock als zu der Schleife gehörend erkannt wird.

    /Edit : ach nö, ich bin einfach noch nicht wieder fit 😉

    bis bald
    akari



  • und danach dann den rest drann hängen ?????
    void __fastcall TForm1::Button2Click(TObject Sender)
    {
    ListBox1->Clear();
    int
    zahlenfeld = new int[10];//du kannst Element 0 ruhig verwenden
    zahlenfeld[0] = StrToInt(Form1->Edit1->Text);
    zahlenfeld[1] = StrToInt(Form1->Edit2->Text);
    zahlenfeld[2] = StrToInt(Form1->Edit3->Text);
    zahlenfeld[3] = StrToInt(Form1->Edit4->Text);
    zahlenfeld[4] = StrToInt(Form1->Edit5->Text);
    zahlenfeld[5] = StrToInt(Form1->Edit6->Text);
    zahlenfeld[6] = StrToInt(Form1->Edit7->Text);
    zahlenfeld[7] = StrToInt(Form1->Edit8->Text);
    zahlenfeld[8] = StrToInt(Form1->Edit9->Text);
    zahlenfeld[9] = StrToInt(Form1->Edit10->Text);

    eigener_sortieralgorithmus(zahlenfeld,10);//Aufruf der Sortierfunktion

    for(int i=0;i<10;++i)
    {
    ListBox1->Items->Add(IntToStr(zahlenfeld [i]));
    }
    }

    also so? ➡

    template <typename y>
    void eigener_sortieralgorithmus(y*& zahlenfeld, const std::size_t& size)
    {
    bool redo = false;
    do {
    redo = false;
    for (std::size_t i = 0; i < (size - 1); ++i)
    if (zahlenfeld[i] > zahlenfeld[i + 1])
    {
    std::swap<y>(zahlenfeld[i], zahlenfeld[i + 1]);
    redo = true;
    }
    } while (redo == true); }



  • Ja, genau - wenn du lustig bist, kannst du die beiden Funktionen auch vertauschen 😉

    PS: Und wenn du noch weitere Hilfe von mir erwartest, formatier deine Quelltexte in Zukunft übersichtlicher - ich hab dich nicht umsonst schon mehrfach auf sfds hingewiesen.

    akari schrieb:

    /Edit : ach nö, ich bin einfach noch nicht wieder fit 😉

    Ich überlass dir gerne das Feld 😃



  • Ich bekomm immernoch den c++Fehler E2268 Aufruf der undefinierten Funktion eigener_sortieralgorithmus.
    Was muss ich da machen???

    void __fastcall TForm1::Button2Click(TObject *Sender)
    {
    ListBox1->Clear();
    int* zahlenfeld = new int[10];//du kannst Element 0 ruhig verwenden
    zahlenfeld[0] = StrToInt(Form1->Edit1->Text);
    zahlenfeld[1] = StrToInt(Form1->Edit2->Text);
    zahlenfeld[2] = StrToInt(Form1->Edit3->Text);
    zahlenfeld[3] = StrToInt(Form1->Edit4->Text);
    zahlenfeld[4] = StrToInt(Form1->Edit5->Text);
    zahlenfeld[5] = StrToInt(Form1->Edit6->Text);
    zahlenfeld[6] = StrToInt(Form1->Edit7->Text);
    zahlenfeld[7] = StrToInt(Form1->Edit8->Text);
    zahlenfeld[8] = StrToInt(Form1->Edit9->Text);
    zahlenfeld[9] = StrToInt(Form1->Edit10->Text);
    
    eigener_sortieralgorithmus(zahlenfeld,10);//Aufruf der Sortierfunktion
    
    for(int i=0;i<10;++i)
    {
    ListBox1->Items->Add(IntToStr(zahlenfeld [10]));
    }
    }
    
    also so? :arrow_right:
    
    template <typename y>
    void eigener_sortieralgorithmus(y*& zahlenfeld, const std::size_t& size)
    {
    bool redo = false;
    do {
    redo = false;
    for (std::size_t i = 0; i < (size - 1); ++i)
    if (zahlenfeld[i] > zahlenfeld[i + 1])
    {
    std::swap<y>(zahlenfeld[i], zahlenfeld[i + 1]);
    redo = true;
    }
    } while (redo == true); }
    

    erbitte Hilfe hab auch deinen rat angenommen^^



  • Hallo

    Du rufst die Funktion auf bevor du sie definierst. Verschieb entweder die Funktion eigener_sortieralgorithmus vor die Methode TForm1::Button2Click oder mach eine Forward Declaration oder lagere eigener_sortieralgorithmus in eine eigene Headerdatei aus die du oben in der cpp-Datei includest in der sie gebraucht wird.

    bis bald
    akari



  • hy
    also so???? :
    nur dann kommen noch mehr fehler
    ich kenn mich auch nicht wirklich gut aus mit den begriffen die du mir als ratschlag gegeben hast also weiß ich nicht wie ich das umsetzen soll!!!

    template <typename y>
    void eigener_sortieralgorithmus(y*& zahlenfeld, const std::size_t& size)
    {
    bool redo = false;
    do {
    redo = false;
    for (std::size_t i = 0; i < (size - 1); ++i)
    if (zahlenfeld[i] > zahlenfeld[i + 1])
    {
    std::swap<y>(zahlenfeld[i], zahlenfeld[i + 1]);
    redo = true;
    }
    } while (redo == true); }
    
    void __fastcall TForm1::Button2Click(TObject *Sender)
    {
    ListBox1->Clear();
    int* zahlenfeld = new int[10];//du kannst Element 0 ruhig verwenden
    zahlenfeld[0] = StrToInt(Form1->Edit1->Text);
    zahlenfeld[1] = StrToInt(Form1->Edit2->Text);
    zahlenfeld[2] = StrToInt(Form1->Edit3->Text);
    zahlenfeld[3] = StrToInt(Form1->Edit4->Text);
    zahlenfeld[4] = StrToInt(Form1->Edit5->Text);
    zahlenfeld[5] = StrToInt(Form1->Edit6->Text);
    zahlenfeld[6] = StrToInt(Form1->Edit7->Text);
    zahlenfeld[7] = StrToInt(Form1->Edit8->Text);
    zahlenfeld[8] = StrToInt(Form1->Edit9->Text);
    zahlenfeld[9] = StrToInt(Form1->Edit10->Text);
    
    eigener_sortieralgorithmus(zahlenfeld,10);//Aufruf der Sortierfunktion
    
    for(int i=0;i<10;++i)
    {
    ListBox1->Items->Add(IntToStr(zahlenfeld [10]));
    }
    }
    


  • Hallo
    wie schreibe ich den eine Forward Declaration ???

    U.A.w.g.



  • Aicde schrieb:

    Hallo
    wie schreibe ich den eine Forward Declaration ???

    U.A.w.g.

    Indem du nur den Funktionskopf (Name plus Parameterliste) hinschreibst und dahinter ein Semikolon anstelle des Rumpfes setzt.

    PS: Wo hast du eigentlich C++ gelernt? Sowas ist eigentlich absolutes Grundlagenwissen.

    PPS: Tu dir selbst einen Gefallen und gewöhn dir einen vernünftigen Ausrichtungsstil an 😉 (es gibt keinen "besten" Stil, aber deiner ist definitiv einer der schlechtesten)



  • Wo muss den die Forward declaration hin?? in welche zeile??



  • Auf jeden Fall vor die Funktion, die den Sortieralgorithmus aufrufen will (oder in einen der Header, die du weiter oben included hast).


Anmelden zum Antworten